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

当表空间中的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博客 ” ,链接:http://blog.itpub.net/19602/viewspace-1018905/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/19602/viewspace-1018905/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值