llnnmc的个人空间

刘鲁宁的学习心得

  • 博客访问: 19537
  • 博文数量: 67
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-29 10:03
  • 认证徽章:
个人简介

上海因致信息科技有限公司

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(67)

文章存档

2018年(13)

2017年(53)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

Oracle可恢复空间分配技术 2018-01-22 23:44:45

分类: Oracle

许多操作因为空间不够而失败,如果启用了可恢复空间分配,当操作遇到空间问题而不是因为错误而失败时,操作将暂停,显示为会话挂起。当错误得到解决时,它将继续。所有挂起的会话(当前挂起的和之前挂起但现在再次运行的)列在视图dba_resumable中。会话关闭后,视图中的记录将消除。

 

要在会话级别启用可恢复空间分配,命令如下:

alter session enable resumable [timeout <seconds>] [name <opname>];

timeout选项指定语句将挂起多长时间。如果到达这个时间,但问题没有解决,语句失败,返回错误。如果没有指定timeout,会话将无限期挂起。name选项指定在视图dba_resumable中显示的名称,帮助确定在多语句进程的哪个点出现空间问题。

 

执行该命令需要授予会话用户相应的权限:

grant resumable to <username>;

 

也可以通过设置实例参数resumable_timeout为所有会话启用可恢复空间。这是一个动态参数,如要设置一分钟的超时:

alter system set resumable_timeout=60;

这将导致所有会话在遇到空间问题时挂起一分钟。

 

Data Pump实用程序expdpimpdp有一个命令行开关resumable=y(默认为n),允许Data Pump作业如果遇到空间问题就挂起。

 

当会话挂起时,它将保持对使用的所有资源的控制,包括撤销空间、临时空间、PGA内存和记录锁定。

 

在遇到问题时,可以通过另一个会话交互式的进行修复。或者可以创建一个在会话挂起时将运行的after suspend on database触发器。这个触发器可以报告问题,如通过电子邮件,或包括检查并自动修复问题的代码,这就意味着可以在一些操作如插入数据导致表空间容量不够时,通过触发器程序确认后自动给表空间分配容量。

 

以下实验测试可恢复空间分配功能的使用:

 

1、创建表空间和表

create tablespace test datafile 'd:\oradata\mes\test01.dbf' size 2m;

create table scott.t1(c1 char(1000)) tablespace test;

 

2、授予会话可恢复空间分配的权限

grant resumable to scott;

 

3、在会话级别设定可恢复空间分配

conn scott/tiger

alter session enable resumable name 't1_insert';

 

4、向表中插入数据,因空间不足会话将被挂起

begin

  for i in 1 .. 2000 loop

    insert into scott.t1 values ('a row');

  end loop;

  commit;

end;

/

 

5、查看因空间分配问题挂起的会话

col name for a10

col sql_text for a30

col error_parameter1 for a10

col error_parameter2 for a10

col error_parameter3 for a10

col error_parameter4 for a10

col error_parameter5 for a10

col error_msg for a30

select user_id,

       session_id,

       instance_id,

       status,

       timeout,

       start_time,

       suspend_time,

       resume_time,

       name,

       sql_text,

       error_number,

       error_parameter1,

       error_parameter2,

       error_parameter3,

       error_parameter4,

       error_parameter5,

       error_msg

  from dba_resumable;

 

   USER_ID SESSION_ID INSTANCE_ID STATUS       TIMEOUT START_TIME           SUSPEND_TIME         RESUME_TIME          NAME       SQL_TEXT                       ERROR_NUMBER ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_MSG

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

        84         74           1 SUSPENDED       7200 01/25/18 09:42:18    01/25/18 09:42:18                         t1_insert  INSERT INTO SCOTT.T1 VALUES ('         1653 SCOTT      T1         128        TEST                  ORA-01653: 表 SCOTT.T1 无法通过 128

                                                                                                                                 a row')                                                                                             (在表空间 TEST 中) 扩展

 

6、修复问题,会话将继续执行

alter database datafile 'd:\oradata\mes\test01.dbf' resize 4m;

 

7、再次查看因空间分配问题挂起的会话,显示会话已经恢复

select user_id,

       session_id,

       instance_id,

       status,

       timeout,

       start_time,

       suspend_time,

       resume_time,

       name,

       sql_text,

       error_number,

       error_parameter1,

       error_parameter2,

       error_parameter3,

       error_parameter4,

       error_parameter5,

       error_msg

  from dba_resumable;

 

   USER_ID SESSION_ID INSTANCE_ID STATUS       TIMEOUT START_TIME           SUSPEND_TIME         RESUME_TIME          NAME       SQL_TEXT                       ERROR_NUMBER ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_MSG

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

        84         74           1 NORMAL          7200                                           01/25/18 10:00:39    t1_insert                                            0                                                       

 

8、删除表并清理表空间

drop table scott.t1;

drop tablespace test including contents and datafiles;

阅读(79) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册