Oracle丟失歸檔日誌檔案的資料庫恢復方法

2021-08-26 10:56:14 字數 2884 閱讀 3511

丟失歸檔日誌檔案的資料庫恢復方法,從乙個不能正常開啟的資料庫(由於乙個/多個資料庫檔案與其他檔案不一致)中提取資料。場景:乙個磁碟損壞了並且丟失了乙個資料庫檔案。從一周前的熱備轉儲資料檔案,不幸的是丟失了幾個歸檔日誌檔案。但是有問題的資料檔案包含了最重要的表,如何能夠挽救資料呢?

從乙個不能正常開啟的資料庫(由於乙個/多個資料庫檔案與其他檔案不一致)中提取資料。場景:乙個磁碟損壞了並且丟失了乙個資料庫檔案。從一周前的熱備轉儲資料檔案,不幸的是丟失了幾個歸檔日誌檔案。但是有問題的資料檔案包含了最重要的表,如何能夠挽救資料呢?

每個dba都知道這是有問題的,一定會丟失資料,因為某些事務丟失了,問題是會丟失多少資料?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—至今的某些歸檔日誌丟失。

建立備份後,在關閉資料庫之前,備份一下控制檔案:alter database backup controlfile to trace resetlogs;然後開啟備份的控制檔案,刪除第乙個#之上的所有行,並刪除「recover database…」到檔案結尾的全部。

第二步:轉儲丟失的資料庫檔案備份並應用日誌;這一步應該轉儲備份,並應用日誌到直到無法在前向滾動,此時如果嘗試正常開啟資料庫,將會得到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不允許正常開啟資料庫。

第三步:設定未文件化的例項引數並開啟資料庫在初始化引數檔案中首先需要將job_queue_processes設定為0,然後設定_allow_resetlogs_corruption=true,更改該引數後,切換到儲存新控制檔案的目錄,第一步建立的位置。然後以sysdba連線並執行新的控制檔案建立指令碼。

此時資料庫可以開啟了。

sql> select count(*) from oe.orders;

第四步:執行匯出並提取資料在這一步可以很容易的看到那些表匯出了全部的資料。

第五步:轉儲備份的資料庫這一步,以及下面兩步可選。這三步結合在一起允許提取更多的資料,這一步從備份的資料庫轉儲可以高效的撤銷任何由於使用_allow_resetlogs_corruption引數造成的毀壞。因此,這一步不會恢復任何丟失的資料檔案。

第六步:使毀壞的資料檔案offline alter database datafile 』/u07/oradata/prd/ordtab03.dbf』 offline;這一步得到資料庫的完全一致性狀態。

第七步:執行匯出並提取額外的資料這一步可能能夠提取從第四步不能提取的額外資料,如索引中的資料。

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

第九步:刪除有問題的表空間首先需要檢視是否有完整性約束限制,使用以下查詢:

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;

第十步:重建表空間

第十一步:重建資料執行匯入

oracle 歸檔日誌檔案archieve log

歸檔日誌檔案 是處於非活動 inactive 的狀態的重做日誌檔案的備份。它對oracle 資料庫的備份和恢復起至關重要的作用。是聯機重做日誌檔案的乙個副本,與被複製的成員完成一樣,即重做記錄相同,日誌序列號相同。一 資料庫的歸檔與非歸檔模式 1 當資料庫處於noacrchivelog 模式時,不對...

oracle歸檔日誌檔案管理

歸檔日誌 archive log 是非活動的重做日誌備份.通過使用歸檔日誌,可以保留所有重做歷史記錄,當資料庫處於archivelog模式並進行日誌切換式,後台程序arch會將重做日誌的內容儲存到歸檔日誌中.當資料庫出現介質失敗時,使用資料檔案備份,歸檔日誌和重做日誌可以完全恢復資料庫.1,改變日誌...

oracle日誌歸檔

文章出處 感謝作者的分享 oracle 歸檔日誌 oracle可以將聯機日誌檔案儲存到多個不同的位置,將聯機日誌轉換為歸檔日誌的過程稱之為歸檔。相應的日誌被稱為歸檔日誌。一 歸檔日誌 是聯機重做日誌組檔案的乙個副本 包含redo記錄以及乙個唯一的log sequence number 對日誌組中的乙...