首页 > Linux操作系统 > Linux操作系统 > 单实例数据库手工转化多实例数据库
需要说明一下,这篇文章不是介绍将一个单实例的数据库环境升级为RAC环境,而是介绍如何将一个RAC环境下的单实例数据库,转变为多实例数据库。
Oracle的CLUSTER软件已经在两个节点上建立成功,Oracle的ASM实例已经启动。事实上,RAC环境的数据库已经建立起来。
不过在这个RAC环境中,其中一个节点上建立了一个单实例的数据库,数据文件已经存储在ASM中,因此下面要做的只是将这个数据库变为多实例访问的RAC数据库。
bash-3.00$ cd $ORACLE_HOME/../crs/bin
bash-3.00$ crs_stat -t
名称 类型 目标 状态 主机
------------------------------------------------------------
ora.rac11g.db application OFFLINE OFFLINE
ora....g1.inst application ONLINE OFFLINE
ora....g2.inst application ONLINE OFFLINE
ora.ractest.db application OFFLINE OFFLINE
ora....t1.inst application OFFLINE OFFLINE
ora....t2.inst application OFFLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE ser1
ora....R1.lsnr application ONLINE ONLINE ser1
ora.ser1.gsd application ONLINE ONLINE ser1
ora.ser1.ons application ONLINE ONLINE ser1
ora.ser1.vip application ONLINE ONLINE ser1
ora....SM2.asm application ONLINE ONLINE ser2
ora....R2.lsnr application ONLINE ONLINE ser2
ora.ser2.gsd application ONLINE ONLINE ser2
ora.ser2.ons application ONLINE ONLINE ser2
ora.ser2.vip application ONLINE ONLINE ser2
登陆数据库进行检查:
bash-3.00$ export ORACLE_SID=test
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 4月 8 17:35:11 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
SQL> col parameter format a40
SQL> col value format a30
SQL> select * from v$option
2 where parameter = 'Real Application Clusters';
PARAMETER VALUE
---------------------------------------- ------------------------------
Real Application Clusters TRUE
SQL> show parameter cluster
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean FALSE
cluster_database_instances integer 1
cluster_interconnects string
SQL> select inst_id, instance_number, instance_name
2 from gv$instance;
INST_ID INSTANCE_NUMBER INSTANCE_NAME
---------- --------------- ----------------
1 1 test
根据上面的检查可以发现,数据库已经安装RAC选项,但是当前数据库是单实例数据库。下面通过手工的方式将当前的数据库变为RAC环境:
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/test/spfiletest.ora
SQL> ALTER SYSTEM SET CLUSTER_DATABASE = TRUE SCOPE = SPFILE;
系统已更改。
SQL> ALTER SYSTEM SET CLUSTER_DATABASE_INSTANCES = 2 SCOPE = SPFILE;
系统已更改。
SQL> ALTER SYSTEM SET INSTANCE_NUMBER = 1 SCOPE = SPFILE SID = 'TEST1';
系统已更改。
SQL> ALTER SYSTEM SET INSTANCE_NUMBER = 2 SCOPE = SPFILE SID = 'TEST2';
系统已更改。
SQL> ALTER SYSTEM SET THREAD = 1 SCOPE = SPFILE SID = 'TEST1';
系统已更改。
SQL> ALTER SYSTEM SET THREAD = 2 SCOPE = SPFILE SID = 'TEST2';
系统已更改。
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = 'UNDOTBS1' SCOPE = SPFILE SID = 'TEST1';
系统已更改。
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = 'UNDOTBS2' SCOPE = SPFILE SID = 'TEST2';
系统已更改。
SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.62)(PORT=1521))' SCOPE = SPFILE SID = 'TEST1';
系统已更改。
SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.63)(PORT=1521))' SCOPE = SPFILE SID = 'TEST2';
系统已更改。
修改完RAC环境的初始化参数,可以创建UNDOTBS2表空间和THREAD2使用的REDO.log文件:
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES
2 WHERE TABLESPACE_NAME = 'UNDOTBS1';
FILE_NAME
--------------------------------------------------------------------------------
+DATA/test/datafile/undotbs1.535.668281229
SQL> SELECT MEMBER FROM V$LOGFILE;
MEMBER
--------------------------------------------------------------------------------
+DATA/test/onlinelog/group_1.530.668281219
+DATA/test/onlinelog/group_2.531.668281219
+DATA/test/onlinelog/group_3.532.668281219
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, BYTES/1024/1024
2 FROM V$LOG;
GROUP# THREAD# SEQUENCE# BYTES/1024/1024
---------- ---------- ---------- ---------------
1 1 391 50
2 1 389 50
3 1 390 50
SQL> CREATE UNDO TABLESPACE UNDOTBS2
2 DATAFILE '+DATA/test/datafile/undotbs2.dbf' SIZE 4G;
表空间已创建。
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4
2 '+DATA/test/onlinelog/redo4.log' SIZE 50M;
数据库已更改。
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 5
2 '+DATA/test/onlinelog/redo5.log' SIZE 50M;
数据库已更改。
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 6
2 '+DATA/test/onlinelog/redo6.log' SIZE 50M;
数据库已更改。
SQL> ALTER DATABASE ENABLE THREAD 2;
数据库已更改。
关闭数据库,设置SID为TEST1,并设置初始化参数inittest1.ora:
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> EXIT
从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options 断开
bash-3.00$ echo "SPFILE='+DATA/test/spfiletest.ora'" > $ORACLE_HOME/dbs/initTEST1.ora
bash-3.00$ more $ORACLE_HOME/dbs/initTEST1.ora
SPFILE='+DATA/test/spfiletest.ora'
bash-3.00$ export ORACLE_SID=TEST1
尝试启动数据库:
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 4月 9 11:25:02 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接到空闲例程。
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 806133760 bytes
Fixed Size 2099064 bytes
Variable Size 195623048 bytes
Database Buffers 603979776 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
数据库已经打开。
检查数据库状态:
SQL> show parameter cluster_database
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
SQL> select instance_number, instance_name from v$instance;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
1 TEST1
下面到节点上设置初始化参数文件和SID:
bash-3.00$ export ORACLE_SID=TEST2
bash-3.00$ echo "SPFILE='+DATA/test/spfiletest.ora'" > $ORACLE_HOME/dbs/initTEST2.ora
bash-3.00$ more $ORACLE_HOME/dbs/initTEST2.ora
SPFILE='+DATA/test/spfiletest.ora'
bash-3.00$ mkdir -p /data/oracle/admin/test/adump
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 4月 9 13:25:12 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接到空闲例程。
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 806133760 bytes
Fixed Size 2099064 bytes
Variable Size 191428744 bytes
Database Buffers 608174080 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
数据库已经打开。
检查数据库的状态:
SQL> SELECT NAME FROM V$DATABASE;
NAME
---------
TEST
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
2 TEST2
SQL> SELECT INST_ID, INSTANCE_NUMBER, INSTANCE_NAME
2 FROM GV$INSTANCE;
INST_ID INSTANCE_NUMBER INSTANCE_NAME
---------- --------------- ----------------
2 2 TEST2
1 1 TEST1
数据库已经变为RAC环境,大部分工具已经基本完成。
在节点2上配置listener.ora以及tnsnames.ora文件,其中listener.ora配置类似如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = rac11g2)
(ORACLE_HOME = /data/oracle/product/11.1/database)
)
(SID_DESC =
(SID_NAME = TEST2)
(ORACLE_HOME = /data/oracle/product/11.1/database)
)
)
LISTENER_SER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ser2-vip)(PORT = 1521)(IP = FIRST))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.63)(PORT = 1521)(IP = FIRST))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)
将RAC数据库添加到SRVCTL工具配置中:
bash-3.00$ srvctl add database -d test -o /data/oracle/product/11.1/database -p +DATA/test/spfiletest.ora -n test
bash-3.00$ srvctl add instance -d test -i TEST1 -n ser1
bash-3.00$ srvctl add instance -d test -i TEST2 -n ser2
密码文件还保存在文件系统中,可以在两个实例上分别保存密码文件,也可以将密码文件放到ASM中。这里就不再描述了,可以参考:http://yangtingkun.itpub.net/post/468/293477
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-592453/ ,如需转载,请注明出处,否则将追究法律责任。