在DMMPP和单机数据库环境中创建表空间都报错“表空间上有事务未提交”,语句是:
create tablespace TJV15_12 datafile 'TJV15_12.DBF' SIZE 500 AUTOEXTEND ON;
怀疑有事务未提交或者有阻塞
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
发现有数据:
这个可能是有会话查询系统视图的事务未结束,例如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查询不出结果为止。
在这里还遇到以上操作完成后还是不行的问题,那么接下来就是一个终极操作了,将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查询不出结果为止。这样操作完成后,就能顺利创建表空间了。
当然以上操作可能会影响现有的一些会话,导致正在执行的会话终止当前操作,所以谨慎操作!
文章
阅读量
获赞