====== 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;
/