以下的文章主要介紹的是Oracle數據庫中的ODU幾種相關恢復場景,因為ODU實際應用命令比較多,尤其是unload命令,其實際應用是非常復雜的,以下的文章將簡單介紹幾種場景下使用ODU進行數據恢復時,使用的命令序列。
場景1. 數據庫不能啟動,但是SYSTEM表空間中的Oracle數據字典是完整的。
生成數據字典:unload dict
列出用戶: list user
列出用戶下的所有表: list table username
恢復表: unload table username.tablename
也可以按用戶恢復: unload user username
場景2. 表被TRUNCATE。
OFFLINE表所在的表空間
生成Oracle數據字典:unload dict
顯示表的段頭:desc username.tablename
找到實際的data object id: dump datafile file# block block#
掃描數據:scan extent
恢復表:unload table username.tablename object object_id
UPDATE:
從3.0.7版本開始,恢復Truncate表更方便,只需要執行下面的步驟:
OFFLINE表所在的表空間
生成Oracle數據字典:unload dict
掃描數據:scan extent
恢復表:unload table username.tablename object auto
場景3. 表被DROP。
OFFLINE表所在的表空間
使用logminer從日志裡面挖掘被drop掉的表其data object id,如果不能挖掘,按下面的場景4進行恢復。
掃描數據:scan extent
如果沒有表結構信息,需要自動來判斷:unload object data_object_id sample
恢復表:unload object data_object_id column coltype coltype…
場景4. 系統表空間損壞。
掃描數據:scan extent
搜索數據:unload object all sample
從結果文件sample.txt查找需要的數據
恢復需要的表:unload object data_object_id column coltype coltype…
場景5. 表中數據被DELETE。
將參數unload_deleted設置為YES
生成Oracle數據字典:unload dict
恢復表: unload table username.tablename