資料庫高階恢復
DBMS_BACKUP_RESTORE可用於特殊情況下的恢復
在controlfile故障時,可以利用它進恢復資料檔案,DBMS_BACKUP_RESTORE可在nomount狀態下進行恢復操作。
Oracle提供了一個包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb 這兩個指令碼建立的.catproc.sql 指令碼執行後會呼叫這兩個包.所以是每個資料庫都有的這個包是Oracle伺服器和作業系統之間IO操作的介面.由恢復管理器直接呼叫。而且據說這兩個指令碼的功能是內建到Oracle的一些庫檔案中的.
由此可見,我們可以在資料庫 nomount 情況下呼叫這些package ,來達到我們的恢復目的。在dbmsbkrs.sql 和prvtbkrs.plb 這兩個指令碼中有詳細的說明文件
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
--分配一個裝置通道,如果使用的作業系統檔案,type就為空,如果是從磁帶上恢復要用 "sbt_tape"
devtype:=sys.dbms_backup_restore.deviceAllocate( type => '' ,ident=> 't1' );
--表示開始恢復 ;
sys.dbms_backup_restore.restoreSetDatafile;
--指定恢復檔案的目標位置
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 01 ,toname=> 'D:\ORADATA\HUI99DB\SYSTEM01.DBF' );
--指定備份集的位置
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S90_P1.RBAK' , params=> null );
--釋放通道
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
--Include the current SPFILE in the backup set.
exec dbms_backup_restore.backupspfile ;
-- 恢復引數檔案,如果指定 sfname 還可以恢成 spfile ;
-- 需要在 nomount 狀態下恢復,可以先啟動到 DUMMY ;
-- 或者自建一個 pfile ,只要在檔案裡設定 db_name 即可啟動例項到 nomount 狀態 ( 預設情況可能出現 ORA-04031 錯誤,最好在 pfile裡將 shared_pool_size 設定大一點的值 )
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate ( type => '' ,ident=> 't1' );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.RESTORESPFILETO(pfname=>'C:\oracle\product\10.2.0\admin\hui99db\pfile\pfile.ora' );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S91_P1.RBAK' , params=> null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
-- 恢復控制檔案
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate ( type => '' ,ident=> 't1' );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restorecontrolfileto(sfname=> 'D:\ORADATA\HUI99DB\controlfile01.ora' );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S91_P1.RBAK' , params=> null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
-- 恢復 0 級備份語句
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate( type => '' ,ident=> 't1' );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 01 ,toname=> 'D:\ORADATA\HUI99DB\SYSTEM01.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 02 ,toname=> 'D:\ORADATA\HUI99DB\UNDOTBS01.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 03 ,toname=> 'D:\ORADATA\HUI99DB\SYSAUX01.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 04 ,toname=> 'D:\ORADATA\HUI99DB\USERS01.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 05 ,toname=> 'D:\ORADATA\HUI99DB\MALLTEST.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 06 ,toname=> 'D:\ORADATA\HUI99DB\MALLTESTPART.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 07 ,toname=> 'D:\ORADATA\HUI99DB\MALLTESTIDX.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 08 ,toname=> 'D:\ORADATA\HUI99DB\MALLIDXSPACE.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 09 ,toname=>'D:\ORADATA\HUI99DB\MALLPARTSPACE.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=> 10 ,toname=> 'D:\ORADATA\HUI99DB\MALLSPACE.DBF' );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S90_P1.RBAK' , params=> null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
-- 恢復增量備份
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate ( type => '' ,ident=> 't1' );
sys.dbms_backup_restore.applySetDatafile;
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 01 ,toname=> 'D:\ORADATA\HUI99DB\SYSTEM01.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 02 ,toname=> 'D:\ORADATA\HUI99DB\UNDOTBS01.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 03 ,toname=> 'D:\ORADATA\HUI99DB\SYSAUX01.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 04 ,toname=> 'D:\ORADATA\HUI99DB\USERS01.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 05 ,toname=> 'D:\ORADATA\HUI99DB\MALLTEST.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 06 ,toname=> 'D:\ORADATA\HUI99DB\MALLTESTPART.DBF');
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 07 ,toname=> 'D:\ORADATA\HUI99DB\MALLTESTIDX.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 08 ,toname=> 'D:\ORADATA\HUI99DB\MALLIDXSPACE.DBF');
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 09 ,toname=> 'D:\ORADATA\HUI99DB\MALLPARTSPACE.DBF');
sys.dbms_backup_restore.applyDatafileTo(dfnumber=> 10 ,toname=> 'D:\ORADATA\HUI99DB\MALLSPACE.DBF' );
sys.dbms_backup_restore.applyBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_DIF_2_3367236198_20100809_S94_P1.RBAK' , params=> null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
-- 恢復歸檔日誌備份
DECLARE
devtype varchar2 ( 256 );
done boolean ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate ( type => '' ,ident=> 't1' );
sys.dbms_backup_restore.restoreSetArchivedLog;
sys.dbms_backup_restore.restoreArchivedLog( thread => 1 , sequence => 107 );
/* sys.dbms_backup_restore.RESTOREARCHIVEDLOGRANGE(low_change=>0,high_change=>);*/
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'F:\rmanbackup\HUI99DB_ARC_12_3367236198_20100810_S96_P1.RBAK' , params=> null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
全庫的恢復
Recover database using backup controlfile until cancel;
開啟資料庫
Alter database open resetlogs;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9932141/viewspace-677384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- MongoDB高階應用之資料轉存與恢復MongoDB
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 資料庫修復資料恢復資料庫資料恢復
- 恢復資料庫資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- MongoDB高階應用之資料轉存與恢復(5)MongoDB
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 【資料庫資料恢復】windows server下SqlServer資料庫的資料恢復資料庫資料恢復WindowsServerSQL
- 使用恢復建議恢復資料庫資料庫
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- 【資料庫資料恢復】MS SQL資料庫附加資料庫出錯怎麼恢復資料?資料庫資料恢復SQL
- 資料庫恢復方案資料庫
- RMAN恢復資料庫資料庫
- sybase資料庫恢復資料庫
- 【資料庫資料恢復】SqlServer資料庫無法讀取的資料恢復案例資料庫資料恢復SQLServer
- 資料庫資料恢復—NTFS分割槽損壞如何恢復SqlServer資料庫資料資料庫資料恢復SQLServer
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】linux系統下MYSQL資料庫資料恢復案例資料庫資料恢復LinuxMySql
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】Oracle資料庫ASM磁碟組掉線如何恢復資料?資料庫資料恢復OracleASM
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【資料庫資料恢復】SQL server資料庫被加密怎麼辦?如何恢復?資料庫資料恢復SQLServer加密
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer
- 資料庫資料恢復—SQLserver資料庫中勒索病毒被加密怎麼恢復資料?資料庫資料恢復SQLServer加密
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- Oracle 11g 資料庫恢復-場景4:部分檔案損壞恢復,開庫狀態, 高可用恢復方式Oracle資料庫
- Oralce 11g資料庫恢復-場景3:部分檔案損壞恢復,關庫狀態,高可用恢復方式資料庫
- 資料庫資料恢復-oracle資料庫報錯無法開啟的如何恢復資料?資料庫資料恢復Oracle
- 資料庫資料恢復-SQL SERVER資料庫MDF (NDF)或LDF損壞如何恢復資料?資料庫資料恢復SQLServer
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- 【資料庫資料恢復】MongoDB資料庫服務啟動失敗的資料恢復案例資料庫資料恢復MongoDB
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer