使用Oracle9i的新特征-停頓(QUIESCING)數(shù)據(jù)庫(kù)
2024-08-29 13:49:13
供稿:網(wǎng)友
原作者:Sameer Wadhwa
停頓(Quiescing)一個(gè)數(shù)據(jù)庫(kù)是一個(gè)強(qiáng)大的新特征,使得DBA可以完成一些數(shù)據(jù)庫(kù)處于受限模式(restricted mode)才能完成的一些操作。使用這個(gè)特征,當(dāng)以sys或system帳戶登陸后,DBA可以執(zhí)行查詢,PL/SQL,和進(jìn)行其它的一些事務(wù)。 而所有其它用戶的會(huì)話都將處于暫停(suspended)的狀態(tài),一旦DBA把數(shù)據(jù)庫(kù)置回到正常模式,用戶的這些會(huì)話又將會(huì)自動(dòng)繼續(xù)運(yùn)行了。
圖 1a:數(shù)據(jù)庫(kù)處于正常狀態(tài) .
圖 1b: 數(shù)據(jù)庫(kù)處于狀態(tài).
圖1a是數(shù)據(jù)庫(kù)處于正常模式的系統(tǒng)狀態(tài),在這種模式中DBA和用戶的事務(wù)都是運(yùn)行著的。一些DBA的事務(wù)是被限制著的,因?yàn)閿?shù)據(jù)庫(kù)必須處于受限模式時(shí)才可以運(yùn)行這些事務(wù)。相反的方面,圖1b是數(shù)據(jù)庫(kù)處于停頓狀態(tài)的情況,在圖中,所有用戶的事務(wù)都是被阻塞(blocked)著的,而沒(méi)有重啟數(shù)據(jù)庫(kù)到受限模式,DBA的事務(wù)也毫無(wú)問(wèn)題的運(yùn)行著。
一旦所有活動(dòng)的會(huì)話都執(zhí)行了commit或rollback,數(shù)據(jù)庫(kù)將會(huì)被停頓。
讓我們看一下它是如何進(jìn)行的。停頓數(shù)據(jù)庫(kù)所用的主要的命令為ALTER SYSTEM QUIESCE RESTRICTED;我將首先使用SQLPLUS登陸執(zhí)行這個(gè)操作。
C:/> U:/>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - PRodUCtion on Wed Apr 16 16:08:27 2003
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect sys/change_on_install as sysdba
Connected.
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
ALTER SYSTEM QUIESCE RESTRICTED
*
ERROR at line 1:
ORA-25507: resource manager has not been continuously on
如上的錯(cuò)誤表明資源治理器(resource manager)是非活動(dòng)的,要使它活動(dòng)你可以這樣:
SQL> alter system set resource_manager_plan='SYSTEM_PLAN' scope=spfile sid='OR9I';
System altered.
OR9i 是我的SID.
做完這個(gè)操作你不得不重啟一下數(shù)據(jù)庫(kù)了。
SQL> show parameter RESOURCE_MANAGER_PLAN
NAME TYPE VALUE
------------------------------------ ----------- ----------------
resource_manager_plan string SYSTEM_PLAN
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
System altered.
假如有一些未決的事務(wù)需要提交或回滾的話,先前的那條命令將會(huì)掛起而等待事務(wù)的完成。如想確定是哪些用戶的會(huì)話沒(méi)提交或回滾,你可以用如下的語(yǔ)句。
SELECT S.SID,S.SERIAL#,S.MACHINE,S.TERMINAL,S.USERNAME
FROM V$session S WHERE S.SID IN
(SELECT SID FROM V$LOCK WHERE TYPE='TX')
/
查詢的結(jié)果將會(huì)提供充足的信息使你能夠要求那些用戶提交、回滾或終止他們的事務(wù)。更壞一點(diǎn)的情況是你可以殺掉這些會(huì)話,會(huì)話將被被自動(dòng)回滾。系統(tǒng)處于停頓狀態(tài)后,你就可以不受其它用戶的干擾進(jìn)行工作了,完成工作后你可以用如下命令解除這種停頓的狀態(tài):
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
情景1:
事務(wù)順序
用戶會(huì)話
DBA 會(huì)話
(1)
Connected with SCOTT
SQL> update emp3 set
ename='John'
where ename='samir';
Connected with SYS
(2)
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
等待用戶SCOTT完成事務(wù).
(3)
SQL> commit;
Commit complete.
(4)
System altered.
第一種情景表明,在所有活動(dòng)的事物完成前DBA是不能停頓數(shù)據(jù)庫(kù)的。
一旦數(shù)據(jù)庫(kù)停頓了,庫(kù)對(duì)其它的用戶呈現(xiàn)的是停止(halt)或非活動(dòng)(inactive)的狀態(tài)。然后當(dāng)數(shù)據(jù)庫(kù)變?yōu)檎顟B(tài)后,所有的數(shù)據(jù)塊和暫停的事務(wù)又繼續(xù)運(yùn)行了。
情景 2:
事務(wù)順序
用戶 會(huì)話
DBA 會(huì)話
(1)
Connected with Scott User .
Connected with SYS.
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
System altered.
(2)
Select * from EMP;
wait for result
(3)
SQL> ALTER SYSTEM UNQUIESCE;
System altered.
EMPNO ENAME SALARY
--------- ---------- ----------
1 Sasa 1000
2 John 5000
3 Hema 7000
User can see the results.
情景2表明它如何影響了用戶的會(huì)話。簡(jiǎn)而言之,此時(shí)系統(tǒng)對(duì)于最終用戶是臨時(shí)的無(wú)效。
通常的一些問(wèn)題:
(Q)做為DBA的你如何檢查你的數(shù)據(jù)庫(kù)是什么狀態(tài)呢?
(A)你可以檢查V$INSTANCE視圖中的ACTIVE_STATE這上字段。
SQL> SELECT ACTIVE_STATE FROM V$INSTANCE;
ACTIVE_ST
---------
NORMAL
ACTIVE_STATE有如下幾個(gè)可能值:
Active_state
描述
Normal
數(shù)據(jù)庫(kù)處于正常狀態(tài)
QUIESCING
DATABASE wants to QUIESCED but waiting for active running transactions to finish.
數(shù)據(jù)庫(kù)要想停頓,但要等待活動(dòng)的運(yùn)行事務(wù)完成。
Quiesced
數(shù)據(jù)庫(kù)處于停頓的狀態(tài)了.
(Q)怎樣確定哪些連接著庫(kù)的會(huì)話在等待停頓著的數(shù)據(jù)庫(kù)呢?
(A)可以用如下的查詢來(lái)確定:
SELECT SID,EVENT,TOTAL_WAITS,TIME_WAITED "TIME WAITED[100 OF SEC]",
AVERAGE_WAIT FROM V$SESSION_EVENT
WHERE EVENT='wait for possible QUIESCE finish'
/
SQL>
SID EVENT TOTAL_WAITS Time Waited[100 of Sec] AVERAGE_WAIT
--- ---------------------------------- ----------- ----------------------- ------------
6 wait for possible QUIESCE finish 412 126532 307
"wait for possible QUIESCE finish"這個(gè)事件表明會(huì)話正等著“正停頓”的數(shù)據(jù)庫(kù)以至于它不能進(jìn)行它的事物。庫(kù)停頓后這些會(huì)話將呈現(xiàn)hung的狀態(tài)。
(Q)在停頓數(shù)據(jù)庫(kù)之前,對(duì)于資源治理器計(jì)劃(resource manager plan) 需要做什么設(shè)定?
(A) 當(dāng)你停頓了數(shù)據(jù)庫(kù),INTERNAL_QUIESCE資源計(jì)劃被激活了。除SYS_GROUPS其它所有的資源組中的ACTIVE_SESS_POOL_P1應(yīng)被設(shè)置為0。因SYS和SYSTEM用戶都屬于SYS_GROUPS組,所以只有它們可以連接到數(shù)據(jù)庫(kù)。
要查看細(xì)節(jié)的信息可以查詢DBA_RSRC_PLAN_DIRECTIVES這個(gè)視圖。
記著如下幾點(diǎn):
處于停頓狀態(tài)的數(shù)據(jù)庫(kù)只有SYS和SYSTEM是有效的用戶來(lái)執(zhí)行維護(hù)的工作;其它有DBA權(quán)限的用戶也被視為一般的用戶。 在停頓的數(shù)據(jù)庫(kù)中備份數(shù)據(jù)文件(泠備,拷貝數(shù)據(jù)文件)是無(wú)效的。假如庫(kù)中有“活動(dòng)”的事務(wù),庫(kù)是不能被停頓的。.
需要啟動(dòng)數(shù)據(jù)庫(kù)以設(shè)置資源計(jì)劃
停頓數(shù)據(jù)是9i的新特征,因此之前的版本中是不能用的。
結(jié)論:
停頓數(shù)據(jù)庫(kù)是一個(gè)強(qiáng)大的特征使DBA不必重啟數(shù)據(jù)庫(kù)就可以執(zhí)行一些非凡的維護(hù)工作。