我非常确定Oracle不会为每个会话保留所有过去查询(封闭游标)的数据.我可以想到几种方法来获取这些数据:
如果您正在使用PL/SQL,那么过去的大多数游标将保留在会话缓存中(直到cursor_sharing初始化参数).您可以查询视图v$open_cursor:
SELECT * FROM v$open_cursor WHERE sid=to_number(sys_context('USERENV','SID'))
Run Code Online (Sandbox Code Playgroud)
将此视图加入v$sqltext(或v$sqltext_with_newlines)以获取完整的sql文本:
SELECT o.saddr, s.address, o.hash_value, s.piece, s.sql_text
FROM v$open_cursor o
JOIN v$sqltext_with_newlines s ON o.address = s.address
AND o.hash_value = s.hash_value
WHERE sid = to_number(sys_context('USERENV', 'SID'))
ORDER BY o.saddr, s.address, o.hash_value, s.piece;
Run Code Online (Sandbox Code Playgroud)您可以跟踪会话,在会话终止后打开生成的跟踪文件将显示所有SQL(此外,您可以tkprof跟踪文件以获取摘要和统计信息).