You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle DB 12 实时监听全量数据库变更定位软件操作对应更新表列方法问询

针对Oracle数据库操作变更追踪的可行方案

以下两种方案分别适配不同的权限场景,你可以根据实际情况选择:

方案1:使用Oracle原生审计/追踪能力(最准确,无需修改业务软件,需DBA权限)

  • 启用统一审计(Unified Auditing,Oracle 12c及以后版本默认支持)
    你可以使用DBA权限账号执行以下命令,仅针对你软件使用的数据库账号开启DML操作审计:
    -- 创建审计策略,仅审计指定业务账号的增删改操作
    CREATE AUDIT POLICY track_app_dml ACTIONS INSERT, UPDATE, DELETE, MERGE
    WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''<替换为软件连接数据库的用户名>''' EVALUATE PER SESSION;
    -- 启用审计策略
    AUDIT POLICY track_app_dml;
    
    在软件端执行操作后,查询统一审计视图即可拿到所有变更记录,包含操作时间、执行的SQL、关联的表名、操作类型:
    SELECT DBUSERNAME, SQL_TEXT, OBJECT_NAME, ACTION_NAME, EVENT_TIMESTAMP 
    FROM UNIFIED_AUDIT_TRAIL 
    WHERE DBUSERNAME = '<替换为软件连接数据库的用户名>' 
    ORDER BY EVENT_TIMESTAMP DESC;
    
    测试完成后请及时关闭并删除审计策略,避免占用不必要的存储资源:
    NOAUDIT POLICY track_app_dml;
    DROP AUDIT POLICY track_app_dml;
    
  • 如果你需要查看具体字段的变更前后值,可以启用LogMiner分析在线重做日志,能解析到每行记录的字段级变更明细。

方案2:JDBC层面拦截(无需DBA权限,适合开发环境调试)

你使用的21.1.0.0.0版本JDBC驱动完全兼容JDBC 4.2规范,支持SQL执行拦截能力:

  • 直接开启驱动自带的调试日志即可打印所有执行的SQL,在JDBC连接配置中添加以下参数即可:
    oracle.jdbc.Trace=true
    oracle.jdbc.level=FINE
    
  • 如果你可以修改软件的数据源配置,可以使用JDBC代理工具,所有执行的SQL、绑定参数都会被实时输出,你可以直接定位到操作对应的表和字段变更逻辑。

注意:如果在生产环境执行追踪操作,请提前评估审计/日志功能的性能开销,避免影响正常业务运行,测试完成后及时关闭临时开启的配置。

内容的提问来源于stack exchange,提问作者Henry Hargreaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:06:02