1. 程式人生 > 其它 >33.重建控制檔案(rac模式下)

33.重建控制檔案(rac模式下)

控制檔案是什麼,在前面的文章中也已經說過,這裡主要說一下重建控制檔案

1.檢視控制檔案所在的位置

  這裡怎樣檢視控制檔案的位置 

SQL> show parameter control_files;

NAME                     TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_files                 string
/oradata/orcl/control01.ctl, /
oradata/orcl/control02.ctl

2.重建控制檔案

  使用sqlplus連線到已經mount或open的rac資料庫   

  sql> alter database backup controlfile to trace noresetlogs;  ##當執行這個命令是會在alert.log中會記錄備庫控制檔案的日誌,且在tracefile中找到整個crontol檔案的sql語句

  (備份控制檔案):  

  alter database backup controlfile to '/u02/app/oracle/control.ctl';

  或者使用這種方法,把控制檔案內容給打印出來:建議使用這中方法檢視控制檔案內容

 alter database backup controlfile to trace as '/tmp/controlfile.log';

3.編寫control.sql檔案

  這裡的control.sql檔案要根據上面檢視到的控制檔案進行寫入(很簡單)

4.關閉資料庫的所有例項 

srvctl  stop database -d db_name -o immeidate

5.備份當前的控制檔案

alter database backup controlfile to '/u02/app/oracle/control.ctl';

6.確保所有的設定都是針對thread 1

instance =
1 thread = 1

7.將引數檔案中的cluster_database 設定為false

sql> startup nomount
sql> alter system set cluster_database=false scope=spfile;
sql> shutdown

8.執行指令碼(這一步是在第7步和第8步之間的)

sqlplus / as sysdba
SQL> @control.sql

9.將引數cluster_database設定為true

sql> alter system set cluster_database=true scope=spfile;

10.關閉資料庫

shu immeidate

11.啟動所有例項並檢視狀態

srvctl start database -d db_name
srvctl status database -d db_name

 

##這裡想要說幾個要注意的點:

 1.跑control.sql指令碼時,先要把資料置於nomount狀態,然後修改引數cluster_database為false,這個引數是rac叢集引數,然後再跑control.sql指令碼。

 2.跑完之後,需要在修改引數cluster_database為true. 然後再shu immeidate資料,最後再用srvctl啟動資料。

 3.如果是單例項的話,那麼就不需要設定cluster_database,直接在nomount狀態下執行control.sql語句。