Oracle 11g重建控制檔案——控制檔案全部丟失,從零開始
控制檔案(control file)是一個相當小的檔案(最多能增長到64M左右),其中包含Oracle需要的其他檔案的一個目錄。引數檔案告知例項控制檔案的位置,控制檔案則告知示例資料庫和線上重做日誌檔案的位置。控制檔案還告知了Oracle其他一些事情,如已發生檢查點的有關資訊、資料庫名(必須和db_name引數匹配)、建立資料庫的時間戳、歸檔重做日誌的歷史(有時這會讓控制檔案變大)、RMAN資訊等。
控制檔案應該透過硬體(RAID)多路儲存,如果不支援映象,則要透過Oracle多路儲存。應該有不止一個副本,而且它們應該儲存在不同的磁碟上,以防止萬一出現磁碟故障而丟失控制檔案。丟失控制檔案並不是致命的,但是會使恢復變得困難很多。
如果丟失了所有的控制檔案並且沒有任何的備份,我們可以透過重建控制檔案來開啟資料庫。其中,重建控制檔案至少需要以下資訊:
1.資料庫名
2.字符集
3.資料檔名稱
4.初始化引數,包括MAXLOGFILES、MAXLOGMEMBERS、MAXDATAFILES、MAXINSTANCES、MAXLOGHISTORY等;
開啟引數檔案,檢視db_name引數值,即為資料庫名稱。
修改指令碼並重新執行,重建控制檔案後,資料庫會開啟到mount狀態。
控制檔案應該透過硬體(RAID)多路儲存,如果不支援映象,則要透過Oracle多路儲存。應該有不止一個副本,而且它們應該儲存在不同的磁碟上,以防止萬一出現磁碟故障而丟失控制檔案。丟失控制檔案並不是致命的,但是會使恢復變得困難很多。
如果丟失了所有的控制檔案並且沒有任何的備份,我們可以透過重建控制檔案來開啟資料庫。其中,重建控制檔案至少需要以下資訊:
1.資料庫名
2.字符集
3.資料檔名稱
4.初始化引數,包括MAXLOGFILES、MAXLOGMEMBERS、MAXDATAFILES、MAXINSTANCES、MAXLOGHISTORY等;
1.環境準備
資料庫版本
我們在Oracle11g中進行測試。點選(此處)摺疊或開啟
-
SQL>
-
SQL> select * from v$version;
-
-
BANNER
-
--------------------------------------------------------------------------------
-
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
-
PL/SQL Release 11.2.0.3.0 - Production
-
CORE 11.2.0.3.0 Production
-
TNS for Linux: Version 11.2.0.3.0 - Production
-
NLSRTL Version 11.2.0.3.0 - Production
-
- SQL>
刪除控制檔案
1.透過查詢control_files初始化引數,獲取控制檔案路徑;
2.然後,使用rm命令刪除控制檔案;
3.此時,強制關閉資料庫,然後重啟資料庫,報ORA-00205錯誤。需要注意的是,此時執行shutdown immediate命令,資料庫無法正常關閉,只能關閉到mounted狀態;需要使用shutdown abort命令強制關閉資料庫。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> show parameter control_files
-
-
NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
-
control_files string /u01/app/oracle/oradata/HOEGH/
-
control01.ctl, /u01/app/oracle
-
/oradata/HOEGH/control02.ctl
- SQL>
2.然後,使用rm命令刪除控制檔案;
點選(此處)摺疊或開啟
-
[oracle@HOEGH ~]$ rm /u01/app/oracle/oradata/HOEGH/control01.ctl
-
[oracle@HOEGH ~]$ rm /u01/app/oracle/oradata/HOEGH/control02.ctl
- [oracle@HOEGH ~]$
點選(此處)摺疊或開啟
-
SQL>
-
SQL> shutdown immediate
-
Database closed.
-
ORA-00210: cannot open the specified control file
-
ORA-00202: control file: \'/u01/app/oracle/oradata/HOEGH/control01.ctl\'
-
ORA-27041: unable to open file
-
Linux Error: 2: No such file or directory
-
Additional information: 3
-
-
-
SQL> select status from v$instance;
-
-
STATUS
-
------------
-
MOUNTED
-
-
SQL>
-
SQL> shutdown abort
-
ORACLE instance shut down.
-
SQL>
-
-
-
-
SQL>
-
SQL> startup
-
ORACLE instance started.
-
-
Total System Global Area 941600768 bytes
-
Fixed Size 1348860 bytes
-
Variable Size 515902212 bytes
-
Database Buffers 419430400 bytes
-
Redo Buffers 4919296 bytes
-
ORA-00205: error in identifying control file, check alert log for more info
-
-
- SQL>
2.獲取資料庫名
首先生成文字格式的引數檔案;點選(此處)摺疊或開啟
-
SQL>
-
SQL> create pfile from spfile;
-
-
File created.
-
- SQL>
點選(此處)摺疊或開啟
-
[oracle@hoegh dbs]$ cat initHOEGH.ora
-
HOEGH.__db_cache_size=419430400
-
HOEGH.__java_pool_size=4194304
-
HOEGH.__large_pool_size=4194304
-
HOEGH.__oracle_base=\'/u01/app/oracle\'#ORACLE_BASE set from environment
-
HOEGH.__pga_aggregate_target=377487360
-
HOEGH.__sga_target=566231040
-
HOEGH.__shared_io_pool_size=0
-
HOEGH.__shared_pool_size=130023424
-
HOEGH.__streams_pool_size=0
-
*.audit_file_dest=\'/u01/app/oracle/admin/HOEGH/adump\'
-
*.audit_trail=\'db\'
-
*.compatible=\'11.2.0.0.0\'
-
*.control_files=\'/u01/app/oracle/oradata/HOEGH/control01.ctl\',\'/u01/app/oracle/oradata/HOEGH/control02.ctl\'
-
*.db_block_size=8192
-
*.db_domain=\'\'
-
*.db_name=\'HOEGH\'
-
*.diagnostic_dest=\'/u01/app/oracle\'
-
*.dispatchers=\'(PROTOCOL=TCP) (SERVICE=HOEGHXDB)\'
-
*.memory_max_target=943718400
-
*.memory_target=943718400
-
*.open_cursors=300
-
*.processes=150
-
*.remote_login_passwordfile=\'EXCLUSIVE\'
-
*.undo_tablespace=\'UNDOTBS1\'
- [oracle@hoegh dbs]$
3.啟動到nomount狀態,獲取字符集
由於需要執行查詢語句select userenv('language') from dual;來獲取字符集,因此需要將資料庫啟動到nomount狀態。點選(此處)摺疊或開啟
-
SQL>
-
SQL> startup nomount
-
ORACLE instance started.
-
-
Total System Global Area 941600768 bytes
-
Fixed Size 1348860 bytes
-
Variable Size 515902212 bytes
-
Database Buffers 419430400 bytes
-
Redo Buffers 4919296 bytes
-
SQL>
-
SQL> select userenv(\'language\') from dual;
-
-
USERENV(\'LANGUAGE\')
-
----------------------------------------------------
-
AMERICAN_AMERICA.US7ASCII
-
-
SQL>
- SQL>
4.獲取資料檔名稱
透過ls命令獲取資料檔案列表。
點選(此處)摺疊或開啟
-
[oracle@hoegh HOEGH]$ ls -lh
-
total 1.8G
-
-rw-r----- 1 oracle oinstall 314M May 30 11:07 example01.dbf
-
-rw-r----- 1 oracle oinstall 51M May 30 11:07 redo01.log
-
-rw-r----- 1 oracle oinstall 51M May 30 11:07 redo02.log
-
-rw-r----- 1 oracle oinstall 51M May 30 11:07 redo03.log
-
-rw-r----- 1 oracle oinstall 541M May 30 11:07 sysaux01.dbf
-
-rw-r----- 1 oracle oinstall 721M May 30 11:07 system01.dbf
-
-rw-r----- 1 oracle oinstall 30M Oct 13 2014 temp01.dbf
-
-rw-r----- 1 oracle oinstall 96M May 30 11:07 undotbs01.dbf
-
-rw-r----- 1 oracle oinstall 5.1M May 30 11:07 users01.dbf
- [oracle@hoegh HOEGH]$
5.生成建立控制檔案指令碼
這樣,建立控制檔案所需的基本資訊都已經有了,我們來生成建立控制檔案指令碼。點選(此處)摺疊或開啟
-
STARTUP NOMOUNT
-
CREATE CONTROLFILE REUSE DATABASE \"HOEGH\" NORESETLOGS ARCHIVELOG
-
MAXLOGFILES 5
-
MAXLOGMEMBERS 3
-
MAXDATAFILES 100
-
MAXINSTANCES 1
-
MAXLOGHISTORY 226
-
LOGFILE
-
GROUP 1 \'/u01/app/oracle/oradata/HOEGH/redo01.log\' SIZE 50M,
-
GROUP 2 \'/u01/app/oracle/oradata/HOEGH/redo02.log\' SIZE 50M,
-
GROUP 3 \'/u01/app/oracle/oradata/HOEGH/redo03.log\' SIZE 50M
-
DATAFILE
-
\'/u01/app/oracle/oradata/HOEGH/system01.dbf\',
-
\'/u01/app/oracle/oradata/HOEGH/sysaux01.dbf\',
-
\'/u01/app/oracle/oradata/HOEGH/undotbs01.dbf\',
-
\'/u01/app/oracle/oradata/HOEGH/users01.dbf\',
-
\'/u01/app/oracle/oradata/HOEGH/example01.dbf\',
-
\'/u01/app/oracle/oradata/HOEGH/temp01.dbf\'
-
CHARACTER SET US7ASCII
- ;
6.重建控制檔案
需要注意的是,在執行上述建立指令碼時會報錯,系統提示臨時檔案不屬於資料檔案,如下所示:點選(此處)摺疊或開啟
-
SQL> @/u01/app/oracle/oradata/HOEGH/CreateControlFile.sql
-
ORA-01081: cannot start already-running ORACLE - shut it down first
-
CREATE CONTROLFILE REUSE DATABASE \"HOEGH\" NORESETLOGS ARCHIVELOG
-
*
-
ERROR at line 1:
-
ORA-01503: CREATE CONTROLFILE failed
-
ORA-01160: file is not a data file
-
ORA-01110: data file : \'/u01/app/oracle/oradata/HOEGH/temp01.dbf\'
-
-
- SQL>
修改指令碼並重新執行,重建控制檔案後,資料庫會開啟到mount狀態。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> @/u01/app/oracle/oradata/HOEGH/CreateControlFile.sql
-
ORACLE instance started.
-
-
Total System Global Area 941600768 bytes
-
Fixed Size 1348860 bytes
-
Variable Size 515902212 bytes
-
Database Buffers 419430400 bytes
-
Redo Buffers 4919296 bytes
-
-
Control file created.
-
-
SQL>
-
SQL> select status from v$instance;
-
-
STATUS
-
------------
-
MOUNTED
-
- SQL>
7.開啟資料庫
在開啟資料庫時,會報錯,提示system01資料檔案需要執行介質恢復,我們執行recover database即可。點選(此處)摺疊或開啟
-
SQL>
-
SQL> alater database open;
-
SP2-0734: unknown command beginning \"alater dat...\" - rest of line ignored.
-
SQL>
-
SQL> alter database open;
-
alter database open
-
*
-
ERROR at line 1:
-
ORA-01113: file 1 needs media recovery
-
ORA-01110: data file 1: \'/u01/app/oracle/oradata/HOEGH/system01.dbf\'
-
-
-
SQL>
-
SQL> recover database;
-
Media recovery complete.
-
SQL>
-
SQL> alter database open;
-
-
Database altered.
-
-
SQL>
-
SQL> select * from v$version;
-
-
BANNER
-
--------------------------------------------------------------------------------
-
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
-
PL/SQL Release 11.2.0.3.0 - Production
-
CORE 11.2.0.3.0 Production
-
TNS for Linux: Version 11.2.0.3.0 - Production
-
NLSRTL Version 11.2.0.3.0 - Production
-
- SQL>
-
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
6 rows selected.
SQL>
-
8.總結
下面總結一下重建控制檔案的步驟:
1.獲取資料庫名;
2.獲取字符集名;
3.獲取資料檔名;
4.重建控制檔案;
5.執行介質恢復;
6.開啟資料庫。
1.獲取資料庫名;
2.獲取字符集名;
3.獲取資料檔名;
4.重建控制檔案;
5.執行介質恢復;
6.開啟資料庫。
hoegh
15.05.30
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2132948/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 控制檔案全部丟失恢復
- 控制檔案全部丟失的恢復
- 開啟 控制檔案自動備份下,引數檔案、控制檔案全部丟失恢復
- 當前控制檔案全部丟失恢復
- 恢復之丟失全部控制檔案以及備份中的控制檔案
- 控制檔案丟失恢復例項(3) - 使用重建控制檔案方式(noresetlogs)
- Oracle重建控制檔案Oracle
- oracle 重建控制檔案Oracle
- Oracle 11g重建控制檔案——如何獲取建立控制檔案指令碼Oracle指令碼
- 全部控制檔案丟失後的完全恢復(轉)
- 丟失全部控制檔案後從RMAN備份集中恢復示例
- Oracle 控制檔案的重建Oracle
- 控制檔案丟失恢復
- 【控制檔案丟失恢復】
- 重建控制檔案
- 重建控制檔案--
- 恢復案例:無歸檔,丟失全部控制檔案、日誌檔案恢復案例
- ORACLE控制檔案的重建 (轉)Oracle
- 恢復案例:無歸檔,掉電,控制檔案全部丟失恢復
- 控制檔案丟失恢復(二)
- 恢復丟失的控制檔案
- 控制檔案丟失處理方法
- DataGuard重建控制檔案
- 重建Oracle資料庫控制檔案Oracle資料庫
- 控制檔案部分丟失的恢復
- 控制檔案丟失的RMAN恢復
- oracle 案例-控制檔案丟失故障處理過程Oracle
- 利用trace重建控制檔案
- oracle之 利用 controlfile trace檔案重建控制檔案Oracle
- 引數檔案控制檔案和資料檔案丟失的恢復
- oracle10g_備份控制檔案_得到重建控制檔案的指令碼Oracle指令碼
- ORA-25153: Temporary Tablespace is Empty 重建控制檔案導致丟失tempfile
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- 控制檔案全部丟失,無備份,通過異機trace恢復
- 探索ORACLE之RMAN_07 控制檔案丟失恢復Oracle
- 恢復測試:擁有當時的全部歸檔,控制檔案,恢復丟失的資料檔案。
- oracle 11g 新增控制檔案Oracle
- 如何重建RAC的控制檔案