本文主要介紹了如何從一個不能正常打開的數據庫(由於一個/多個數據庫文件與其他文件不一致)中提取數據的具體示例詳細內容請大家參考下文
具體案例
一個磁盤損壞了並且丟失了一個數據庫文件從一周前的熱備轉儲數據文件可是丟失了幾個歸檔日志文件但是有問題的數據文件包含了最重要的表采用什麼辦法才能挽救數據呢?
解決方法
每個數據庫管理員都知道這是有問題的一定會丟失數據因為某些事務丟失了問題是會丟失多少數據?Oracle使用硬線路位置並且由於存在完整性約束問題因此不允許正常打開數據但是如果使用非常規的方法讓Oracle刪除其硬線路屬性那麼應該能夠提取盡可能多的數據而通常這會比損失全部數據要好很多
通常假如僅僅丟失了堆表的索引或者某些能夠很容易重建的數據那麼最好的方法應該是刪除表空間並重建這些對象然後重新輸入但是如果丟失的數據文件包含了重要數據並且很難恢復而且只有前一次的備份卻又丟失了某些歸檔日志那麼用戶可能希望能夠盡可能多的從有問題的表空間恢復數據並且刪除和重建表空間
具體步驟如下
對當前擁有的數據進行一個冷備;
轉儲丟失的數據庫文件備份並應用可以應用的日志;
設置未文檔化的初始化參數其允許你在當前狀態打開數據庫;
執行exp並提取全部可以從有問題的表空間提取的數據;
從先前的冷備轉儲數據庫;
使毀壞的數據文件offline;
執行exp並提取第步沒有提取的額外數據;
在一次從冷備轉儲;
刪除有問題的表空間;
重建有問題的表空間;
使用第四步和第七步提取的數據重建數據;
使用案例描述ORDTAB表空間的一個數據文件ordtabdbf毀壞其包含很多
ORDERS表的分區數據文件熱備於July July —至今的某些歸檔日志丟失
第步備份數據庫
第步的任務是冷備當前擁有的任何數據文件在線重做日志和控制文件如果丟失了一個/多個數據文件但是數據庫仍然是open的那麼對每個剩余的數據文件進行熱備並確保備份期間/之後的歸檔被安全保存
創建備份後在關閉數據庫之前備份一下控制文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
然後打開備份的控制文件刪除第一個#之上的所有行並刪除RECOVER DATABASE…到文件結尾的全部
第步轉儲丟失的數據庫文件備份並應用日志;
這一步應該轉儲備份並應用日志到直到無法在前向滾動此時如果嘗試正常打開數據庫將會得到ORA: must use RESETLOGS or NORESETLOGS option for database open錯誤
如果嘗試執行ALTER DATABASE OPEN RESETLOGS將會得到ORA錯誤ORA: online backup of file %s needs more recovery to be consistent
[] []
From:http://tw.wingwit.com/Article/program/SQL/201311/16189.html