RAC環境中SID(instance_name),instance_number,thread#,undotbs之間的關聯關係

尛樣兒發表於2012-11-07

一.引數節選。
下面是從一個4節點11gR2 RAC節選的引數檔案內容:
......
oracledb2.instance_number=2
oracledb1.instance_number=1
oracledb4.instance_number=4
oracledb3.instance_number=3
......
oracledb2.thread=2
oracledb3.thread=3
oracledb4.thread=4
oracledb1.thread=1
......
oracledb4.undo_tablespace='UNDOTBS3'
oracledb1.undo_tablespace='UNDOTBS1'
oracledb3.undo_tablespace='UNDOTBS4'
oracledb2.undo_tablespace='UNDOTBS2'
    引數檔案中引數的格式是:x1.x2=x3,其中x1表示的是SID(System Identifier),x2表示的具體引數,x3表示的是引數值。

二.引數含義討論。
1).oracledb[x].instance_number=x表明了SID(instance_name)和instance_number之間的關係,這種關係可以從下面的SQL得到驗證:
SQL> select instance_number,instance_name from gv$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
              4 oracledb4
              1 oracledb1
              3 oracledb3
              2 oracledb2

        每個例項的instance_number是不可修改的,這裡的instance_name實際就是SID,但是不同instance_number的例項可以執行在不同的RAC節點,也就是說,oracledb3可以執行在任何一個節點,這是由節點ORACLE_SID環境變數決定的,如果不是上面INSTANCE_NAME範圍內的名稱,將收到如下報錯資訊:
[oracle@rac4 dbs]$ cp initoracledb4.ora inita.ora
[oracle@rac4 dbs]$ cp orapworacledb4 orapwa
[oracle@rac4 dbs]$ export ORACLE_SID=a
[oracle@rac4 dbs]$ echo $ORACLE_SID
a
[oracle@rac4 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Wed Nov 7 15:40:18 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup 
ORA-29760: instance_number parameter not specified

2).oracledb[x].thread=x表明了SID和日誌執行緒之間的關係。

3).oracledb[x].undo_tablespace='x'表明了SID和UNDO表空間之間的關係。

三.確定SID的方法。
        SID是關係的核心,確定SID還有如下幾種方法:
a).切換到Oracle Database的$ORACLE_HOME/dbs目錄,檢視引數檔案或密碼檔案可以獲得SID資訊,格式為:SPFILE.ora,INIT.ora,orapw
b).如果是檔案系統,儲存資料檔案的目錄結構也包含SID資訊,例如:$ORACLE_BASE\..\oradata\
c).執行SQL語句SELECT INSTANCE_NAME FROM V$INSTANCE;
d).在Linux和UNIX環境下,執行ps -ef | grep ora_命令,程式的命名中也包含SID資訊,例如:ora_smon_oracledb4。

四.修改OCR中儲存的節點執行INSTANCE_NAME的資訊。
        如果在RAC環境下,調整了節點執行的INSTANCE_NAME,那麼還需要更新OCR資訊。oracledb3本來執行在rac4節點上,oracledb4執行在rac3節點上,執行以下步驟更新INSTANCE_NAME節點執行的OCR資訊:
[root@rac1 bin]# ./srvctl start instance -d oracledb -i oracledb4
PRCC-1015 : oracledb was already running on rac3
PRCR-1004 : Resource ora.oracledb.db is already running
[root@rac1 bin]# ./srvctl remove instance -d oracledb -i oracledb3
Remove instance from the database oracledb? (y/[n]) y
[root@rac1 bin]# ./srvctl remove instance -d oracledb -i oracledb4
Remove instance from the database oracledb? (y/[n]) y
PRCD-1052 : Failed to remove instance from database oracledb
PRCD-1101 : Failed to remove running instance oracledb4 for database oracledb
[root@rac1 bin]# ./srvctl stop instance -d oracledb -i oracledb4
[root@rac1 bin]# ./srvctl remove instance -d oracledb -i oracledb4
Remove instance from the database oracledb? (y/[n]) y
[root@rac1 bin]# ./srvctl add instance -d oracledb -i oracledb3 -n rac3
[root@rac1 bin]# ./srvctl add instance -d oracledb -i oracledb4 -n rac4
[root@rac1 bin]# ./srvctl enable instance -d oracledb -i oracledb3 -n rac3
[root@rac1 bin]# ./srvctl enable instance -d oracledb -i oracledb4 -n rac4

--end--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-748572/,如需轉載,請註明出處,否則將追究法律責任。

相關文章