天天看點

控制檔案丢失恢複

控制檔案丢失,分兩種情況:

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