首页 » ORACLE » ORACLE resumable session功能

ORACLE resumable session功能

从9i开始,Oracle提供了一种避免因为space Error而导致事务异常的操作,那就是resumable.通常,DBA在日常工作中,往往忽略了对空间资源上的需求,比如一个大的事务所需要的 temp,undo,data space等等。直到出现了经典的ORA-01652才恍然大悟,10G版本又对它做了增强,下面做个实验

SQL> create tablespace smailtbs datafile ‘/u01/app/oracle/oradata/ORCL/datafile/smailtbs.dbf’ size 2m;

Tablespace created.

SQL> conn system/oracle
Connected.
SQL> create table anbob.testobj
2  as select * from dba_objects;

Table created.

SQL> conn anbob/anbob
Connected.

SQL> select bytes/1024/1024 from user_segments where segment_name=’TESTOBJ’
2  ;

BYTES/1024/1024
—————
6

SQL> create table tt tablespace smailtbs
2  as
3  select * from testobj;
select * from testobj
*
ERROR at line 3:
ORA-01652: unable to extend temp segment by 128 in tablespace SMAILTBS

SQL> conn system/oracle
Connected.
SQL> grant resumable to anbob
2  ;

Grant succeeded.

SQL> conn anbob/anbob
Connected.
SQL> alter session enable resumalb;
alter session enable resumalb
*
ERROR at line 1:
ORA-00922: missing or invalid option

SQL> alter session enable resumable;

Session altered.

SQL> create table tt tablespace smailtbs
2  as
3  select * from testobj;

挂起…..

打开另一个session anbob监控

SQL>  select session_id,status,start_time,suspend_time,sql_text,error_number,error_msg
2* from user_resumable

SESSION_ID STATUS             START_TIME                               SUSPEND_TIME
———- —————— —————————————- —————————————-
SQL_TEXT                                                                         ERROR_NUMBER
——————————————————————————– ————
ERROR_MSG
——————————————————————————————————————————————————
153 SUSPENDED          05/03/11 18:13:50                        05/03/11 18:13:51
create table tt tablespace smailtbs as select * from testobj                             1652
ORA-01652: unable to extend temp segment by 128 in tablespace SMAILTBS

SQL> conn system/oracle
Connected.

SQL> alter database datafile  ‘/u01/app/oracle/oradata/ORCL/datafile/smailtbs.dbf’ resize 20m;

Database altered.

修改后发现第一个session的事务建表成功!

当我们在建立一个大表,或往表里面插入大量数据时,如果中途因为表空间剩余空间不足并且没有开启自动扩展的话,会报 OUT-OF-SPACE错误,如果等了两个小时换来这个错误,是非常痛苦的事情

这种情况往往出现在我们还无法预估将要插入的数据量时,除了个一个极大的表空间或自动扩展来解决之外。

Oracle还为我们提供了一个很好的功能:resumable

在resumable开启的情况下,如果Oracle执行某一个SQL申请不到空间了,会停顿下来(时间可以由TIMEOUT来控制),但是不会报OUT-OF-SPACE这个错误。等你把空间的问题解决了,Oracle会继续从停下来的部分开始刚才的SQL。

打赏

目前这篇文章有1条评论(Rss)评论关闭。

  1. Shauna Gilkerson | #1
    2011-12-21 at 03:22

    Good write-up, I’m normal visitor of one’s web site, maintain up the excellent operate, and It is going to be a regular visitor for a lengthy time.