2017-08-25 56 views
2

假設存在有使用ORM方法來處理數據庫事務處理的Web框架(如Hibernate)從Oracle數據庫檢查提交的事務

我的問題是存在的,可以發現,已經執行的所有交易的所有SQL /在oracle數據庫中提交?

可能嗎?謝謝。

+0

查詢表格。這是檢查交易是否已完成的最佳方法。 – XING

+0

簡短的回答是「不」,但它取決於你想要達到的目標。通常,事務在調用堆棧頂部進行管理 – APC

回答

1

我不相信Oracle數據庫會自動公開有關已完成事務的數據。有許多表可以查詢正在進行的事務,但是一旦事務完成,數據庫就不再關心它了。

你可以做的是創建一個觸發器,它對數據庫更新生效。由觸發器調用的過程可以登錄到一個新的數據庫表的一些剛剛完成的操作大綱。然後您可以使用普通的SQL操作來查詢該表。當然,您需要不時清除或修剪日誌表。

這裏有創建更新觸發器的例子:

log insertions/updates/deletions in oracle database

1

您可以使用重做的LogMiner獲得承諾和信息什麼在事務中所做的列表。

的red_log文件

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; 

就可以開始使用視圖v$logmnr_contents

select operation,sql_redo, sql_undo,table_name, x.* from v$logmnr_contents x where username = 'your jdbc user'; 

末。關閉日誌挖掘機; execute DBMS_LOGMNR.END_LOGMNR();