【ASK_ORACLE】你知道怎麼又快同時又幹淨地關閉Oracle資料庫嗎?

Attack_on_Jager發表於2021-09-02

實驗環境

搭建平臺:VMware Workstation

OS:RHEL 6.10

Grid&DB:Oracle 11.2.0.4


問題描述

1. 說到最快的關閉Oracle資料庫的方法,相信大家肯定會想到“shutdown abort”,但是,以這種形式關閉資料庫會使資料庫處於不一致的狀態(沒有回滾),在這種情況下的備份在下次啟動時需要恢復,所以達不到又快又幹淨的關閉方法的要求,所以pass。

2.  說到最乾淨的並且無需等待使用者程式退出的關閉Oracle資料庫的方法,相信大家肯定會想到“shutdown immediate”,但是這種方法並不是最快的,所以也pass。

那怎麼做到最快最乾淨的關閉呢?我們不妨換個思路,綜合一下這兩種方法?有人可能說這不是搞笑嗎,被我們騙進來了!其實不是,請大家繼續往下看。


解決辦法

1)透過下面的SQL查詢判定乾淨的關閉資料庫需要多少回滾(以位元組計算)

select sum(used_ublk) * <block size of the undo / rollback segment tablespace> from v$transaction;


2)執行“shutdown abort”

這個方法將在資料庫關閉時不進行事務回滾,可以最快的中斷所有程式,比如客戶端和後臺,這種關閉方式可以理解為“伺服器突然斷電”。

執行shutdown immediate時,SMON程式會嘗試中斷所有客戶端程式(SIGKILL),但是很多情況下SMON無法及時完成( 因為有些版本的bug也會導致 shutdown immediate命令無法停庫,比如Oracle 11.1.0.7的dmon程式),所以要等待很久才能關閉,這是使用 shutdown abort的原因。

注:

可透過第一步的輸出並結合你對需要停止的庫的經驗來判斷並決定乾淨的關閉資料庫的大致時間(shutdown immediate), 如果你不能等待shutdown immediate完成(不想幹淨關閉),剩下的步驟就可以不做,因為在下次啟動時,SMON會回滾事務(可能會很慢)。 生產庫非常不建議不乾淨的關閉!


3)執行“startup restrict”


4)透過下面的SQL檢視回滾(塊的個數)

select sum(distinct(ktuxesiz)) from x$ktuxe where ktuxecfl = 'DEAD';


5)當回滾完成 (有可能啟動後立刻就完成了),再執行" shutdown immediate"可乾淨關閉資料庫


知識延伸

1. 什麼是一致性備份和非一致性備份?

使用RMAN的backup命令可以 進行資料庫一致性和非一致性備份。

1)一致性備份Consistent Backups
當資料庫為一致的狀態可以進行一致性備份。我們知道,當資料庫使用“shutdown immediate”、shutdown  normal”或者 “ shutdown transactional”命令關閉時,資料庫為一致性狀態。一致性關閉保證了所有redo的資訊都被應用到了資料檔案。如果在此時資料庫在mount狀態進行備份,可以直接從restore資料庫並在開啟open資料庫時不需要再進行介質恢復。

2)非一致性備份Inconsistent Backups
任何不是一致性的備份都叫做非一致性備份。資料庫不一致時的備份,比如在資料庫正在執行,或者例項失敗,或者“shutdown abort”後的備份。當資料庫從一個非一致性備份restore資料庫,Oracle在開啟前必須執行介質恢復,從重做日誌中應用變更。

注:
1. RMAN不允許在非歸檔模式下執行非一致性備份。
2. 只要資料庫在歸檔模式下執行,就可以備份任何歸檔日誌檔案和資料檔案, 非一致性備份是備份恢復策略的基礎。非一致性備份提供了高可用性,因為它無需關閉資料庫來進行備份,也完全保護了資料庫。


2. shutdown超時怎麼辦?

關閉資料庫將等待使用者斷開或者事務在限定的時間內完成。如果關閉操作由於有事件阻塞進而不能在一小時內完成,關閉命令將中止並顯示下面的資訊:ORA-01013: user requested cancel of current operation(這個資訊也會在取消關閉程式時顯示,比如執行CTRL-C),因為當ORA-01013發生,此時的例項是處在一個什麼樣的狀態,我們不得而知。所以,必須重新執行SHUTDOWN命令來繼續關閉程式。如果隨後的shutdown命令仍舊失敗,就需要執行“shutdown abort”使例項強行關閉,在這之後就可以重啟例項了。


最後, 強烈 建議在資料庫正常關閉的過程中,一定不要中斷例項的關閉!需要等關閉程式完成了,再重啟例項。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2790117/,如需轉載,請註明出處,否則將追究法律責任。

相關文章