恢復案例三恢復控制文件
全部控制文件丟失需要從備份的控制文件恢復恢復了控制文件後必須要進行RECOVER恢復然後用RESETLOGS參數打開數據庫我們也可以把控制文件恢復到其他位置(不是在參數文件中給出的控制文件位置)本例假定沒有使用恢復目錄我們將在以後介紹帶有恢復目的RMAN備份如何恢復控制文件如果沒有恢復目錄用RMAN只能在NOMOUNT狀態從備份中進行控制文件的恢復
從自動備份控制文件恢復
RMAN> configure controlfile autobackup on;
舊的 RMAN 配置參數
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
新的 RMAN 配置參數
CONFIGURE CONTROLFILE AUTOBACKUP ON;
已成功存儲新的 RMAN 配置參數
RMAN> show all;
RMAN 配置參數為
CONFIGURE RETENTION POLICY TO REDUNDANCY ; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO %F; # default
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM ;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO ; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO ; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM AES; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO D:\ORACLE\PRODUCT\\DB_\DATABASE
\SNCFROMEORA; # default
RMAN> backup database;
啟動 backup 於 月
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
通道 ORA_DISK_: 啟動全部數據文件備份集
通道 ORA_DISK_: 正在指定備份集中的數據文件
輸入數據文件 fno= name=F:\ORACLE\ORADATA\ROME\UNDOTBSDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSTEMDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSAUXDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\USERSDBF
輸入數據文件 fno= name=E:\ORACLE\ORADATA\ROME\TESTDBF
通道 ORA_DISK_: 正在啟動段 於 月
通道 ORA_DISK_: 已完成段 於 月
段句柄=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NNNDF_TAGT_VFDHGYR_BKP 標記=TAGT 注釋=NONE
通道 ORA_DISK_: 備份集已完成 經過時間:::
完成 backup 於 月
啟動 Control File and SPFILE Autobackup 於 月 段
handle=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\AUTOBACKUP\_
_\O_MF_S__VFDJV_BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 月
SQL> shutdown immediate
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
刪除所有的控制文件
SQL> startup
ORACLE 例程已經啟動
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
ORA: ????????? ?????? ???????
SQL> shutdown immediate
ORA: ??????
ORACLE 例程已經關閉
SQL> startup nomount
ORACLE 例程已經啟動
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
RMAN> SET DBID ;
正在執行命令: SET DBID
RMAN> restore controlfile from autobackup;
啟動 restore 於 月
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
恢復區域目標: d:\oracle\product\\flash_recovery_area
用於搜索的數據庫名 (或數據庫的唯一名稱): ROME
通道 ORA_DISK_: 在恢復區域中找到自動備份
通道 ORA_DISK_: 已找到的自動備份:
D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\
ROME\AUTOBACKUP\__\O_MF_S__VFDJV_BKP
通道 ORA_DISK_: 從自動備份復原控制文件已完成
輸出文件名=D:\ORACLE\PRODUCT\\ORADATA\ROME\CONTROLCTL
輸出文件名=F:\ORACLE\ORADATA\ROME\CONTROLCTL
輸出文件名=E:\ORACLE\ORADATA\ROME\CONTROLCTL
完成 restore 於 月
RMAN> sql alter database mount;
sql 語句: alter database mount
釋放的通道: ORA_DISK_
RMAN> recover database;
啟動 recover 於 月
啟動 implicit crosscheck backup 於 月
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
已交叉檢驗的 對象
完成 implicit crosscheck backup 於 月
啟動 implicit crosscheck copy 於 月
使用通道 ORA_DISK_
已交叉檢驗的 對象
完成 implicit crosscheck copy 於 月
搜索恢復區域中的所有文件
正在編制文件目錄
目錄編制完畢
已列入目錄的文件的列表
=======================
文件名: D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\AUTOBACKUP\__
\O_MF_S__VFYTY_BKP
使用通道 ORA_DISK_
正在開始介質的恢復
存檔日志線程 序列 已作為文件 D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOAL
OG 存在於磁盤上
存檔日志文件名 =D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOALOG 線程 = 序列 =
介質恢復完成 用時: ::
完成 recover 於 月
RMAN> sql alter database open resetlogs;
sql 語句: alter database open resetlogs
從包含控制文件的全庫備份恢復
RMAN> configure controlfile autobackup off;
舊的 RMAN 配置參數:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
新的 RMAN 配置參數:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
已成功存儲新的 RMAN 配置參數
RMAN> backup database;
啟動 backup 於 月
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
通道 ORA_DISK_: 啟動全部數據文件備份集
通道 ORA_DISK_: 正在指定備份集中的數據文件
輸入數據文件 fno= name=F:\ORACLE\ORADATA\ROME\UNDOTBSDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSTEMDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSAUXDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\USERSDBF
輸入數據文件 fno= name=E:\ORACLE\ORADATA\ROME\TESTDBF
通道 ORA_DISK_: 正在啟動段 於 月
通道 ORA_DISK_: 已完成段 於 月
段句柄=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NNNDF_TAGT_VGP_BKP 標記=TAGT 注釋=NONE
通道 ORA_DISK_: 備份集已完成 經過時間:::
通道 ORA_DISK_: 啟動全部數據文件備份集
通道 ORA_DISK_: 正在指定備份集中的數據文件
備份集中包括當前控制文件
在備份集中包含當前的 SPFILE
通道 ORA_DISK_: 正在啟動段 於 月
通道 ORA_DISK_: 已完成段 於 月
段句柄=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NCSNF_TAGT_VGPZC_BKP 標記=TAGT 注釋=NONE
通道 ORA_DISK_: 備份集已完成 經過時間:::
完成 backup 於 月
SQL> shutdown immediate
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
刪除所有控制文件
SQL> startup nomount
ORACLE 例程已經啟動
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
C:\Documents and Settings\Administrator>rman target /
恢復管理器: Release Production on 星期三 月 ::
Copyright (c) Oracle All rights reserved
連接到目標數據庫: rome (未裝載)
RMAN> RESTORE CONTROLFILE FROM D:\oracle\product\\flash_recovery_area\
ROME\BACKUPSET\__\O_MF_NCSNF_TAGT_VGPZC_BKP;
啟動 restore 於 月
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
通道 ORA_DISK_: 正在復原控制文件
通道 ORA_DISK_: 恢復完成 用時: ::
輸出文件名=D:\ORACLE\PRODUCT\\ORADATA\ROME\CONTROLCTL
輸出文件名=F:\ORACLE\ORADATA\ROME\CONTROLCTL
輸出文件名=E:\ORACLE\ORADATA\ROME\CONTROLCTL
完成 restore 於 月
RMAN> sql alter database mount;
sql 語句: alter database mount
釋放的通道: ORA_DISK_
RMAN> recover database;
啟動 recover 於 月
啟動 implicit crosscheck backup 於 月
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
已交叉檢驗的 對象
完成 implicit crosscheck backup 於 月
啟動 implicit crosscheck copy 於 月
使用通道 ORA_DISK_
已交叉檢驗的 對象
完成 implicit crosscheck copy 於 月
搜索恢復區域中的所有文件
正在編制文件目錄
目錄編制完畢
已列入目錄的文件的列表
=======================
文件名: D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NCSNF_TAGT_VGPZC_BKP
使用通道 ORA_DISK_
正在開始介質的恢復
存檔日志線程 序列 已作為文件 D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOAL
OG 存在於磁盤上
存檔日志文件名 =D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOALOG 線程 = 序列 =
介質恢復完成 用時: ::
完成 recover 於 月
RMAN> sql alter database open resetlogs;
sql 語句: alter database open resetlogs
我們可以利用dbms_backup_restore包來恢復控制文件
RMAN> backup database;
啟動 backup 於 月
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
通道 ORA_DISK_: 啟動全部數據文件備份集
通道 ORA_DISK_: 正在指定備份集中的數據文件
輸入數據文件 fno= name=F:\ORACLE\ORADATA\ROME\UNDOTBSDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSTEMDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSAUXDBF
輸入數據文件 fno= name=D:\ORACLE\PRODUCT\\ORADATA\ROME\USERSDBF
輸入數據文件 fno= name=E:\ORACLE\ORADATA\ROME\TESTDBF
通道 ORA_DISK_: 正在啟動段 於 月
通道 ORA_DISK_: 已完成段 於 月
段句柄=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NNNDF_TAGT_VFPWCXS_BKP 標記=TAGT 注釋=NONE
通道 ORA_DISK_: 備份集已完成 經過時間:::
通道 ORA_DISK_: 啟動全部數據文件備份集
通道 ORA_DISK_: 正在指定備份集中的數據文件
備份集中包括當前控制文件
在備份集中包含當前的 SPFILE
通道 ORA_DISK_: 正在啟動段 於 月
通道 ORA_DISK_: 已完成段 於 月
段句柄=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NCSNF_TAGT_VFPXG_BKP 標記=TAGT 注釋=NONE
通道 ORA_DISK_: 備份集已完成 經過時間:::
完成 backup 於 月
SQL> shutdown immediate
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
刪除所有控制文件
SQL> startup nomount
ORACLE 例程已經啟動
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
SQL> DECLARE
devtype varchar();
done boolean;
BEGIN
devtype:=sysdbms_backup_restoredeviceAllocate(type=>ident=>);
sysdbms_backup_restorerestoreSetDatafile;
sysdbms_backup_restorerestoreControlfileTo(cfname=>D:\oracle\product
\\oradata\rome\Controlctl);
sysdbms_backup_restorerestoreBackupPiece(done=>donehandle=>D:\oracle
\product\\flash_recovery_area\ROME\BACKUPSET\__\O_MF_NCSNF_
TAGT_VFPXG_BKP params=>null);
sysdbms_backup_restoredeviceDeallocate;
exception when others then
dbms_outputput_line(sqlerrm);
END;
/
PL/SQL 過程已成功完成
RMAN> restore database;
啟動 restore 於 月
啟動 implicit crosscheck backup 於 月
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_
通道 ORA_DISK_: sid= devtype=DISK
已交叉檢驗的 對象
完成 implicit crosscheck backup 於 月
啟動 implicit crosscheck copy 於 月
使用通道 ORA_DISK_
已交叉檢驗的 對象
完成 implicit crosscheck copy 於 月
搜索恢復區域中的所有文件
正在編制文件目錄
目錄編制完畢
已列入目錄的文件的列表
=======================
文件名: D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NCSNF_TAGT_VFPXG_BKP
使用通道 ORA_DISK_
通道 ORA_DISK_: 正在開始恢復數據文件備份集
通道 ORA_DISK_: 正在指定從備份集恢復的數據文件
正將數據文件恢復到D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSTEMDBF
正將數據文件恢復到F:\ORACLE\ORADATA\ROME\UNDOTBSDBF
正將數據文件恢復到D:\ORACLE\PRODUCT\\ORADATA\ROME\SYSAUXDBF
正將數據文件恢復到D:\ORACLE\PRODUCT\\ORADATA\ROME\USERSDBF
正將數據文件恢復到E:\ORACLE\ORADATA\ROME\TESTDBF
通道 ORA_DISK_: 正在讀取備份段 D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROM
E\BACKUPSET\__\O_MF_NNNDF_TAGT_VFPWCXS_BKP
通道 ORA_DISK_: 已恢復備份段
段句柄 = D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET\__
\O_MF_NNNDF_TAGT_VFPWCXS_BKP 標記 = TAGT
通道 ORA_DISK_: 恢復完成 用時: ::
完成 restore 於 月
RMAN> recover database;
啟動 recover 於 月
使用通道 ORA_DISK_
正在開始介質的恢復
存檔日志線程 序列 已作為文件 D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOA
LOG 存在於磁盤上
存檔日志文件名 =D:\ORACLE\PRODUCT\\ORADATA\ROME\REDOALOG 線程 = 序列 =
介質恢復完成 用時: ::
完成 recover 於 月
RMAN> sql alter database open resetlogs;
sql 語句: alter database open resetlogs
如果使用了Flash Recovery AreaRMAN自動執行CROSSCHECK檢查控制文件中涉及到的備份文件和競相拷貝(磁盤備份)如果是使用磁帶備份RMAN不會自動進行CROSSCHECK檢查需要我們恢復完控制文件後執行下列檢查操作
RMAN> CROSSCHECK BACKUP DEVICE TYPE SBT;
如果我們的RMAN是帶有恢復目錄的話則在恢復的時候不用進行SET DBID操作直接執行如下命令即可
RMAN> restore controlfile;
我們可以在數據庫處於任何狀態的情況下把控制文件恢復到參數文件中設置的控制文件以外的位置
RMAN〉restore controlfile to from ;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17054.html