select * from v$transaction
这样查询出一条未提交的事务,如何把这个事务提交了?
------解决方案--------------------
显式提交、隐式提交及自动提交。下面分别说明这三种类型。
1、显式提交:用COMMIT命令直接完成的提交为显式提交。其格式为:SQL>COMMIT;
2、隐式提交: 用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
3、自动提交:若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON
你这种情况,只有杀掉事务,重新再事务里进行commit提交了
------解决方案--------------------
如果有未提交的事务,v$transaction中是有记录,只是还是不能解决根本问题
试试这个:
select 'blocker('
------解决方案--------------------
wb.holding_session
------解决方案--------------------
':'
------解决方案--------------------
sb.username
------解决方案--------------------
')-sql:'
------解决方案--------------------
qb.sql_text blockers,sb.machine,sb.terminal,
'waiter ('
------解决方案--------------------
wb.waiting_session
------解决方案--------------------
':'
------解决方案--------------------
sw.username
------解决方案--------------------
')-sql:'
------解决方案--------------------
qw.sql_text waiters ,sw.machine,sb.terminal,
wb.LOCK_TYPE, wb.mode_held,wb.mode_requested,wb.lock_id1, wb.lock_id2
from dba_waiters wb,
v$session sb,
v$session sw,
v$sqlarea qb,
v$sqlarea qw
where wb.holding_session=sb.sid
and wb.waiting_session=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and wb.mode_held<>'None';