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

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

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

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

需要的权限是resumable.

具体的语法:ALTER SESSION{ ENABLE RESUMABLE [ TIMEOUT integer ] [ NAME string ]| DISABLE RESUMABLE}相关数据字典:USER_RESUMABLE and DBA_RESUMABLE

如果在SQL中不指定NAME,Oracle自动生成的NAME= ‘Userusername(userid), Session sessionid, Instance instanceid’.

-----------------

从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小时。

我们可以通过如下的来调整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级均可以修改.对 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, usersare 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不

足而挂起,我们也可以及时的收到短信告警[别的朋友可能有其他的监控],调整后,

让事务继续。

-------------------------------------------------------------end-----------

resumable oracle,Oracle的Resumable特性相关推荐

  1. oracle 12c dg新特性,oracle 12c:新特性-网格(Grid)基础架构的增强

    oracle 12c:新特性-网格(Grid)基础架构的增强,传统标准集群和Flex集群. Flex 集群 Oracle 12c 在集群安装时支持两类配置:传统标准集群和Flex集群.在一个传统标准集 ...

  2. oracle result_cache_max_size,oracle database 11g新特性之设置result cache-Oracle

    oracle database 11g新特性之设置result  cache oracle database 11g 新特性 之设置 result  cache 如果系统以前没有使用过result c ...

  3. Oracle的闪回特性之恢复truncate删除表的数据

    /* 2008/06/06 *环境:Windows XP +Oracle10.2.0.1 *循序渐进oracle--数据库管理.优化与备份恢复 *循序渐进oracle第8章:Oracle的闪回特性之恢 ...

  4. oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table

    Oracle 12.1新特性----使用RMAN从备份中实现recover table 发布时间:2020-06-26 19:41:44 来源:51CTO 阅读:4750 作者:hbxztc 在Ora ...

  5. 资源放送丨Oracle 20C DataGuard 新特性解读PPT视频

    前段时间,墨天轮分享了云和恩墨高级工程师 章芋文 带来的直播< Oracle 20C DataGuard 新特性解读>,在这里我们共享一下PPT和视频,供大家参考学习. 从Oracle官方 ...

  6. 五月数据库技术通讯丨Oracle 12c因新特性引发异常Library Cache Lock等待

    每月关注:35页数据库技术干货,汇总一个月数据库行业热点事件.新的产品特性,包括重要数据库产品发布.警报.更新.新版本.补丁等. 亲爱的读者朋友: 为了及时共享行业案例,通知共性问题,达成共享和提前预 ...

  7. Oracle 12.2新特性 | 基于权重的节点驱逐

    前言 在Oracle Clusterware需要从集群中逐出特定节点或一组节点的情况时,基于服务器权重的节点驱逐可充当断裂机制,通过服务器上的负载附加信息来识别要驱逐的节点或节点组.其中所有节点被驱逐 ...

  8. Oracle Database 12c 新特性:RAC Cluster Hub Node 和 Leaf Node

    Oracle Database 12c 新特性:RAC Cluster Hub Node 和 Leaf Node 在 Oracle Database 12c 的 Cluster 中引入了很多新特性和新 ...

  9. Oracle Database 12c新特性 In-Database Archiving数据库内归档

    [Oracle Database 12c新特性] In-Database Archiving数据库内归档 Oracle Database 12c中引入了 In-Database Archiving的新 ...

最新文章

  1. python创建虚拟环境sublime_如何设置python 虚拟环境 sublime text
  2. ubuntu流量监控_linux - 实时流量监控
  3. DWZ富客户端框架设计思路与学习建议
  4. 学习 Node.js 的 6 个步骤
  5. css不继承上级样式_CSS基础知识(一)
  6. win10如何删除输入法_顽固输入法exe文件无法删除,一招教你如何删除,原来这么简单...
  7. 高德地图---Poi搜索遇到的坑
  8. rand、randn和randi的区别
  9. 全球智慧能源解决方案服务商「雄韬股份」牵手企企通,谱写采购数字化变革之路
  10. paddleocr训练自己的数据最简单方式软件一键训练
  11. 炎炎夏日 已过 ,博客 从新开始
  12. 【MDS多维尺度分析】
  13. 第十五周作业——ZJM与纸条
  14. java解决数独_Java解决“数独”之三
  15. esmtp 源码 分析
  16. 直播回顾 | 一起来get 电商风控实操知识点
  17. 云渲染是什么?云渲染好处以及安装方法。
  18. CF1485C(整除分块+根号分块)
  19. 二层交换与MAC地址
  20. 2022华为机试真题 C++ 实现【分苹果】

热门文章

  1. 东北大学 | 一种适用于大规模公路环境的鲁棒激光惯性里程计和建图系统
  2. pytorch模型转onnx-量化rknn(bisenet)
  3. oracle基础-基本的查询,以及pl/sql登录
  4. 边缘检测、霍夫变换、重映射、仿射变换、直方图均衡化
  5. R语言-包的安装、载入及使用方法
  6. 关于自注意力机制的思考
  7. Windows下有关NDK的安装资料
  8. python实现网络监控_使用python进行服务器监控
  9. 在线绘图|差异分析——在线做时序分析
  10. “昊论坛”热力来袭!一网打尽【微生物绝对定量】技术特色和应用