您好,登錄后才能下訂單哦!
這里上傳圖片一直失敗,想要查看詳細信息和截圖的可以下載附件
首先看一下控制文件的理解:
控制文件是一個二進制文件,用于記錄數據庫的物理結構。一個控制文件只屬于一個數據庫。創建數據庫時,創建控制文件。當數據庫的物理結構改變的時候,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這個也恢復成功了。
總結:
兩種恢復方式基本一樣,只有在啟動數據庫的時候有差別,可以根據數據庫當時情況具體操作。
但是一般情況下不可能出現控制文件丟失。而且控制文件最少要備份兩份以上放在不同的位置。
如有不足或缺漏請一起討論,共同進步
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。