使用儲存指令碼還原恢復資料庫

hooca發表於2016-04-07
如果要使用儲存指令碼,首先需要啟用恢復目錄。

1. 建立儲存指令碼

點選(此處)摺疊或開啟

  1. #RMAN連線到恢復目錄
  2. rman target / catalog rcowner/oracle@rcata

  3. #建立備份用指令碼
  4. create script bak_db_arch
  5. comment 'backup database plus archivelog, then clean archivelog.'
    {
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    backup database plus archivelog;
    delete noprompt archivelog all;
    release channel c1;
    release channel c2;
    }
  6. #建立還原指令碼
  7. create script restore_db
  8. comment 'restore database, then db can be recovered.'
    {
    restore spfile;
    shutdown immediate;
    startup nomount;
    restore controlfile;
    alter database mount;
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    restore database;
    release channel c1;
    release channel c2;
    }
  9. #建立恢復指令碼,需要用到替換變數
  10. create script recover_db
    {
    set until sequence &1 thread &2;
    recover database;
    alter database open resetlogs;
    }
  11. #注意:在有替換變數的這一行,RMAN會立即要求輸入初始值,因此不能將整段語句直接貼上上去!
以下是一些與儲存指令碼有關的命令

點選(此處)摺疊或開啟

  1. # 檢視恢復目錄裡有哪些指令碼,同時會顯示comment
  2. list script names;

  3. # 檢視指令碼內容
  4. print script <指令碼名>;

  5. # 編輯指令碼
  6. replace script ......與建立命令相同)

  7. # 刪除指令碼
  8. delete script <指令碼名>;
接下來,先執行備份

點選(此處)摺疊或開啟

  1. run { execute script bak_db_arch; }
然後故意破壞引數檔案

點選(此處)摺疊或開啟

  1. mv spfileprod.ora spfileprod.ora.old
在RMAN中啟動到nomount

點選(此處)摺疊或開啟

  1. RMAN> startup nomount
然後執行restore指令碼

點選(此處)摺疊或開啟

  1. RMAN> run { execute script restore_db; }
完成後,檢視日誌序列號和執行緒號,這個將在恢復時用到。

點選(此處)摺疊或開啟

  1. RMAN> list backup by file;

  2. List of Archived Log Backups
  3. ============================

  4. Thrd Seq Low SCN Low Time BS Key S #Pieces #Copies Compressed Tag
  5. ---- ------- ---------- ------------------- ------- - ------- ------- ---------- ---
  6. 1 2 4471363 2016-04-02 09:00:53 1104 A 1 1 NO TAG20160407T084606
  7. 1 3 4532043 2016-04-04 01:00:10 1104 A 1 1 NO TAG20160407T084606
  8. 1 4 4607063 2016-04-06 00:30:18 1105 A 1 1 NO TAG20160407T084606
  9. 1 1 4625382 2016-04-06 12:55:14 1106 A 1 1 NO TAG20160407T084606
  10. 1 1 4626459 2016-04-06 13:20:54 1107 A 1 1 NO TAG20160407T084606
  11. 1 2 4656086 2016-04-07 08:46:00 1142 A 1 1 NO TAG20160407T085111
執行恢復指令碼

點選(此處)摺疊或開啟

  1. RMAN> print script recover_db;

  2. printing stored script: recover_db
  3. {
  4. set until sequence &1 thread &2;
  5. recover database;
  6. alter database open resetlogs;
  7. }

  8. RMAN> run { execute script recover_db; }

  9. executing script: recover_db

  10. Enter value for 1: 3

  11. Enter value for 2: 1

  12. executing command: SET until clause

  13. Starting recover at 2016-04-07 09:17:40
  14. allocated channel: ORA_DISK_1
  15. channel ORA_DISK_1: SID=63 device type=DISK

  16. starting media recovery

  17. archived log for thread 1 with sequence 2 is already on disk as file /u01/app/oracle/oradata/prod/disk1/redo02a.log
  18. archived log file name=/u01/app/oracle/oradata/prod/disk1/redo02a.log thread=1 sequence=2
  19. media recovery complete, elapsed time: 00:00:00
  20. Finished recover at 2016-04-07 09:17:46

  21. database opened
  22. new incarnation of database registered in recovery catalog
  23. starting full resync of recovery catalog
  24. full resync complete
完成!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-2076680/,如需轉載,請註明出處,否則將追究法律責任。

相關文章