備份與恢復--重建控制檔案

jolly10發表於2009-01-14

恢復辦法適用於:
控制檔案全部丟失且沒有備份

前提條件:
資料庫如果是乾淨的關閉的,就可以用noresetlogs方式開啟資料庫,否則用resetlogs開啟。

方法:
如果在最後一次資料庫結構修改後使用了ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令備份了建立控制檔案的指令碼,則可以直接用TRACE檔案中的指令碼進行控制檔案的重建。

如果使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令之後又進行了資料庫結構的修改,則需要手工編輯TRACE檔案中的指令碼,來反映出資料庫最後的修改。

如果是使用的ALTER DATABASE BACKUP CONTROLFILE TO FILENAME方式進行的備份(這種情況其實應該算作有備份的情況,不過如果利用備份進行恢復需要使用RESETLOGS方式開啟資料庫),則可以利用備份的控制檔案首先將資料庫STARTUP MOUNT,然後再利用ALTER DATABASE BACKUP

CONTROLFILE TO TRACE NORESETLOGS命令備份建立控制檔案的指令碼,最後將備份控制檔案後所有資料庫結構的修改,反映到控制檔案的指令碼上。

如果控制檔案沒有任何方式的備份,那麼只能透過手工方式編寫CREATE CONTROLFILE語句,這時候需要了解所有資料檔案和聯機重做日誌檔案的位置和大小。

[@more@]

SQL> alter database backup controlfile to trace;

Database altered.

SQL> select spid from v$process
2 where addr=
3 (select paddr from v$session
4 where sid=(select sid from v$mystat where rownum=1)
5 );

SPID
------------
23724


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> host mv /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control01.bak

SQL> host mv /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control02.bak

SQL> host mv /u01/app/oracle/oradata/orcl/control03.ctl /u01/app/oracle/oradata/orcl/control03.bak
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 335544320 bytes
Fixed Size 1219280 bytes
Variable Size 134219056 bytes
Database Buffers 197132288 bytes
Redo Buffers 2973696 bytes


SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M,
9 GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M,
10 GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/u01/app/oracle/oradata/orcl/system01.dbf',
14 '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
15 '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
16 '/u01/app/oracle/oradata/orcl/users01.dbf',
17 '/u01/app/oracle/oradata/orcl/example01.dbf',
18 '/u01/app/oracle/oradata/orcl/jglu01.dbf',
19 '/u01/app/oracle/oradata/orcl/jglu02.dbf',
20 '/u01/app/oracle/oradata/orcl/test02.dbf'
21 CHARACTER SET WE8ISO8859P1
22 ;

Control file created.

SQL> RECOVER DATABASE
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required


SQL> ALTER SYSTEM ARCHIVE LOG ALL;

System altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

Tablespace altered.

按照trace出來的資訊一步步做就行了。

上面RECOVER DATABASE步驟的錯誤描述資訊是資料庫不需要恢復。因此,直接忽略這個錯誤。

需要注意的是,這個方法適用於聯機重做日誌存在情況下的恢復。

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

相關文章