Oracle 10g中對resumable session的增強

來源:互聯網
上載者:User

從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                                         0SQL>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_MSG3  from dba_resumable;USER_ID  SESSION_ID STATUS    START_TIME        SUSPEND_TIME---------- ---------- --------- ----------------- --------------61         49 NORMALSQL_TEXT      ERROR_NUMBER ERROR_MSG------------- ------------ -------------0SQL>  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_MSG3  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:20SQL_TEXT                                   ERROR_NUMBER------------------------------------------ ------------create index inx_res_test on res_test      1536(owner,object_id,object_name) tablespace tERROR_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 2007statement 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------------------------------1800SQL>SQL> create index inx_res_test on res_test(owner,object_id,object_name)
   tablespace test;...{因為資料表空間不足,所以被掛起}開啟另外一個session,可以取消上面的操作,而不必等到timeoutSQL> exec dbms_resumable.abort(49);PL/SQL procedure successfully completedSQL>在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        0SQL> 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 resumableenabled 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 localinstances are affected. In a distributed transaction, sessions on remoteinstances 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_level2  from dba_outstanding_alerts3  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      5SQL>三、resumable操作在其他utiliy中的使用在exp/imp,sql*loader工具,同樣也支援resumable操作,本文不再多加介紹,大家可以參考Oracle online doc擷取更多的資訊。最後,這個特性還是很有用的。我們可以在臨近下班的時候,開始一個很大的createindex的操作,設定2小時的timeout,然後就可以回家吃飯了,如果中間因為space不足而掛起,我們也可以及時的收到簡訊警示[別的朋友可能有其他的監控],調整後,讓事務繼續。多爽!啥也不耽誤
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.