tablespace point in time recover (tpitr)

tolywang發表於2007-11-01

基於表空間的時間點恢復:

適用環境:7×24的系統出現表被丟棄的現象,可以在不影響系統正常執行的情況下對此表空間上的表恢復到刪除之前。

要求:1,版本要8i或者以上 2, 此表空間必須是自包含的 3,資料庫執行在歸檔模式下


假設:表被誤刪除,客戶要求在不影響現有應用的情況下恢復此表,此表所在的表空間可以離線。

步驟:做clone資料庫

1,客戶反映表被誤刪除,表空間假設為test,則 sql>alter tablespace test offline immediate;(這點很重要)

2,sql>alter database backup controlfile to 'e:oradatabackupctl.ctl';

3,複製系統資料檔案,test表空間的資料檔案,init引數,相應的歸檔日誌,聯機日誌,還有2中的備份控制檔案 到另一環境下;

4,修改init引數

首先修改控制檔案,將控制檔案修改成我們備份的backupctl.ctl,必須是備份控制檔案。如果用非backup命令產生的控制檔案在mount的時候將報控制檔案為非clone控制檔案。

加入以下三行:

db_file_name_convert = 'd:oracleoradatastudy','e:oradatastudy' (將以前的資料檔案路徑修改成目前的新環境的路徑)

log_file_name_convert ='d:oracleoradatastudy,'e:oradatastudy' (同上)

lock_name_space=CLONE (此引數允許如果例項名和先前的資料庫的例項名不同的話,仍可以開啟資料庫)

以上引數db_file_name_convert log_file_name_convert 如果不加的話,在mount資料庫的時候要手動講路徑都rename一遍;lock_name_space=CLONE此引數不加的話,在開啟資料庫的時候會報無法用exclusive模式開啟資料庫的錯誤。

5,用指定init啟動到nomount ,sql>startup nomount pfile=e:oradatainit.ora

6,mount, sql>alter database mount clone database 這裡和正常的mount有些區別,這裡的資料檔案這時的狀態都是offline的,正常的mount都是online的。

7,將系統表空間system,臨時表空間temp,需要恢復的表空間test的資料檔案online,如果你曾經建立了自己的臨時表空間建議先刪除,實驗中發現建立的臨時表空間時如果用的是臨時檔案在後面exp的時候會報錯,可以先刪除這樣的臨時表空間然後繼續。

8,恢復到表被刪除的時間點,sql>alter database recover until time '2004-03-23:22:22:12';這期間可能可能要把聯機日誌應用一遍。

9,將聯機日誌rename到目前新環境下的路徑。open,sql>alter database open resetlogs;

10,校驗表空間的自包含性,sql>exec dbms_tts.transport_set_check('TEST',TRUE);

然後sql >select * from ts_pitr_check where ts1_name='TEST';如果沒有返回行證明是自包含的(對於非自包含的沒有去實驗,以後補上);

11,cmd>exp 'sys/oracle as sysdba' point_in_time_recover=y tablespaces=test file=e:tspitr.dmp log=e:tspitr.log

12,連線到生產庫上sql>alter tablespace test offline for recover;

13,cmd>imp 'sys/oracle as sysdba' point_in_time_recovery=y file=e:tspitr.dmp

14,sql>alter tablespace test online;

測試資料,完成。

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

相關文章