【问题标题】:How to track changes for certain database tables?如何跟踪某些数据库表的更改?
【发布时间】:2016-06-29 15:15:14
【问题描述】:

我有一个程序可以获取用户并在五个表中更新有关他/她的信息。该过程相当复杂,因为它需要许多步骤(页面)才能完成。我有日志、sysout 和 syserr 语句,可以帮助我在 IDE 控制台中查找 sql 查询,但它没有全部。我已经花了很多天时间通过调试来捕获其他丢失的查询,但到目前为止还没有运气。我这样做的原因是因为我想自动更新用户信息,所以我不必通过每个页面手动输入用户详细信息。

我想知道我是否可以使用一些技术来显示数据库表的更改,因为我已经知道表名,更改是指它是更新还是插入语句以及究竟更改了什么(插入/更新的列名和值) .任何意见是极大的赞赏。我有 IBM RAD 和 DB2 数据库。谢谢。

【问题讨论】:

  • 我的意思是,SQL Trace 会让你接近那个。
  • 什么 DB2 版本/平台?
  • DB2 不支持使用触发器吗?除了大量加载环境(例如 BI)外,触发器将是我选择的工具,以便跟踪 SQL DB 上的更改。
  • @mustaccio 版本 10

标签: sql db2 rad


【解决方案1】:

在 DB2 中,您可以跟踪基本的审计信息。

DB2 可以跟踪修改了哪些数据、谁修改了数据以及修改了数据的 SQL 操作。

要跟踪数据的修改时间,请将您的表定义为系统周期时态表。相关历史记录表中的行开始和行结束列包含有关何时发生数据修改的信息。

要跟踪谁和什么 SQL 修改了数据,您可以使用非确定性生成的表达式列。这些列可以包含有助于审计目的的值,例如修改数据时 CURRENT SQLID 特殊寄存器的值。非确定性生成的表达式列的可能值在 CREATE TABLE 和 ALTER TABLE 语句的语法中定义。

例如

CREATE TABLE TempTable (balance INT, 
              userId VARCHAR(100) GENERATED ALWAYS AS  ( SESSION_USER ) ,  
              opCode CHAR(1) 
                          GENERATED ALWAYS AS ( DATA CHANGE OPERATION )  
              ... SYSTEM PERIOD (SYS_START, SYS_END));

userId 列存储谁修改了数据。此列定义为包含 SESSION_USER 特殊寄存器值的非确定性生成表达式列。

opCode 列存储修改数据的 SQL 操作。该列定义为非确定性生成的表达式列,并存储一个值,该值指示 SQL 操作的类型。

假设您随后使用以下语句为 TempTable 创建历史表并将该历史表与 TempTable 关联:

CREATE TABLE TempTable_HISTORY (balance INT, user_id VARCHAR(128) , op_code CHAR(1) ... );

ALTER TABLE TempTable ADD VERSIONING 
                 USE HISTORY TABLE TempTable_HISTORY     ON DELETE ADD EXTRA ROW;

【讨论】:

    【解决方案2】:

    为有限数量的表和有限的时间捕获 SQL 语句 - 据我了解您的问题 - 可以使用 DB2 审计工具解决。

    create audit policy tabsql categories execute status both error type normal
    
    audit <tabname> using policy tabsql
    

    您必须拥有数据库中的 SECADM 权限,第二个命令将启动审核过程。你可以用

    停止它
    audit <tabname> remove policy
    

    查看

    db2审计

    命令配置路径并将审计文件中的数据提取到一个分隔文件,然后可以再次将其加载到数据库中。 可以使用提供的 sqllib/misc/db2audit.ddl 脚本创建必要的表。您将需要查询 EXECUTE 表以获取您的 SQL 详细信息

    请注意,审核可以捕获大量数据,因此请确保在捕获必要信息后再次将其关闭。

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2023-03-18
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2015-02-27
      • 2011-08-15
      相关资源
      最近更新 更多