ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 空间RESUMABLE操作(一)

空间RESUMABLE操作(一)

原创 Linux操作系统 作者:yangtingkun 时间:2009-06-15 23:56:28 0 删除 编辑

Oracle9i开始引入这个功能,当出现空间不足等相关的错误时,Oracle可以不是马上返回错误信息,并回滚当前的操作,而是将操作挂起,直到挂起时间超过RESUMABLE TIMEOUT,或者空间不足的错误被解决。

这一篇简单介绍空间RESUMABLE的例子。

 

 

第一次碰到这个特性是在一次安装9i数据库的过程中,在利用DBCA工具建立数据库的时候,由于一个辅助表空间设置的数据文件比较小,导致表空间不足的问题产生,由于DBCA启用了这个特性,使得DBCA的建库进程在一个地方停留了很久(大概半个小时以上),这时才意识到安装过程碰到了以前没有遇到的问题。

由于此时数据库的数据字典已经完全生成,因此通过sqlplus登陆到数据库,进行系统状态,以及安装进程的等待信息,才发现数据库建库操作进入SUSPEND状态,找到问题后,将目标表空间的数据文件加大,于是DBCA得以进行运行,并最终完成了建库操作。

由于9i启用了这个特性,使得当时的建库操作没有因为空间不足而中途中止,因此当时对这个特性印象比较深。使用这个特性,可以使得一个长时间运行的数据库操作,不至于因为空间相关的错误而回滚,给了用户解决问题,并继续处理的能力。

9i中,RESUMABLE只能在会话级设置,而在10g中,Oracle新增了RESUMABLE_TIMEOUT初始化参数,使得RESUMABLE特性可以在数据库的实例级上进行设置。

SQL> SELECT * FROM V$VERSION;

BANNER
------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for 32-bit Windows: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

SQL> CREATE USER U_RESUMABLE IDENTIFIED BY U_RESUMABLE;

用户已创建。

SQL> GRANT CONNECT TO U_RESUMABLE;

授权成功。

SQL> ALTER USER U_RESUMABLE QUOTA 1M ON USERS;

用户已更改。

SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92
已连接。
SQL> SET TIMING ON
SQL> CREATE TABLE T (ID NUMBER)
  2  STORAGE (INITIAL 1M)
  3  TABLESPACE USERS;

表已创建。

已用时间:  00: 00: 00.12
SQL> DROP TABLE T;

表已删除。

已用时间:  00: 00: 01.12
SQL> CREATE TABLE T (ID NUMBER)
  2  STORAGE (INITIAL 2M)
  3  TABLESPACE USERS;
CREATE TABLE T (ID NUMBER)
*
1 行出现错误:
ORA-01536:
超出表空间'USERS'的空间限量


已用时间:  00: 00: 00.10

正常情况下,如果用户创建对象超过用户的QUOTA,则马上会返回错误信息,如果使用了RESUMABLE

SQL> CONN YANGTK/YANGTK@YTK92
已连接。
SQL> GRANT ALTER SESSION TO U_RESUMABLE;

授权成功。

已用时间:  00: 00: 00.01
SQL> GRANT RESUMABLE TO U_RESUMABLE;

授权成功。

已用时间:  00: 00: 00.03
SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92
已连接。
SQL> ALTER SESSION ENABLE RESUMABLE TIMEOUT 60;

会话已更改。

已用时间:  00: 00: 00.01
SQL> CREATE TABLE T (ID NUMBER)
  2  STORAGE (INITIAL 2M)
  3  TABLESPACE USERS;
CREATE TABLE T (ID NUMBER)
*
1 行出现错误:
ORA-30032:
挂起的 (可恢复) 语句已超时
ORA-01536:
超出表空间'USERS'的空间限量


已用时间:  00: 01: 01.81

可以看到,由于设置了会话的挂起超时为60秒,刚才运行0.1秒就会报错的建表语句,这次挂起了1分钟后在报错。

再次执行这个操作:

SQL> CREATE TABLE T (ID NUMBER)
  2  STORAGE (INITIAL 2M)
  3  TABLESPACE USERS;

会话被挂起,并在1分钟内在另外的会话中,加大当前用户的QUOTA

SQL> CONN YANGTK/YANGTK@YTK92
已连接。
SQL> ALTER USER U_RESUMABLE QUOTA 5M ON USERS;

用户已更改。

这时挂起的会话会自动继续运行:


表已创建。

已用时间:  00: 00: 26.81
SQL>

合理的利用这个特性,可以避免很多由于空间不足引发的重复性工作。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-606446/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10405526