Oracle 10g中對resumable session的增強
轉載:http://www.cnblogs.com/minbear/archive/2008/04/22/1165135.html
從9i開始,Oracle提供了一種避免因為space Error而導致事務異常的操作,那就是resumable.通常,DBA在日常工作中,往往忽略了對空間資源上的需求,比如一個大的事務所需要的 temp,undo,data space等等。直到出現了經典的ORA-01652才恍然大悟。
下面回顧一下這個特性。
一、回顧9i中的功能(複習一下好了) 1)許可權設定 首先一個使用者要設定resumable session,必須具有resumable的許可權。 SQL> select * from system_privilege_map where name='RESUMABLE'; PRIVILEGE NAME PROPERTY ---------- ---------------------------------------- ---------- -236 RESUMABLE 0 SQL> SQL> conn study/study 已連線。 SQL> alter session enable resumable; ERROR: ORA-01031: 許可權不足 SQL> SQL> conn /as sysdba 已連線。 SQL> grant resumable to study; 授權成功。 SQL> conn study/study 已連線。 SQL> alter session enable resumable; 會話已更改。 SQL> 當然了,resumable許可權也被包含在其他role裡面,比如dba,當一個使用者擁有dba role時
,就自動擁有了resumable privilege. 2)ENALBE resumable session 在9i中,我們可以通過如下的設定,讓一個session當遇到空間分配不足的時候繼續。 SQL> alter session enable resumable; 3)DISABLE resumable session 和enable 相反 SQL> alter session disable resumable; 4)超時設定 resumable session的預設超時時間為7200秒,也就是2小時。 我們可以通過如下的SQL來調整timeout的時間,比如 SQL> alter session enable resumable timeout 1800; 會話已更改。 SQL> 5)監控 我們可以通過dba_resumable和alert日誌來監控resumable session的狀態。 SQL> alter session enable resumable timeout 10; 會話已更改。 SQL> select user_id,SESSION_ID, STATUS, START_TIME, SUSPEND_TIME, 2 SQL_TEXT, ERROR_NUMBER, ERROR_MSG 3 from dba_resumable; USER_ID SESSION_ID STATUS START_TIME SUSPEND_TIME ---------- ---------- --------- ----------------- -------------- 61 49 NORMAL SQL_TEXT ERROR_NUMBER ERROR_MSG ------------- ------------ ------------- 0 SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; 。。。 SQL> select user_id,SESSION_ID, STATUS, START_TIME, SUSPEND_TIME, 2 SQL_TEXT, ERROR_NUMBER, ERROR_MSG 3 from dba_resumable; USER_ID SESSION_ID STATUS START_TIME SUSPEND_TIME ---------- ---------- --------- -------------------- -------------------- 61 49 SUSPENDED 02/26/07 10:31:20 02/26/07 10:31:20 SQL_TEXT ERROR_NUMBER ------------------------------------------ ------------ create index inx_res_test on res_test 1536 (owner,object_id,object_name) tablespace t ERROR_MSG ---------------------------------------- ORA-01536: 超出表空間 'TEST' 的空間限額 超時以後: SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test * 第 1 行出現錯誤: ORA-30032: 掛起的 (可恢復) 語句已超時 ORA-01536: 超出表空間 'TEST' 的空間限額 SQL> 同時,當resumable session 被掛起時,在alert 日誌檔案中也會有相應的記錄資訊
,如下所示: Mon Feb 26 10:29:37 2007 statement in resumable session 'User STUDY(61), Session 49, Instance 1'
was suspended due to ORA-01536: 超出表空間 'TEST' 的空間限額 6)dbms_reumable包 Oracle也提供了一個dbms_resumable package來設定獲取或異常終止一個
resumable session的操作。 這個包比較簡單。我簡單的示範一下。有興趣的同志,可以參考Oracle的online doc. SQL> alter session enable resumable; 會話已更改。 SQL> exec dbms_resumable.set_session_timeout(49,1800); PL/SQL 過程已成功完成。 SQL> select dbms_resumable.get_session_timeout(49) from dual; DBMS_RESUMABLE.GET_SESSION_TIM ------------------------------ 1800 SQL> SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; ... {因為表空間不足,所以被掛起} 開啟另外一個session,可以取消上面的操作,而不必等到timeout SQL> exec dbms_resumable.abort(49); PL/SQL procedure successfully completed SQL> 在session id 為49的互動介面將得到如下的返回資訊: SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test * 第 1 行出現錯誤: ORA-01013: 使用者請求取消當前的操作 SQL> 二、10g中的增強 在10g中,Oracle一樣支援9i的上述方法,同時做了增強。 1)增加了一個resumable_timeout的引數 該引數可以在system和session level級均可以修改.對RAC db,每個instance可以單獨設定. 而9i中只能在session一級中設定。比如:
SQL> show parameter resumable_timeout; NAME TYPE VALUE ------------------------------------ -------------- ------- resumable_timeout integer 0 SQL> alter system set resumable_timeout=60; 系統已更改。 SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test * 第 1 行出現錯誤: ORA-30032: 掛起的 (可恢復) 語句已超時 ORA-01652: 無法通過 8 (在表空間 TEST 中) 擴充套件 temp 段 SQL> 2)對分散式事務的支援 In 9i, users are not allowed to start a distributed transaction in a resumable enabled session. And if a session has a distributed transaction, users
are not allowed to enable resumable. These restrictions are removed in 10g. However, in a distributed transaction,
if users enable/disable resumable or change resumable_timeout, only the local instances are affected. In a distributed transaction, sessions on remote instances are suspended if resumable has been enabled in the remote instance. 3)增加了一個監控的檢視 在10g中,我們也可以通過DBA_OUTSTANDING_ALERTS 來監控
resumable session.比如: SQL> create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test; create index inx_res_test on res_test(owner,object_id,object_name)
tablespace test * 第 1 行出現錯誤: ORA-30032: 掛起的 (可恢復) 語句已超時 ORA-01652: 無法通過 8 (在表空間 TEST 中) 擴充套件 temp 段 SQL> select object_name,object_type,reason,message_type,message_level 2 from dba_outstanding_alerts 3 where message_group='Space'; OBJECT_NAME OBJECT_TYPE REASON ------------ ------------ ----------------------------------------------- TEST TABLESPACE 對可恢復會話 User STUDY(61),Session 49,Instance 1 (會話 ID 為 49) 的操作被掛起 MESSAGE_TYPE MESSAGE_LEVEL ------------ ------------- Warning 5 SQL> 三、resumable操作在其他utiliy中的使用 在exp/imp,sql*loader工具,同樣也支援resumable操作,本文不再多加介紹, 大家可以參考Oracle online doc獲取更多的資訊。 最後,這個特性還是很有用的。我們可以在臨近下班的時候,開始一個很大的create index的操作,設定2小時的timeout,然後就可以回家吃飯了,如果中間因為space不 足而掛起,我們也可以及時的收到簡訊告警[別的朋友可能有其他的監控],調整後, 讓事務繼續。多爽!啥也不耽誤。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21584437/viewspace-718888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 10g merge命令的增強Oracle 10g
- oracle 10g R2 autotrace 增強Oracle 10g
- Library cache pin/lock 在Oracle 10g的增強Oracle 10g
- 10G DBNEWID工具的增強
- Java 17中對switch的模式匹配增強Java模式
- PostgreSQL 14中連線引數target_session_attrs增強SQLSession
- Percona XtraDb 針對oracle 版mysql 的增強OracleMySql
- oracle 10g 增強審計。表insert 及bind valuesOracle 10g
- Oracle 12c中的轉換功能增強Oracle
- Oracle 12c中增強的PL/SQL功能OracleSQL
- oracle 10g 增強審計(二)----細粒度訪問審計Oracle 10g
- ORACLE中的KILLED SESSIONOracleSession
- ORACLE 10g SYSAUX表空間快速增長之WRH$_ACTIVE_SESSION_HISTORY篇Oracle 10gUXSession
- Oracle中Kill session的研究OracleSession
- Oracle OCP 1Z0 053 Q519(DBMS_RESUMABLE.SET_SESSION_TIMEOUT)OracleSession
- Oracle12c功能增強 新特性之管理功能的增強Oracle
- Oracle中Kill session的研究 for oracle -- 轉OracleSession
- Spring Boot中增強對MongoDB的配置(連線池等)Spring BootMongoDB
- Oracle 11g R1中ASM增強OracleASM
- Java 8 中 CAS 的增強Java
- True Session Wait Activity in Oracle 10g[zt]SessionAIOracle 10g
- Oracle中Kill sessionOracleSession
- Oracle 10g 增刪節點Oracle 10g
- Java 14中對switch的增強,終於可以不寫break了Java
- Oracle中診斷阻塞的sessionOracleSession
- Oracle V$SESSION中的常用列OracleSession
- 處理Oracle Session中的鎖OracleSession
- oracle中session跟process的研究OracleSession
- 大話Oracle中的kill sessionOracleSession
- 等待事件在10G中的加強事件
- VS Code 中的增強 code CLI
- Java8中CAS的增強Java
- Oracle中Kill session [轉]OracleSession
- oracle 10g awr 報告中內容所對應的sqlOracle 10gSQL
- 10G V$SESSIONSession
- 等待事件在10G中的加強(二)事件
- oracle中的processes,session,transaction引數OracleSession
- Oracle 10g RAC中的DRMOracle 10g