ORACLE之重建控制文件

這裏上傳圖片一直失敗,想要查看詳細信息和截圖的可以下載附件


首先看一下控制文件的理解:

控制文件是一個二進制文件,用於記錄數據庫的物理結構。一個控制文件只屬於一個數據庫。創建數據庫時,創建控制文件。當數據庫的物理結構改變的時候,Oracle會更新控制文件,不能手動修改內容。


控制文件內容有:數據庫名、數據庫創建的時間戳、數據文件的名字和位置、redo log (聯機重做日誌文件)的名字和位置、表空間信息、當前日誌的序列號、checkpoint 信息、最新的 RMAN備份信息、歸檔日誌信息

當這些信息更改或者變動時,oracle數據庫會自動把最新信息更新到controlfile文件裏面。

啓動數據庫時,Oracle從初始化參數文件(pfile/spfile)中獲得控制文件的名字及位置,打開控制文件,然後從控制文件中讀取數據文件和聯機日誌文件的信息,最後打開數據庫。數據庫運行時,Oracle會修改控制文件,所以,一旦控制文件損壞,數據庫將不能正常運行。


創建控制文件有幾個前提和幾個區別:

前提:

1.如果是RAC下,則需要關閉羣集:

alter system set cluster_database=FALSE scope=spfile sid='*';

否則恢復的時候會報錯;

2.數據庫在mount或者OPEN狀態下,才能夠重建。

區別:

重建控制文件有兩種1.resetlogs恢復和noresetlogs恢復方式

下面還是着手恢復步驟:


重建控制文件,

備份方式

Sql>alter  database backup  controlfile to trace  as ‘/u01/controlfile.trcd’;

創建controlfile備份文件到本地

alter database backup controlfile to  '+UNDO/ORCL/control';

這個是備份控制文件到ASM管理存儲裏面

如果不知道當前控制文件在哪裏

查看位置:select * from v$controlfile;


首先,庫能夠進入mount狀態或者處於OPEN狀態:

SQL>startup mount;   或者直接open狀態

SQL> alter database backup controlfile to trace as '/u01/controlfile.trc';

進入/u01/下面

然後編輯這個控制文件

裏面包含兩部分恢復腳本

一個就是使用norestlogs和另外一個是使用resetlogs恢復的腳本:

內容就不詳細全部列出來了:

標識Set #1.NORESETLOGS  case的是使用noresetlogs恢復的

標識Set #1.RESETLOGS  case的是使用resetlogs恢復的

內容如下:

第一個是noresetlogs恢復的腳本

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453'  SIZE 50M BLOCKSIZE 512,

  GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

 '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

下面這就是一個resetlog恢復的腳本:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

  '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

;

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE ADD LOGFILE THREAD 2

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453' SIZE 50M BLOCKSIZE 512 REUSE,

  GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512 REUSE;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


好了,下面開始停庫恢復:

啓動到nomount狀態下:

Startup  nomount

直接在nomount狀態下複製粘貼下面這段腳本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453'  SIZE 50M BLOCKSIZE 512,

  GROUP 4 '+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

 '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

現在控制文件創建好了;如果有報錯,查看是不是RAC狀態下沒有關閉集羣

查看當前狀態:已經到了MOUNTED狀態下了

執行後面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

在後面的

RECOVERY DATABASE就不用執行了,因爲已經有數據文件了。

這裏僅僅只是控制文件沒有而已

直接ALTER DATABASE OPEN;

成功啓動數據庫

最後執行以下TEM表空間

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


resetlogs方式重建controlfile

數據文件在,但是日誌文件沒有是可以用這個方式回覆

啓動到nomount狀態下:

Startup  nomount

直接在nomount狀態下複製粘貼下面這段腳本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

  '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

查看當前狀態:已經到了MOUNTED狀態下了

執行後面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

這裏因爲是用resetlogs恢復的所以啓動數據庫的時候也要resetlogs

ALTER DATABASE OPEN resetlogs;

成功啓動數據庫

最後執行以下TEM表空間

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Ok這個也恢復成功了。


總結:

兩種恢復方式基本一樣,只有在啓動數據庫的時候有差別,可以根據數據庫當時情況具體操作。

但是一般情況下不可能出現控制文件丟失。而且控制文件最少要備份兩份以上放在不同的位置。



                                                                                          如有不足或缺漏請一起討論,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章