優化Oracle停機時間及資料庫恢復

2021-03-31 08:56:28 字數 4497 閱讀 5684

這裡會討論令oracle停機時間最小化的步驟。各種形式的停機--計畫的或者是非計畫的--總是不斷地發生,乙個dba應該有正確的備份策略,這樣在資料庫出現問題時就可以更快地恢復。

以下是假定的備份策略和資料庫的運作條件

控制檔案是映象的

資料庫執行在archivelog模式

每個星期都進行冷備份

每日都進行熱備份

每日都進行一次全資料庫匯出

事件1:完整的資料庫重構

可以使用以下的步驟來恢復:

1、以restrict模式啟動資料庫

2、重新建立表空間

3、使用最新的全資料庫匯出來匯入,並且使用ignore=y的選項;

4.關閉並且重新以normal的模式啟動資料庫例項

事件3:丟失一般的資料檔案

select x.group#, member, sequence#, first_change#

from v$log x, v$logile y

where x.group# = y.group#;

事件4:恢復乙個特別的表

可以採用以下的步驟恢復:

1、使用最近的一次全資料庫匯出來匯入表,並且使用owner=

和tables=

的選項

2、考慮到效能的原因,可能需要重建表索引

事件5:丟失控制檔案

在資料庫起來並且執行時,通常都不能檢測到控制檔案的問題、如果控制檔案丟失或者損壞了,oracle將不會了解,下次資料庫的啟動時將會導致ora-205錯誤(標識控制檔案"%s的錯誤),還有乙個系統級的錯誤、

如果只是丟失了其中的乙個控制檔案,可以採用下面的步驟來恢復:

1、如果它正在執行的話,先關閉它

2、查詢丟失控制檔案的原因、是由於硬體的問題嗎(磁碟還是控制器)?

3、如果不是硬體的問題,將控制檔案的乙個好的拷貝複製到丟失的位置,並且跳到步驟5、

4、如果是硬體的問題,複製乙個好的控制檔案拷貝到乙個可靠的位置

5、編輯initsid.ora 或者 configsid.ora,更新control_files以反映最新的控制檔案位置

6、啟動資料庫

事件6:丟失全部的控制檔案

可以採用以下的步驟恢復:

1、關閉資料庫

2、進行一次全資料庫備份,包括全部的資料檔案和redo log檔案

3、以nomount的狀態啟動資料庫

4、使用create controlfile重新建立控制檔案、你也可以備份控制檔案到乙個trace檔案,然後執行該檔案

5、在資料庫上進行**恢復

6、開啟資料庫

7、使用shutdown normal關閉資料庫

8、對資料庫進行一次冷備份

事件7:丟失乙個索引

最簡單的方法就是重新建立丟失的索引

事件8:丟失乙個非活動的redo log

如果丟失redo資料,恢復將是不完全的,必須重新建立涉及的表空間。要重新建立表空間,可以使用全的資料庫匯出,這樣就可以很容易的匯入資料並且重新建立該錶空間的物件。可以使用以下的步驟來恢復:

1、通過alter system來切換redo log檔案

2、關閉資料庫

3、startup mount資料庫

4、離線刪除涉及的資料檔案

5、開啟資料庫

6、刪除使用者的表空間,包括其中的內容、

7、通過全資料庫備份重新建立表空間和其中的物件

事件9:丟失活動的redo log

如事件8討論的一樣,如果丟失了redo資料,恢復將是不完全的,必須重新建立涉及的表空間、可以採用以下的步驟恢復:

1、關閉資料庫

2、startup mount資料庫

3、離線刪除涉及的資料檔案

4、開啟資料庫

5、刪除使用者的表空間,包括其中的內容、

6、通過全資料庫備份重新建立表空間和其中的物件

要注意的是活動的事務將會丟失

事件10:丟失存檔的redo log檔案

如果存檔的redo log檔案丟失,應該馬上進行一次冷備份、最好也進行一次全資料庫匯出、沒有丟失的存檔redo log檔案的任何恢復都將是不完全的、

事件11:丟失活動的回滾段

這裡指的是丟失乙個回滾段的乙個資料檔案、這是乙個危急的恢復過程,它主要是在於儲存活動的事務。這裡假定資料庫已經起來,而你想儲存當前執行的事務。要使用以下的恢復過程,資料庫必須執行在archivelog模式下。

可以使用以下步驟恢復:

1、不要關閉資料庫、對於這種事件,資料庫啟動比關閉更容易解決問題、

2、令屬於該資料檔案中的全部回滾段離線

3、刪除全部離線的回滾段

4、在上面的第2步中,如果回滾段中有活動的事務,你將不能令它離線、可執行以下的查詢來檢視哪些事物是活動的:

select segment_name, xacts active_tx, v.status

from v$rollstat v, dba_rollback_segs

where tablespace_name = 'tablespace_name' and

segment_id = usn;

如果上面的查詢沒有結果,那麼所有的回滾段都是離線的,但是,如果上面的查詢返回一行或者多行,並且其狀態為pending offline,那麼可檢查這些回滾段的active_tx列、帶有0值的回滾段將很快會離線;但是,非0的值表示上面有活動的事務,它們需要被提交或者回滾、

5、處理活動的事務、執行以下的查詢來檢視哪些使用者的事務被指派到該回滾段:

select s.sid, s.serial#, s.username, r.name "rollback"

from v$session s, v$transaction t, v$rollname r

where r.name in ('pending_rollback1','pending_rollback2', .... 'pending_rollbackn') and

s.taddr = t.addr and

t.xidusn = r.usn;

事件12:丟失全部的回滾段

在這種事件下,將丟失全部活動的事務,並且需要重新建立回滾段。這樣大的問題可能是由於乙個硬體問題造成的,可以採用以下的步驟恢復:

1、關閉資料庫

2、使用dbverify驗證全部的資料檔案

3、解決其它的硬體問題或者資料檔案損壞

4、以startup mount的方式啟動資料庫例項

5、在資料庫上執行**恢復

6、開啟資料庫

7、按需要建立新的回滾段

事件13:匯出檔案損壞

如果匯出檔案不能用了,那麼應該冷備份資料庫並且進行乙個全的資料庫匯出、這是假定資料庫自身沒有問題、如果資料庫也損壞了,那麼應該執行以下的步驟:

1、ora-1157錯誤資訊通常都表示乙個或者多個的資料檔案損壞了。查明哪些表受到影響,它們應該是錯誤資訊中指明的資料檔案中的**

2、跳過壞的資料塊,將資料由**中選擇到臨時**中、

3、丟棄損壞的表

4、將臨時表重新命名為丟棄的表

5、重新建立受影響表上的全部索引

6、使用validate structure cascade的選項來分析全部損壞的表

要注意的是損壞塊中資料將會丟失並且不能恢復

事件14:在熱備份時關機

如果在熱備份正在進行的時候突然關機,其中的一些表空間將可能處在備份模式、當你嘗試開啟資料庫時,它將只能mount,並且指示某些表空間處於熱備份模式、由於資料庫不能開啟,你將不能讓表空間脫離熱備份模式、你可以使用以下的步驟恢復:

1、startup mount資料庫

2、查詢v$backup以檢視哪些資料檔案處於active狀態、

3、通過使用命令alter database datafile

end backup.來將這些資料檔案脫離備份模式

4、開啟資料庫

事件15:恢復到某個特別的時間點

以下的步驟可用來執行point-in-time恢復

1、關閉資料庫例項

2、以nomount的狀態啟動資料庫例項

3、使用until

的選項來恢復資料庫

4、開啟資料庫

5、shutdown normal

6、啟動資料庫例項

事件16:恢復到乙個特別的事件或者活動

可以使用以下的步驟來恢復:

1、關閉資料庫例項

2、以nomount狀態啟動資料庫例項;

3、使用until cancel來恢復資料庫,提供存檔的redo log檔案請求直到該活動/事件為止

4、輸入cancel來取消恢復

5、開啟資料庫;

6、使用normal的模式來關閉資料庫

7、啟動資料庫例項

結論

高可用性對於任何的商業都是很重要的,oracle dba可以通過一些計畫以確保停機時間最小化、這篇文章討論了不同的策略可以達到這個目的。

Oracle資料檔案丟失,不停機恢復

歸檔模式 僅供參考 手誤刪除乙個資料檔案,此時資料庫還能正常使用,相關表也能查詢 修改資料 在修復資料檔案的過程中會影響與此表空間相關表的查詢等操作 1.根據資料檔名找到檔案號 2.使資料檔案offline alter database datafile 43 offline 3.進入rman恢復資...

利用登錄檔優化系統,減少開機時間

登錄檔是系統的核心資料庫,它包含了應用程式和計算機系統的全部配置資訊,初始化資訊,檔案關聯資訊以及硬體裝置資訊等重要資料。登錄檔直接控制了計算機系統的啟動,硬體裝置驅動的載入和應用程式的正常執行,故而可通過修改登錄檔表達到優化系統的目的。在實際的電腦使用過程中,很大一部分電腦使用者可能會覺得作業系統...

SQL Server 資料庫最小宕機時間遷移方案

一 目的 在做sql server資料庫維護的時候,當上司要求我們把幾十g的資料檔案搬動到其它伺服器,並且要求最小宕機時間的時候,我們有沒什麼方案可以做到這些要求呢?在這裡我們假設這兩台機器並不是在乙個機房上,這樣看起來我們的解決方案才更有意義,如果你那麼好運這兩台機器在同乙個區域網,那麼恭喜你,你...