Ref: http://yangyuncheng1010.blog.163.com/blog/static/1374484152011283753100/
Oracle 10g之前,當我們正在進行大批量資料的插入操作(例如500000條記錄),而導致磁碟空間耗盡的時候,整個操作被終止並且回滾,可能已經處理了大量的資料,只剩下1000條記錄,之前的操作全部回滾,又要消耗非常多的資源
為了避免這種情況,Oracle10g推出了一個新的技術
Resumable space allocation
一個大的操作導致空間耗盡時,讓該操作暫停並且掛起,我們添加新的空間以後,再次恢復該操作
空間耗盡的情況還是挺多的
1、磁碟空間耗盡
2、被操作的表的extents個數達到最大
3、執行操作用戶的quota達到最大
4、能夠被掛起的使用者必須具有resumable系統許可權
SQL> show parameter resumable_timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resumable_timeout integer 0
這個參數表示掛起時間超過設定以後,回滾事務,如果設置為0,表示不啟用掛起,直接回滾。
SQL> alter system set resumable_timeout=10;
系統已更改。
SQL> show parameter resumable_timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resumable_timeout integer 10
測試:
SQL> create user test identified by test;
用戶已創建。
SQL> grant resource,connect,resumable to test;
授權成功。
SQL> alter user test quota 1M on yyc ;
用戶已更改。
SQL> alter system set resumable_timeout=0;
系統已更改。
SQL> show parameter resumable_timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resumable_timeout integer 0
SQL> grant select on dba_users to test;
授權成功。
SQL> conn test/test
已連接。
SQL> create table test tablespace yyc as select * from dba_users;
表已創建。
插入資料:
SQL> insert into test select * from test;
已創建1856行。
SQL> commit;
提交完成。
SQL> insert into test select * from test;
已創建3712行。
SQL> select count(*) from test;
COUNT(*)
----------
7424
SQL> insert into test select * from test;
insert into test select * from test
*
第 1 行出現錯誤:
ORA-01536: 超出表空間 'YYC' 的空間限額
SQL> select count(*) from test;
COUNT(*)
----------
7424
插入不成功的會話直接回滾。
SQL> alter system set resumable_timeout=5;
系統已更改。
SQL> insert into test select * from test;
insert into test select * from test
*
第 1 行出現錯誤:
ORA-30032: 掛起的 (可恢復) 語句已超時
ORA-01536: 超出表空間 'YYC' 的空間限額
提示超時。
設置長時間超時:
SQL> alter system set resumable_timeout=500;
系統已更改。
SQL> insert into test select * from test;
插入資料掛起
修改空間限額:
SQL> alter user test quota 20m on yyc;
用戶已更改。
插入成功:
SQL> insert into test select * from test;
已創建7424行。
SQL> commit;
提交完成。
提示:在掛起時可以查看v$session_wait查看掛起。dba_resumable可以查看到正在掛起的語句。
沒有留言:
張貼留言