單例項資料庫手工轉化多例項資料庫

yangtingkun發表於2009-05-01

需要說明一下,這篇文章不是介紹將一個單例項的資料庫環境升級為RAC環境,而是介紹如何將一個RAC環境下的單例項資料庫,轉變為多例項資料庫。

 

 

OracleCLUSTER軟體已經在兩個節點上建立成功,OracleASM例項已經啟動。事實上,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;

資料庫已更改。

關閉資料庫,設定SIDTEST1,並設定初始化引數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部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-592453/,如需轉載,請註明出處,否則將追究法律責任。

相關文章