Oracle資料庫的靜默狀態和掛起狀態

聽海★藍心夢發表於2011-11-26

靜默狀態和掛起狀態是兩種特殊的資料庫狀態。當資料庫處於靜默狀態時,只有SYSSYSTEM使用者能夠在資料庫中進行操作。當資料庫處於掛起狀態時,資料庫IO操作都被暫時停止。利用這兩種資料庫狀態,DBA能夠完成一些特殊的管理和維護操作。 

1:靜默狀態(quiesced state) 

在靜默狀態下,只有具有DBA許可權的使用者能夠在資料庫中執行查詢/更新操作,執行PL/SQL程式,任何非DBA使用者都不能在資料庫中執行任何操作.如果DBA在非靜默狀態下執行某些操作時,必須排隊等待其他使用者的活動,這類操作包括如下兩類:

1.某些操作在執行過程,如果有其他使用者訪問操作的物件,該操作將會失敗.比如,DBA正在為某個表新增一個新的欄位時,如果有使用者恰好正在使用這個表,新增欄位的操作將失敗.

2.某些操作在執行過程中產生的中間結果不應當被其他使用者看到.比如,假設DBA要執行一項分為多個步驟的操作:首先匯出一個表的資料,然後刪除這個表,最後再重新匯入資料建立新的表,以達到重建該表的目的.而如果有某個使用者在刪除表之後,重建表之前訪問這個表,將會得到錯誤的結果.

如果沒有靜默功能,要保證成功完成上述型別的操作必須首先關閉資料庫,然後再使用受限模式開啟資料庫.這樣做的代價是很大的,尤其是在必須保證資料庫不間斷執行的環境中.而使用資料庫進入靜默狀態可以快速達到相同的目的,但是卻並不需要中斷資料庫的執行.處於靜默狀態時只允許SYSSYSTEM兩個DBA操作操作,其他使用者即使被授予DBA角色或SYSDBA許可權也不能夠在靜默狀態的資料庫中進行操作.因此,靜默狀態是比受限狀態更為"乾淨"的狀態.

SQL> alter system quiesce restricted; 

執行上面的語句後,資料庫將等待所有正在執行的非DBA使用者會話主動終止,同時不再允許開始任何新的非DBA使用者會話。當所有的非DBA使用者的活動會話都被成功暫停後,alter system quiesce restricted語句執行完畢,這是資料庫被認為處於靜默狀態。在靜默狀態中,即使某個非DBA使用者試圖執行一條SQL語句強行啟用某個會話,該SQL語句也會掛起。當資料庫從靜默狀態中恢復時,停止的會話將繼續執行,前面被掛起的SQL語句也會繼續執行。 

由於等待所有的非DBA使用者會話都被終止可能會需要很長一段時間,在這個過程中如果執行alter system語句的會話被意外中止,進入靜默狀態的操作將被撤銷,已經暫停的會話將被恢復。 

SQL> alter system unquiesce; 

執行上面的語句將從靜默狀態恢復為正常狀態。從靜默狀態恢復後,所有被暫停的會話和掛起的SQL語句將自動繼續執行。可以透過使用動態效能檢視V$INSTANCE來查詢當前資料庫是否處於靜默狀態。V$INSTANCE.ACTIVE_STATUS欄位顯示了資料庫當前的活動狀態: 

NORMAL正常狀態QUIESCING正在進入靜默狀態(仍然存在活動的非DBA使用者會話) QUIESCED靜默狀態(已經沒有活動的非DBA使用者會話) 

備註:當資料庫處於靜默狀態時,不能透過複製資料檔案的方法來對資料庫進行備份,因為靜默狀態中聯機資料檔案仍然處於讀寫狀態。只能在資料庫關閉狀態或者掛起狀態下才能對資料庫物理檔案進行復制操作。 

2:掛起狀態 

SQL> ALTER SYSTEM SUSPEND;

上面的語句將資料庫處於掛起狀態,資料庫所有的物理檔案(控制檔案/資料檔案以及重做日誌檔案)的I/O操作都被暫停。這樣能夠保證資料庫在沒有任何I/O操作的情況下進行物理備份。掛起的狀態與靜默狀態的區別是:它並不禁止非DBA使用者的資料庫操作,只是暫時停止所有使用者的I/O操作。 

當資料庫處於掛起狀態時,可以首先為資料庫建立磁碟映象,然後再從映象中分離出備份檔案,這樣就提供了一種進行資料庫備份和恢復的替代方法。在資料庫進入掛起狀態時,當前所有的I/O操作能夠繼續進行,但是所有新提交的I/O不會執行,而是被放入一個等待佇列中。一旦資料庫恢復到正常狀態,這些I/O操作將從佇列中取出並繼續執行。

可以透過使用動態效能檢視V$INSTANCE來查詢當前資料庫是否處於掛起狀態。V$INSTANCE.DATABASE_STATUS欄位顯示了資料庫當前的活動狀態: 

SUSPENDED掛起狀態ACTIVED正常狀態(非掛起狀態) 

SQL> ALTER SYSTEM SUSPEND;

System altered

SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;

DATABASE_STATUS

---------

SUSPENDED 

SQL> ALTER SYSTEM RESUME;

System altered

SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;

DATABASE_STATUS

---------

ACTIVE

 


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

相關文章