日期:2014-05-16  浏览次数:20885 次

提交未提交的事务问题
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提交了
------解决方案--------------------
引用:
select * from v$transaction
这样查询出一条未提交的事务,如何把这个事务提交了?

如果有未提交的事务,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';