控制檔案丢失,分兩種情況:
1. 有備份,但要保證該備份是最後一次resetlogs之後的備份。
恢複步驟如下:
SQL> shutdown immediate
拷貝備份檔案到相應目錄。(如果控制檔案所在的磁盤不能通路,修改初始化檔案,更新控制檔案路經)
SQL> STARTUP NOMOUNT
ORACLE 例程已經啟動。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 對于線程 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1
_23_%U_.ARC
ORA-00280: 更改 439723 (用于線程 1) 在序列 #23 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG
ORA-00328: 歸檔日志在更改 432393 結束, 需要稍後的更改 439723
ORA-00334: 歸檔日志: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出現如下錯誤
ORA-01152: 檔案 1 沒有從過舊的備份中恢複
ORA-01110: 資料檔案 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
已應用的日志。
完成媒體恢複。
這裡最後輸入的是線上日志未歸檔日志的的路經.
可以通過
SQL> select * from v$log
2 /
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ----------- ---------------- --------------
1 1 22 52428800 1 YES INACTIVE 432394 24-3月 -10
3 1 21 52428800 1 YES INACTIVE 423957 24-3月 -10
2 1 23 52428800 1 NO CURRENT 439627 24-3月 -10
第二個未歸檔
SQL> select * from v$logfile
GROUP# STATUS TYPE MEMBER
--------------------------------------
1 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG
2 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
3 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG
路經為:ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
SQL> alter database open
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要打開資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open noresetlogs
alter database open noresetlogs
ORA-01588: 要打開資料庫則必須使用 RESETLOGS 選項
SQL> alter database open resetlogs
資料庫已更改。
即完成恢複.
2. 無備份
這種情況需要重建控制檔案,一般通過
alter database backup controlfile to trace指令即可。(控制檔案都丢失了,怎麼執行這個指令,解決方法:
找個ORACLE執行個體運作産生腳本,修改下就成)。腳本大體如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
CHARACTER SET ZHS16GBK;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\TEMP01.DBF'
SIZE 20971520 REUSE AUTOEXTEND OFF;
這裡是NORESETLOGS,因為線上日志是完好的。
恢複步驟如下:
SQL> shutdown immediate
ORA-01109: ??????
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP NOMOUNT
ORACLE 例程已經啟動。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制檔案已建立。
SQL> RECOVER DATABASE
ORA-00283: ??????????
ORA-00264: ?????
SQL> ALTER SYSTEM ARCHIVE LOG ALL
ALTER SYSTEM ARCHIVE LOG ALL
ORA-00271: ?????????
SQL> ALTER DATABASE OPEN;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\
TEMP01.DBF' REUSE;
表空間已更改。
SQL> select * from test
ID NAME
---------- -------------
1 afda
完成恢複.
本文轉自 anranran 51CTO部落格,原文連結:http://blog.51cto.com/guojuanjun/287826