ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 9I里 resumable 的用法

9I里 resumable 的用法

原创 Linux操作系统 作者:ZALBB 时间:2019-05-14 10:24:06 0 删除 编辑

9I数据库中,若对会话作了 enable resumable 设置后,当出现空间不足的问题时,挂起
整个操作以等待操作人员解决空间问题。


环境: windwos 2000 server sp4, oracle 9207

SQL> connect / as sysdba
已连接。
SQL> create tablespace block datafile 'H:oradataMARKETblock01.dbf' size 1m;

表空间已创建。

SQL> grant resumable to scott;

授权成功。

SQL> connect scott/1
已连接。
SQL> select * from user_ts_quotas;

TABLESPACE_NAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS
------------------------------ ---------- ---------- ---------- ----------
USERS 1376256 -1 168 -1
SYSTEM 0 0 0 0
NNC_LOB 0 0 0 0
BLOCK 0 -1 0 -1

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
CREATE TABLE
SELECT ANY TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER

PRIVILEGE
----------------------------------------
RESUMABLE

已选择12行。

SQL> create table block (name varchar2(2000))tablespace block;

表已创建。

SQL> alter table block modify name char(2000);

表已更改。

SQL> insert into block (name) select 'asdfsafsdfwefwedfsadasdasdasdadsad' from dual;

已创建 1 行。

SQL> commit;

提交完成。

SQL> insert into block select * from block;

已创建 1 行。

SQL> insert into block select * from block;

已创建2行。

SQL> insert into block select * from block;

已创建4行。

SQL> insert into block select * from block;

已创建8行。

SQL> insert into block select * from block;

已创建16行。

SQL> insert into block select * from block;

已创建32行。

SQL> insert into block select * from block;

已创建64行。

SQL> insert into block select * from block;

已创建128行。

SQL> insert into block select * from block;
insert into block select * from block
*
ERROR 位于第 1 行:
ORA-01653: 表SCOTT.BLOCK无法通过8(在表空间BLOCK中)扩展


SQL> rollback;

回退已完成。

SQL> alter session enable resumable timeout 60;

会话已更改。

SQL> insert into block select * from block;

已创建 1 行。

SQL> insert into block select * from block;

已创建2行。

SQL> insert into block select * from block;

已创建4行。

SQL> insert into block select * from block;

已创建8行。

SQL> insert into block select * from block;

已创建16行。

SQL> insert into block select * from block;

已创建32行。

SQL> insert into block select * from block;

已创建64行。

SQL> insert into block select * from block;

已创建128行。

SQL> insert into block select * from block;
insert into block select * from block
*
ERROR 位于第 1 行:
ORA-30032: 挂起的 (可恢复) 语句已超时
ORA-01653: 表SCOTT.BLOCK无法通过8(在表空间BLOCK中)扩展


此时在另外一个窗口查询该session 的等待事件
SQL> connect / as sysdba
已连接。
SQL> select sid from v$session where username='SCOTT';

SID
----------
11

SQL> select * from v$session_wait where sid=11;

SID SEQ# EVENT P1TEXT P1 P1RAW P2TEXT P2 P2RAW P3TEXT P3 P3RAW WAIT_TIME SECONDS_IN_WAIT STATE
---------- ---------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------- -------- ---------------------------------------------------------------- ---------- -------- ---------------------------------------------------------------- ---------- -------- ---------- --------------- -------------------
11 175 statement suspended, wait error to be cleared 0 00 0 00 0 00 0 1 WAITING


SQL>

从警告日志中可以看出其悬挂的时间: Fri Jul 29 10:18:10 2005 - Fri Jul 29 10:17:08 2005
Fri Jul 29 10:17:08 2005
statement in resumable session 'User SCOTT(102), Session 11, Instance 1' was suspended due to
ORA-01653: 表SCOTT.BLOCK无法通过8(在表空间BLOCK中)扩展
Fri Jul 29 10:17:08 2005
ARC1: Media recovery disabled
Fri Jul 29 10:18:08 2005
ARC1: Media recovery disabled
Fri Jul 29 10:18:10 2005
statement in resumable session 'User SCOTT(102), Session 11, Instance 1' was timed out

可以通过查看视图dba_resumable/user_resumable来获取suspended 会话.

再试
SQL> insert into block select * from block;
此时,该窗口悬挂,没反应.


再来到另外一个窗口
SQL> connect / as sysdba
已连接。
扩展该文件的尺寸.
SQL> alter database datafile 'H:ORADATAMARKETBLOCK01.DBF' resize 10m;

数据库已更改。


再回到原来的窗口,已经
SQL> insert into block select * from block;

已创建256行。

总结: 当在会话里打开这个功能后(运行 alter session enable resumable timeout 秒,
默认7200).当运行某些sql导致空间不足(表空间用完了)、或已抵达该表/段的 maxextents,
或者 该用户使用此表空间的配额已经用完(原话:Out of space condition, Maximum extents
reached condition, Space quota exceeded condition.),此时Oracle将不会报错,而是把
语句挂起,让 dba 在 timeout 所指定的时间范围内解决问题,之后语句又可以继续运行。

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

请登录后发表评论 登录
全部评论

注册时间:2018-08-15

  • 博文量
    46
  • 访问量
    34494