oracle控制檔案重建、複用 ORA-00205
今天群裡有個哥們問我一個關於oracle控制檔案的錯誤,具體見下:
ORA-00205: error in identifying control file, check alert log for more info 遇見過沒?
細問得知,其在複用控制檔案時出現此錯誤。
故整理下控制檔案的複用方法。
以下是按照該網友描述恢復錯誤場景:
--檢視資料庫版本(一時半會沒找到什麼新的環境,就先湊合用10g了)
SQL> select * from v$version where rownum<5;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
--檢視引數檔案
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/10.2.0
/db_1/dbs/spfilenode1.ora
--擦看控制檔案引數
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/node1/
control01.ctl, /u01/app/oracle
/oradata/node1/control02.ctl,
/u01/app/oracle/oradata/node1/
control03.ctl
--建立靜態引數檔案(以備後用)
SQL> create pfile from spfile;
File created.
SQL> shutdown immediate;--注意,此處可是一致性關閉庫的喲。若不是,那就麻煩大了,搞不好就需要用隱含引數將資料庫不一致開啟,將資料匯出來,再重建新庫,再導資料進去。
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !
[oracle@xlong01 ~]$ cp /u01/app/oracle/oradata/node1/control01.ctl /u01/app/oracle/controlfile04.ctl
[oracle@xlong01 ~]$ exit
exit
--啟動資料庫就發生該網友反映的錯誤
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 100664912 bytes
Database Buffers 180355072 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info
進一步檢視日誌檔案:
[oracle@xlong01 bdump]$ tail alert_node1.log
starting up 1 shared server(s) ...
Sun Apr 8 22:14:39 2012
ALTER DATABASE MOUNT
Sun Apr 8 22:14:42 2012
ORA-00202: control file: '/u01/app/oracle/oradata/node1/control01.ctl, /u01/app/oracle/oradata/node1/control02.ctl,/u01/app/oracle/oradata/node1/control03.ctl,/u01/app/oracle/controlfile04.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Sun Apr 8 22:14:42 2012
ORA-205 signalled during: ALTER DATABASE MOUNT...
問題就在於當把控制檔案複用後,在關閉資料庫時,需要把相關資訊寫回至控制檔案。而此時控制檔案發生了變化,獲取不到控制檔案(此處指的是新建的那個controlfile04.ctl)的狀態,而控制檔案不同於聯機日誌檔案,其是且的關係,而非或的關係。此刻便已經損壞了控制檔案。
下面就開始復原資料庫並進行正確的控制檔案複用。
當然,首先嚐試把控制檔案修改回以前的個數:
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 100664912 bytes
Database Buffers 180355072 bytes
Redo Buffers 2973696 bytes
SQL> alter system set control_files='/u01/app/oracle/oradata/node1/control01.ctl, /u01/app/oracle/oradata/node1/control02.ctl,/u01/app/oracle/oradata/node1/control03.ctl' scope=spfile;
System altered.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 100664912 bytes
Database Buffers 180355072 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info
[oracle@xlong01 bdump]$ tail alert_node1.log
starting up 1 shared server(s) ...
Sun Apr 8 22:21:55 2012
ALTER DATABASE MOUNT
Sun Apr 8 22:21:57 2012
ORA-00202: control file: '/u01/app/oracle/oradata/node1/control01.ctl, /u01/app/oracle/oradata/node1/control02.ctl,/u01/app/oracle/oradata/node1/control03.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Sun Apr 8 22:21:57 2012
ORA-205 signalled during: ALTER DATABASE MOUNT...
此時顯然是行不通的,因為控制檔案已經出現了問題了。
那怎麼恢復呢,其實辦法有以下:
1、可以從備份恢復控制檔案。
2、可以從控制檔案的trace檔案重建控制檔案。
3、就是讀所有的alert.log檔案進行人工建立,當然這個alert.log需要從建庫開始以來的所有日誌檔案。
由於我的這個是測試環境,也沒有什麼備份檔案,所以只能悲劇的進行第三種方案了。狂汗~以後不管怎麼樣,也要備控制檔案和引數檔案!
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 100664912 bytes
Database Buffers 180355072 bytes
Redo Buffers 2973696 bytes
--把以前舊的控制檔案挪個地
[oracle@xlong01 node1]$ mv control0* ..
--檢視alert.log檔案手工重建控制檔案,如果此時你的庫執行了很久的話,那就慘了。還好,我的庫基本變化不大,咔咔~~算是幸運的吧..
--此處重建控制檔案,是因為前邊是一致性關閉庫的,資料檔案都一致,只是控制檔案出了問題而已。
SQL> CREATE CONTROLFILE set DATABASE "node1" RESETLOGS NOARCHIVELOG
2 LOGFILE
3 GROUP 1 ('/u01/app/oracle/oradata/node1/redo01.log') SIZE 50M,
4 GROUP 2 ('/u01/app/oracle/oradata/node1/redo02.log') SIZE 50M,
5 GROUP 3 ('/u01/app/oracle/oradata/node1/redo03.log') SIZE 50M,
6 DATAFILE
7 '/u01/app/oracle/oradata/node1/users01.dbf',
8 '/u01/app/oracle/oradata/node1/sysaux01.dbf',
9 '/u01/app/oracle/oradata/node1/undotbs01.dbf',
10 '/u01/app/oracle/oradata/node1/system01.dbf',
11 '/u01/app/oracle/oradata/node1/example01.dbf'
12 ;
Control file created.
--此時就不寫那麼多日誌檔案鳥,也說明了日誌檔案是或的關係,而控制檔案是且的關係了。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
對於以resetlogs開啟的資料庫建議立即進行備份,雖然10g以後的可以不用及時備份,不過還是建議立即進行備份。貌似10g以後可以繞過resetlogs後進行重新恢復,我記得我好像這樣恢復過,具體忘了..嘻嘻~改天再測下..
此刻也需要建立臨時資料檔案。
由於是測試環境,以上暫且放一邊了。
此刻趕緊備份下控制檔案再說,以免重蹈覆轍。
--備trace檔案
SQL> alter database backup controlfile to trace as '/u01/app/oracle/controlfile_bak.trc';
Database altered.
--備二進位制檔案
SQL> alter database backup controlfile to '/u01/app/oracle/controlfile_bak.ctl';
Database altered.
ok了,下面來進行正確的控制檔案複用
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/node1/
control01.ctl, /u01/app/oracle
/oradata/node1/control02.ctl,
/u01/app/oracle/oradata/node1/
control03.ctl
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/10.2.0
/db_1/dbs/spfilenode1.ora
--建立pfile檔案
SQL> create pfile='/u01/app/oracle/pfile_20120408' from memory;
create pfile='/u01/app/oracle/pfile_20120408' from memory
*
ERROR at line 1:
ORA-00922: missing or invalid option
--由於不是11g所以以上命令會出錯
SQL> create pfile='/u01/app/oracle/pfile_20120408' from spfile;
File created.
--拷貝控制檔案的副本到新地
[oracle@xlong01 node1]$ cp control01.ctl ../control04.ctl
--修改pfile檔案準備複用控制檔案
[oracle@xlong01 node1]$ vi /u01/app/oracle/pfile_20120408
--修改後如下:
*.control_files='/u01/app/oracle/oradata/node1/control01.ctl','/u01/app/oracle/oradata/node1/control02.ctl','/u01/app/oracle/oradata/node1/control03.ctl','/u01/app/oracle/oradata/control04.ctl'
--以pfile啟動資料庫
SQL> startup pfile=/u01/app/oracle/pfile_20120408;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 104859216 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
--建立spfile
SQL> create spfile from pfile;
File created.
--重啟資料庫即可
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 100664912 bytes
Database Buffers 180355072 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
後來想了想還是補上臨時檔案吧,咔咔~
--的確沒有臨時檔案
SQL> select CREATION_TIME,STATUS,NAME from v$tempfile;
no rows selected
--檢視臨時表空間名
SQL> select NAME from v$tablespace;
NAME
------------------------------
USERS
SYSAUX
UNDOTBS1
SYSTEM
EXAMPLE
TEMP
6 rows selected.
--增加臨時檔案
SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/node1/temp01.dbf' size 5m reuse;
Tablespace altered.
SQL> select CREATION_TIME,STATUS,NAME,CREATION_TIME from v$tempfile;
CREATION_ STATUS
--------- -------
NAME
--------------------------------------------------------------------------------
CREATION_
---------
08-APR-12 ONLINE
/u01/app/oracle/oradata/node1/temp01.dbf
08-APR-12
至此,已經ok了..咔咔~~碎覺去鳥,希望能幫到那位網友解決他的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26143577/viewspace-720679/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle重建控制檔案Oracle
- oracle 重建控制檔案Oracle
- Oracle 控制檔案的重建Oracle
- ORACLE控制檔案的重建 (轉)Oracle
- 重建Oracle資料庫控制檔案Oracle資料庫
- 用重建控制檔案的方法修改oracle資料檔案路徑Oracle
- 重建控制檔案
- 重建控制檔案--
- DataGuard重建控制檔案
- oracle之 利用 controlfile trace檔案重建控制檔案Oracle
- 【RAC】Oracle 10g RAC 重建控制檔案Oracle 10g
- ORA-00205,控制檔案問題
- 詳述Oracle 多路複用的控制檔案——增加一個控制檔案副本Oracle
- 利用trace重建控制檔案
- Oracle 11g重建控制檔案——如何獲取建立控制檔案指令碼Oracle指令碼
- oracle10g_備份控制檔案_得到重建控制檔案的指令碼Oracle指令碼
- Oracle 11g重建控制檔案——控制檔案全部丟失,從零開始Oracle
- 如何重建RAC的控制檔案
- RAC環境重建控制檔案
- 控制檔案重建以及備份
- oracle快速拿到重建控制檔案語句的方法二Oracle
- Oracle 9+ Data Gard環境中重建控制檔案Oracle
- oracle控制檔案複製、移動方式Oracle
- oracle之 RAC 11G ASM下控制檔案多路複用OracleASM
- 備份與恢復--重建控制檔案
- 重建控制檔案的恢復(noresetlogs)
- 重建控制檔案 recreate control file
- 控制檔案損壞重建實驗(上)
- 控制檔案損壞重建實驗(下)
- 重建控制檔案後某些檔案被命名為MISSINGnnnnnGNN
- 請教關於利用跟蹤檔案重建控制檔案
- sql 重建控制檔案resetlogs和noresetlogsSQL
- 【Oracle日誌】- 日誌檔案重建Oracle
- 【技術分享】Oracle控制檔案的備份、恢復以及多路複用Oracle
- 控制檔案丟失恢復例項(3) - 使用重建控制檔案方式(noresetlogs)
- Oracle 控制檔案Oracle
- 重建控制檔案--alter database backup controlfile to traceDatabase
- 重建控制檔案後將備份資訊註冊