注册
表空间上有事务未提交
专栏/冬日暖阳/ 文章详情 /

表空间上有事务未提交

DM_666666 2023/02/21 3207 5 0
摘要 记录一次在某单位某系统的环境中处理创建新的表空间报“表空间上有事务未提交”的错误的问题

在DMMPP和单机数据库环境中创建表空间都报错“表空间上有事务未提交”,语句是:

create tablespace TJV15_12 datafile 'TJV15_12.DBF' SIZE 500 AUTOEXTEND ON;

image.png
怀疑有事务未提交或者有阻塞

select * from v$lock where blocked = 1;
select * from v$trxwait;
select
        tw.*      ,
        ss.clnt_ip,
        ss.SQL_TEXT
from
        v$trxwait tw
JOIN v$sessions ss
on
        tw.wait_for_id = ss.trx_id
ORDER BY
        TW.WAIT_TIME DESC;

均未查出数据。
使用如下sql语句查询:

select * from v$lock where table_id = 0 and trx_id <> 0

发现有数据:
image.png
这个可能是有会话查询系统视图的事务未结束,例如dba_data_files、user_tables、v$tablespace等。
于是就想着关闭这些会话再试试创建语句是否能成功,采用如下sql语句:

select
        'sp_close_session('''
        ||sess_id ''');'
from
        v$sessions
where
        trx_id in
        (
                select trx_id from v$lock where table_id=0 and trx_id<>0
        );

将查询出来的结果拷贝执行,直到这个sql查询不出结果为止。
image.png
在这里还遇到以上操作完成后还是不行的问题,那么接下来就是一个终极操作了,将table_id=0的会话都给关闭:

select
        'sp_close_session('''
        ||sess_id ''');'
from
        v$sessions
where
        trx_id in
        (
                select trx_id from v$lock where table_id=0
        );

将查询出来的结果拷贝执行,直到这个sql查询不出结果为止。这样操作完成后,就能顺利创建表空间了。
当然以上操作可能会影响现有的一些会话,导致正在执行的会话终止当前操作,所以谨慎操作!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服