Oracle啟動後對控制檔案的依賴

yangtingkun發表於2009-05-24

今天測試的時候糾正了一個錯誤的印象,一直認為如果當前控制檔案被誤刪除,會導致例項關閉。

 

 

而實際上,Oracle並不會結束當前的例項:

SQL> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/oracle/oradata/db01/contr
                                                 ol01.ctl, /u01/oracle/oradata/
                                                 db01/control02.ctl, /u01/oracl
                                                 e/oradata/db01/control03.ctl
SQL> select * from dual;

D
-
X

SQL> host
oracle:/home/oracle> cd /u01/oracle/oradata/db01
oracle:/u01/oracle/oradata/db01> ls -l *.ctl
-rw-r-----  1 oracle dba 9748480 May 24 12:55 control01.ctl
-rw-r-----  1 oracle dba 9748480 May 24 12:55 control02.ctl
-rw-r-----  1 oracle dba 9748480 May 24 12:55 control03.ctl
oracle:/u01/oracle/oradata/db01> rm control02.ctl
oracle:/u01/oracle/oradata/db01> exit
exit

SQL> select * from dual;

D
-
X

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
db01             OPEN

SQL> alter system checkpoint;

System altered.

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
db01             OPEN

SQL> alter system switch logfile;

System altered.

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
db01             OPEN

SQL> col name format a50
SQL> select * from v$controlfile;

STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
        /u01/oracle/oradata/db01/control01.ctl             NO       16384            594
        /u01/oracle/oradata/db01/control02.ctl             NO       16384            594
        /u01/oracle/oradata/db01/control03.ctl             NO       16384            594

SQL> select * from v$controlfile_record_section;
select * from v$controlfile_record_section
              *
ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3


SQL> select * from v$controlfile;

STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
        /u01/oracle/oradata/db01/control01.ctl             NO       16384            594
        /u01/oracle/oradata/db01/control02.ctl             NO       16384            594
        /u01/oracle/oradata/db01/control03.ctl             NO       16384            594

可以看到,刪除了一個控制檔案之後,資料庫照常執行,甚至在發現一個控制檔案丟失之後,資料庫例項仍然處於開啟狀態,檢查一下alert檔案:

Thread 1 advanced to log sequence 21 (LGWR switch)
  Current log# 3 seq# 21 mem# 0: /u01/oracle/oradata/db01/redo03.log
Sun May 24 13:00:58 2009
Errors in file /u01/oracle/diag/rdbms/db01/db01/trace/db01_m002_27935.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Sun May 24 13:24:09 2009
Errors in file /u01/oracle/diag/rdbms/db01/db01/trace/db01_m000_27986.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Sun May 24 14:01:49 2009
Errors in file /u01/oracle/diag/rdbms/db01/db01/trace/db01_m002_28082.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Sun May 24 14:24:59 2009
Errors in file /u01/oracle/diag/rdbms/db01/db01/trace/db01_m000_28132.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Sun May 24 14:59:29 2009
Errors in file /u01/oracle/diag/rdbms/db01/db01/trace/db01_m000_28204.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/db01/control02.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

雖然Oracle認識到一個控制檔案出現了異常,但是Oracle並沒有關閉當前例項。測試發現,即使刪除了所有當前的控制檔案,當前例項依然處於開啟的狀態,並且只有需要訪問控制檔案的操作會報錯,其他操作仍然可以執行。

Oracle既然不會自動關閉,那麼萬一出現了控制檔案誤刪除的情況,一定不要手工關閉當前的例項,只要例項不關閉,就可以輕鬆的查詢資料庫中的資料檔案、日誌檔案等資訊來重建控制檔案,而一旦關閉了例項,由於缺失控制檔案,例項將無法啟動,這時候要找到所有控制檔案中包含的資訊就比較困難了。

 

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

相關文章