詳述Oracle 多路複用的控制檔案——增加一個控制檔案副本

煙花丶易冷發表於2016-08-22
首先你要明白幾個概念,多路複用就是他們是一樣的,如果一個控制檔案壞了,那麼你可以把它刪掉,然後再從好的那個哪複製一份,一定注意,整個過程你的資料庫例項是shutdown 狀態(這樣能保證複製的控制檔案的一致性,否則假如你在open狀態時,難免你的好的那一份控制檔案會在你複製之後,有所改變,這樣你的複製的那份就會和你現在的好的那個不一致了)。
如果你有多個多路複用的控制檔案,那麼只要你也壞了,那你例項就會open不起啦,準確的說能啟動到nomount狀態,也可以理解為這幾個控制檔案同時被資料庫例項讀取,所以說只要一個壞了,就有問題了。
如果你想要增加控制檔案,必須先要在引數檔案中新增你要增加的控制檔案的路徑,因為我們先讀取的引數檔案的內容,才會知道控制檔案的位置,所以你必須在裡面配置相關的路徑。還要注意這個引數是靜態引數,要加上scope=spfile   然後重啟才有效。
具體過程:
一:先把資料庫shut   immediate 
二:你應該先找到你的控制檔案在哪裡 有以下幾個方法:
1) SYS@ENMOEDU> show  parameter  control             #檢視帶control關鍵字的引數    就能看出你的控制檔案的位置和個數,最常用。

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string          /u01/app/oracle/oradata/ENMOEDU/control01.ctl,
 /u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl,
 /u01/app/oracle/oradata/control03.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
2)我們知道,在引數檔案中有控制檔案的資訊,所以你可以在引數檔案中檢視,
[oracle@ENMOEDU ~]$ cd $ORACLE_HOME/dbs              #引數檔案的位置
[oracle@ENMOEDU dbs]$ ls 
hc_ENMOEDU.dat init.ora lkENMOEDU orapwenmoedu orapwENMOEDU snapcf_ENMOEDU.f    spfileENMOEDU.ora
但是spfile 是二進位制的檔案,你不能直接看到,所以你應該 先把它生成pfiled   SYS@ENMOEDU> create pfile from spfile;   注意這個在shutdown的模式也可以執行,因為這是關於引數檔案的命令,

File created        沒有指定pfile 的路徑( create pfile='/u01/app/oracle/oradata/pfile' from spfile;)  那麼預設會建在$ORACLE_HOME/dbs 中,然後你在此目錄中找,卻發現沒有,沒關係,其實initENMOEDU.ora   就是剛才你建立的pfile(記住吧),然後檢視它 就可以看到  控制檔案的資訊
 [oracle@ENMOEDU dbs]$ more initENMOEDU.ora
*.control_files='/u01/app/oracle/oradata/ENMOEDU/control01.ctl','/u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl','/u01/app/oracle/oradata/control03.ctl'
3)你還可以用下面的語句直接模糊查詢
SYS@ENMOEDU> select * from v$parameter where name like '%control%';      
三:.當你知道了控制檔案存在於那了,那麼你就可以進行複製了,再次提醒,要在shutdown 狀態啊。
[oracle@ENMOEDU dbs]$ cp /u01/app/oracle/oradata/ENMOEDU/control01.ctl /u01/app/oracle/oradata/ENMOEDU/control04.ctl    
四:只複製一份是不夠的,還需要在引數檔案中新增上,新增加的控制檔案的路徑,那修改引數的方法有兩種。
1)第2步中,建立的pfile檔案中,新增路徑,然後再建立成spfile即可。
[oracle@ENMOEDU dbs]$ vi initENMOEDU.ora    
*.control_files='/u01/app/oracle/oradata/ENMOEDU/control01.ctl','/u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl','/u01/app/oracle/fast_recovery_area/ENMOEDU/control04.ctl'
2)也可以直接修改靜態引數   注意要選擇這樣修改引數,那你必須在複製之前做,因為這個命令要在open 狀態,如果你先複製,然後再起庫  可能導致 不一致 
SYS@ENMOEDU> alter system set control_files = '/u01/app/oracle/oradata/ENMOEDU/control01.ctl','/u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl','/u01/app/oracle/fast_recovery_area/ENMOEDU/control04.ctl' scope=spfile;      
五:起例項   即可
SYS@ENMOEDU> startup 
ORACLE instance started. 

Total System Global Area 422670336 bytes 
Fixed Size 1345380 bytes 
Variable Size 348129436 bytes 
Database Buffers 67108864 bytes 
Redo Buffers 6086656 bytes 
Database mounted. 
Database opened.
總結:控制檔案 是非常重要的,它存著資料檔案,日誌檔案的資訊,也是多路複用的,而且同時用哪些一樣的控制檔案,其中一個壞了,就會出現問題,修復要在shutdown狀態。

















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

相關文章