====== RMAN Backups manuell entpacken und lesen ====== Mit dem DBMS_BACKUP_RESTORE lassen sich RMAN Sicherung manuell lesen und entpacken.\\ Sehr hilfreich beim Restore Scenario "Keinerlei Controlfile mehr, da autobackup vergessen!".\\ ====== 1. Beispiel: Archivelogs lesen ====== DECLARE v_device VARCHAR2 (50); v_done BOOLEAN; BEGIN -- get channel v_device := DBMS_BACKUP_RESTORE.deviceallocate(TYPE => NULL, ident => 't1'); --what to do DBMS_BACKUP_RESTORE.restoreSetArchivedLog; --which range DBMS_BACKUP_RESTORE.restorearchivedlogrange( low_change => 12640521350 ,high_change => 22640521354 ); -- do it DBMS_BACKUP_RESTORE.restoreBackupPiece (done => v_done ,handle => '/backup/SPR/SPR_AR_20070416_850_1' ,fromdisk => true ); -- deallocate device DBMS_BACKUP_RESTORE.devicedeallocate; exception when others then DBMS_BACKUP_RESTORE.devicedeallocate; END; / ====== 2. Beispiel: Restore Controlfile ====== DECLARE v_device VARCHAR2 (50); v_done BOOLEAN; TYPE t_filetable IS TABLE OF VARCHAR2 (255) INDEX BY BINARY_INTEGER; v_filetable t_filetable; -- backuppiece names speichern v_maxpieces NUMBER := 1; -- Anzahl der backuppieces in backupset BEGIN -- Backupsets angeben v_filetable (1) := '+ORARECO/mydb/backup/mydb_db_20100427_1006_1'; v_filetable (2) := '+ORARECO/mydb/backup/mydb_db_20100427_1007_1'; v_maxpieces := 2; -- device anfordern v_dev := SYS.DBMS_BACKUP_RESTORE.deviceallocate (TYPE => NULL, ident => 'd1'); -- restore conversation SYS.DBMS_BACKUP_RESTORE.restoresetdatafile; -- Was soll wie angelegt werden sollen SYS.DBMS_BACKUP_RESTORE.restorecontrolfileto (cfname => '/tmp/control01.ctl'); SYS.DBMS_BACKUP_RESTORE.restorespfileto ('/tmp/spfile.ora'); -- Restore FOR i IN 1 .. v_maxpieces LOOP SYS.DBMS_BACKUP_RESTORE.restorebackuppiece (done => v_done , handle => v_filetable (i) , params => NULL ); IF v_done THEN GOTO ready_restore; END IF; END LOOP; <> -- Deallocate device SYS.DBMS_BACKUP_RESTORE.devicedeallocate; EXCEPTION WHEN OTHERS THEN DBMS_BACKUP_RESTORE.devicedeallocate; END; / ====== 3. Beispiel: Datafiles wiederherstellen ====== DECLARE v_device VARCHAR2 (50); v_done boolean; BEGIN v_device := DBMS_BACKUP_RESTORE.deviceallocate(TYPE => NULL, ident => 't1'); dbms_backup_restore.RestoreSetDatafile; dbms_backup_restore.RestoreDatafileTo(dfnumber => 1,toname => '/tmp/SYSTEM01.DBF'); dbms_backup_restore.RestoreBackupPiece(done => done,handle => '', params => null); dbms_backup_restore.DeviceDeallocate; EXCEPTION WHEN OTHERS THEN DBMS_BACKUP_RESTORE.devicedeallocate; END; /