ITPub博客

首页 > 数据库 > 数据库开发技术 > 事务和表空间只读和离线的一点测试!

事务和表空间只读和离线的一点测试!

原创 数据库开发技术 作者:warehouse 时间:2009-03-17 21:24:14 0 删除 编辑
当表空间中的segment上有事务存在时该表空间在其他session中无法read only。[@more@]

session 1:
SQL> CREATE TABLE T1(ID INT) TABLESPACE TEST;

表已创建。

SQL> INSERT INTO T1 VALUES(1);

已创建 1 行。
session 2:
SQL> alter tablespace test read only;

--上面操作会一直挂在这里(等待)
session 1:
SQL> commit;

提交完成。
--提交完成之后,session 2的read only操作完成如下:
SQL> alter tablespace test read only;

表空间已更改。
session 1:
SQL> INSERT INTO T1 VALUES(2);

已创建 1 行。

SQL> alter tablespace test read only;

表空间已更改。

SQL> select *from t1;

ID
----------
1
2

SQL> rollback;

回退已完成。

SQL> select *from t1;

ID
----------
1
2
同一个session中的操作没有任何问题,而且alter tablespace
test read only操作会自动提交该session中的事务
session 1:
SQL> INSERT INTO T1 VALUES(3);
INSERT INTO T1 VALUES(3)
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件 5
ORA-01110: 数据文件 5: 'E:ORACLEPRODUCT10.2.0ORADATAORCLTEST.DBF'


SQL> alter tablespace test read write;

表空间已更改。

SQL> INSERT INTO T1 VALUES(3);

已创建 1 行。
session 2:
SQL> alter tablespace test offline;

表空间已更改。
--上面操作成功,和read only相比不会等待
session 1:
SQL> select *from t1;
select *from t1
*
第 1 行出现错误:
ORA-00376: 此时无法读取文件 5
ORA-01110: 数据文件 5: 'E:ORACLEPRODUCT10.2.0ORADATAORCLTEST.DBF'
session 2:
SQL> alter tablespace test online;

表空间已更改。
session 1:
SQL> select *from t1;

ID
----------
1
2
3
SQL> rollback;

回退已完成。

SQL> select *from t1;

ID
----------
1
2

SQL>
--事务在表空间offline之后再online回来事务依然存在
,可以继续rollback
session 1:
SQL> INSERT INTO T1 VALUES(3);

已创建 1 行。
session 2:
SQL> alter tablespace test read only;

--上面操作一直会等待(session 2中)
session 1:
查看一下事务发现多了一个事务,比较2个事务的信息
发现唯有recursive的值不一样,也就是说在session 2
中的alter tablespace test read only语句要产生一个
递归的事务,再来看看locl的情况,发现145确实阻塞了一个
session:
SQL> select recursive from v$transaction;

REC
---
NO
YES

SQL> select sid from v$mystat where rownum=1;

SID
----------
145

SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (145,1
53);

SID TY ID1 ID2 LMODE REQUEST BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
153 IS 0 0 4 0 0
153 AT 0 0 6 0 0
153 TT 5 8 6 0 0
153 TX 65538 165 0 4 0
145 TM 11776 0 3 0 0
145 TX 65538 165 6 0 1
153 TX 262188 153 6 0 0

已选择7行。
--再来看看等待事件:
SQL> select sid,event,wait_class from v$session_wait where wait_class<>'Idle';

SID EVENT WAIT_CLASS
---------- -------------------------------------------------- ----------
145 SQL*Net message to client Network
153 enq: TX - contention Other

SQL> rollback;

回退已完成。

SQL>
session 2:
表空间已更改。

SQL> select distinct sid from v$mystat;

SID
----------
153

SQL>

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

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

注册时间:2007-12-07

  • 博文量
    717
  • 访问量
    5366336