新疆軟件開發

本站首頁 軟件開發 成功案例 公司新聞 公司簡介 客服中心 軟件技術 網站建設
  您現在的位置: 新疆二域軟件開發公司 >> 數據庫開發 >> 文章正文

丟失日志文件后數據庫還能不能恢復了

          本文主要介紹了如何從一個不能正常打開的數據庫(由于一個/多個數據庫文件與其他文件不一致)中提取數據的具體示例,詳細內容請大家參考下文。
具體案例:
一個磁盤損壞了并且丟失了一個數據庫文件。從一周前的熱備轉儲數據文件,可是丟失了幾個歸檔日志文件。但是有問題的數據文件包含了最重要的表,采用什么辦法才能挽救數據呢?
解決方法:
每個數據庫管理員都知道這是有問題的,一定會丟失數據,因為某些事務丟失了,問題是會丟失多少數據?Oracle使用硬線路位置并且由于存在完整性約束問題,因此不允許正常打開數據。但是如果使用非常規的方法讓Oracle刪除其硬線路屬性,那么應該能夠提取盡可能多的數據。而通常這會比損失全部數據要好很多。
通常假如僅僅丟失了堆表的索引,或者某些能夠很容易重建的數據,那么最好的方法應該是刪除表空間并重建這些對象然后重新輸入。但是如果丟失的數據文件包含了重要數據并且很難恢復,而且只有前一次的備份卻又丟失了某些歸檔日志,那么用戶可能希望能夠盡可能多的從有問題的表空間恢復數據并且刪除和重建表空間。
具體步驟如下:

1.對當前擁有的數據進行一個冷備;
2.轉儲丟失的數據庫文件備份并應用可以應用的日志;
3.設置未文檔化的初始化參數,其允許你在當前狀態打開數據庫;
4.執行exp并提取全部可以從有問題的表空間提取的數據;
5.從先前的冷備轉儲數據庫;
6.使毀壞的數據文件offline;
7.執行exp并提取第4步沒有提取的額外數據;
8.在一次從冷備轉儲;
9.刪除有問題的表空間;
10.重建有問題的表空間;
11.使用第四步和第七步提取的數據重建數據;
使用案例描述:ORDTAB表空間的一個數據文件ordtab03.dbf毀壞,其包含很多
ORDERS表的分區,數據文件熱備于July 4, 2004,July 4—至今的某些歸檔日志丟失。

第1步:備份數據庫
第1步的任務是冷備當前擁有的任何數據文件,在線重做日志,和控制文件。如果丟失了一個/多個數據文件但是數據庫仍然是open的,那么對每個剩余的數據文件進行熱備并確保備份期間/之后的歸檔被安全保存。
創建備份后,在關閉數據庫之前,備份一下控制文件:

ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
然后打開備份的控制文件,刪除第一個#之上的所有行,并刪除“RECOVER DATABASE…”到文件結尾的全部。

 

第2步:轉儲丟失的數據庫文件備份并應用日志;


這一步應該轉儲備份,并應用日志到直到無法在前向滾動,此時如果嘗試正常打開數據庫,將會得到ORA-01589: must use RESETLOGS or NORESETLOGS option for database open錯誤。


如果嘗試執行ALTER DATABASE OPEN RESETLOGS,將會得到ORA-01195錯誤:ORA-01195: online backup of file %s needs more recovery to be consistent。


這里是Oracle使用其硬線路的位置。由于轉儲的數據文件不能恢復到與其他文件一致的位置,所以可能存在中斷的數據并且Oracle不允許正常打開數據庫。

 

第3步:設置未文檔化的實例參數并打開數據庫


在初始化參數文件中首先需要將job_queue_processes設置為0,然后設置_allow_resetlogs_corruption=TRUE,更改該參數后,切換到保存新控制文件的目錄,第一步創建的位置。然后以SYSDBA連接并運行新的控制文件創建腳本。


此時數據庫可以打開了。


SQL> SELECT COUNT(*) FROM OE.orders;

 


第4步:執行導出并提取數據


在這一步可以很容易的看到那些表導出了全部的數據。


第5步:轉儲備份的數據庫


這一步,以及下面兩步可選。這三步結合在一起允許提取更多的數據,這一步從備份的數據庫轉儲可以高效的撤銷任何由于使用_allow_resetlogs_corruption參數造成的毀壞。因此,這一步不會恢復任何丟失的數據文件。

 


第6步:使毀壞的數據文件offline


ALTER DATABASE DATAFILE '/u07/oradata/PRD/ordtab03.dbf' OFFLINE;


這一步得到數據庫的完全一致性狀態。


第7步:執行導出并提取額外的數據


這一步可能能夠提取從第四步不能提取的額外數據,如索引中的數據。


第8步 :轉儲數據庫


這是最后一次轉儲數據庫,這一步正式回滾數據庫到使用隱含參數前那一刻,然后將數據庫返回到正常狀態,如果從第五步轉儲以來沒有更新任何數據,可以跳過這一步。


第9步:刪除有問題的表空間


首先需要查看是否有完整性約束限制,使用以下查詢:


SELECT CR.constraint_name

FROM dba_constraints CR, dba_constraints CP, dba_tables TP, dba_tables TR

WHERE CR.r_owner = CP.owner

AND CR.r_constraint_name = CP.constraint_name

AND CR.constraint_type = 'R'

AND CP.constraint_type IN ('P', 'U')

AND CP.table_name = TP.table_name

AND CP.owner = TP.owner

AND CR.table_name = TR.table_name

AND CR.owner = TR.owner

AND TR.tablespace_name <> 'ORDTAB'

AND TP.tablespace_name = 'ORDTAB';
如果有約束,可能需要創建重建腳本。如果使用export dump重建數據,約束可以從導出文件轉儲。
DROP TABLESPACE ordtab INCLUDING CONTENTS CASCADE CONSTRAINTS;
第10步:重建表空間
第11步:重建數據
執行導入后,結束。

作者:未知 | 文章來源:賽迪網技術社區 | 更新時間:2008-4-17 0:32:55

  • 上一篇文章:

  • 下一篇文章:

  • 相關文章:
    Domino平臺的優缺點分析
    使用經驗整理-TestDirector8.0數據庫備份和還原
    c#如何連接各類數據庫
    基礎學習:基于SQL的sysColumns 數據庫字段表
    處理一個數據庫實例在登陸時報ORA-27140錯誤
    利用CodeSmith生成sql
    如何解決MySQL數據庫中文問題
    在VC 程序中自定義Vista事件日志
    如何獲取Oracle當前數據庫SCN值
    安全技術:數據庫系統安全之漏洞解決方法
    軟件技術
    · 開發語言
    · Java技術
    · .Net技術
    · 數據庫開發
    最新文章  
    ·Domino平臺的優缺點分析
    ·oracle不能連接本地庫的解
    ·使用經驗整理-TestDirecto
    ·學習sqlserver數據庫的維度
    ·sqlserver 多用戶并發中如
    ·丟失日志文件后數據庫還能
    ·人工智能在數據庫sql語句編
    ·數據庫學習:Oracle應用程
    ·基礎知識:軟件測試的要點
    ·技術文章:sqlserver 2008
    ·SQL Server虛擬內存和物理
    ·在MySQL中 describe命令怎
    ·怎樣解決視圖刷新時出現的
    ·如果忘記了MySQL的root用戶
    ·基礎學習:基于SQL的sysob
    關于我們 | 軟件開發 | 下載試用 | 客服中心 | 聯系我們 | 友情鏈接 | 網站地圖 | 新疆電子地圖 | RSS訂閱
    版權所有 © 2016 新疆二域軟件開發網 www.asuburbanlife.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發總機:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯大廈A-5C 郵編:830000
     
    亚洲伊人成综合人影院小说,亚洲永久无码浪潮,思思99re8这里有精品热视频