Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查Oracle数据库中提交的事务_Java_Oracle_Oracle11g - Fatal编程技术网

Java 检查Oracle数据库中提交的事务

Java 检查Oracle数据库中提交的事务,java,oracle,oracle11g,Java,Oracle,Oracle11g,假设有一个使用ORM方法处理db事务的web框架(如hibernate) 我的问题是,是否有任何SQL可以找出已经在oracle db中执行/提交的所有事务 可能吗?谢谢。我不相信Oracle数据库会自动公开有关已完成事务的数据。有各种各样的表可以查询进行中的事务,但是一旦事务完成,数据库就不再关心它了 您可以做的是创建一个在数据库更新时生效的触发器。触发器调用的过程可以将刚刚完成的操作的一些概要记录到新的数据库表中。然后可以使用普通SQL操作查询该表。当然,您需要不时清理或修剪日志表 这里有一

假设有一个使用ORM方法处理db事务的web框架(如hibernate)

我的问题是,是否有任何SQL可以找出已经在oracle db中执行/提交的所有事务


可能吗?谢谢。

我不相信Oracle数据库会自动公开有关已完成事务的数据。有各种各样的表可以查询进行中的事务,但是一旦事务完成,数据库就不再关心它了

您可以做的是创建一个在数据库更新时生效的触发器。触发器调用的过程可以将刚刚完成的操作的一些概要记录到新的数据库表中。然后可以使用普通SQL操作查询该表。当然,您需要不时清理或修剪日志表

这里有一个创建更新触发器的示例:


您可以使用Redo Logminer获取提交列表和事务中的信息

红色日志文件列表

 SELECT distinct member LOGFILENAME FROM V$LOGFILE where type = 'ONLINE'; 
将这些文件添加到log_miner。然后启动log_miner

declare 
begin  
 for rec in (select distinct member from V$LOGFILE where type = 'ONLINE' ) loop
  DBMS_LOGMNR.ADD_LOGFILE(rec.member); 
 end loop; 
  DBMS_LOGMNR.START_LOGMNR (options => dbms_logmnr.dict_from_online_catalog);
end;
现在您可以开始使用view
v$logmnr\u contents

 select operation,sql_redo, sql_undo,table_name, x.* from  v$logmnr_contents x where username = 'your jdbc user';
最后。关闭采伐机;
执行DBMS_LOGMNR.END_LOGMNR()

查询表格。这是检查交易是否完成的最佳方法。简短的回答是“否”,但这取决于你试图实现的目标。通常事务在调用堆栈的顶部进行管理