ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 无法alter tablespace $ts read only原因

Oracle 无法alter tablespace $ts read only原因

原创 Linux操作系统 作者:yefeng139 时间:2011-10-14 14:57:39 0 删除 编辑

在数据库迁移脚本中, alter tablespace $ts read only;这句可能会僵死,原因是之前有sql语句的事务阻塞了导致的,可以通过下面的方法来查询:

1、执行sql:
SELECT SQL_TEXT, SADDR
FROM V$SQLAREA,V$SESSION
WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS
AND SQL_TEXT LIKE 'alter tablespace%';

这句sql是查出alter tablespace这句sql的地址号,结果如下,红色为地址号

SQL_TEXT                                 SADDR

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

alter tablespace tbs_tts1 read only      0000040634C0D8B8

 

2、执行 sql:

SELECT SES_ADDR, START_SCNB

FROM V$TRANSACTION

ORDER BY START_SCNB;

这句sql是查询阻塞的事务,并按先后顺序排列,结果如下,红色为alter tablespace的事务号,在它的上面有个事务被阻塞了,因此它要等待,之前的事务号是:2976616884,sql地址是0000040634C254F8

SES_ADDR         START_SCNB
---------------- ----------
0000040634C254F8 2976616884    --> Waiting on this transaction
0000040634C0D8B8 2980274305    --> alter tablespace read only
0000040634C53858 2980283454

3、  执行sql:

SELECT T.SES_ADDR, S.USERNAME, S.MACHINE

FROM V$SESSION S,  V$TRANSACTION T

WHERE T.SES_ADDR = S.SADDR

ORDER BY T.SES_ADDR

此sql语句查出是哪个用户以及哪个机器导致了事物被阻塞了,结果如下,可以看到0000040634C254F8是用户RT_ADMIN导致的,他的机器名是isdweb1

SES_ADDR          USERNAME              MACHINE
----------------  --------------------  ------------------
0000040634C254F8  RT_ADMIN              isdweb1
4、知道事务的ses_addr号后就可以查询它的所有东西了,如它的sql语句是多少,session号是多少等都可以查出来,这样就能定位出导致数据库僵死的原因了。

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

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

注册时间:2011-09-05

  • 博文量
    8
  • 访问量
    31408