一个事务内的sql执行失败 , 事务内的其他sql进行了回滚 , 有什么方式能查询到这个事务内执行的sql
通过 gv$ob_sql_audit. 为查询到该事务内回滚的sql
一个事务内的sql执行失败 , 事务内的其他sql进行了回滚 , 有什么方式能查询到这个事务内执行的sql
通过 gv$ob_sql_audit. 为查询到该事务内回滚的sql
可以通过以下步骤尝试查询事务内执行的 SQL 语句:
首先检查 enable_sql_audit 参数是否已开启,确保 SQL 审计功能启用。
show parameters where name = 'enable_sql_audit';
如果查询结果为 False,则需要将其设置为 True:
alter system set enable_sql_audit = true;
通过 gv$ob_sql_audit 视图查询事务内执行的 SQL 语句。假设已知事务 ID(TX_ID),可以使用以下 SQL 查询:
SELECT usec_to_time(REQUEST_TIME), TRACE_ID, TX_ID, QUERY_SQL FROM gv$ob_sql_audit WHERE TX_ID = '事务ID' ORDER BY REQUEST_TIME;
如果仍然无法找到相关 SQL 语句,可以通过日志进一步排查。使用事务中涉及的 SQL 的 TRACE_ID 在日志文件中搜索相关信息:
grep '[trace id]' observer.log*
如果没有相关日志,可以考虑调整日志级别和日志带宽限制,以便捕获更多日志信息:
alter system set syslog_level='WDIAG';
alter system set syslog_io_bandwidth_limit='2G';
更多信息请查看: