我有一个程序,它接受用户并在五个表中更新关于他/她的信息。该过程相当复杂,因为它需要完成许多步骤(页面)。我有日志,sysout和syserr语句,可以帮助我在IDE控制台中查找SQL查询,但它没有所有这些查询。我已经花了很多天时间通过调试来查找其他缺少的查询,但到目前为止还没有运气。我这样做的原因是因为我想自动更新用户信息,所以我不必通过每个页面手动输入用户详细信息。
我想知道我是否可以使用一些技术来显示数据库表的更改,因为我已经知道表名,通过更改我的意思是它是更新还是插入语句以及确切更改的内容(列名和值已插入/更新) 。任何意见是极大的赞赏。我有IBM RAD和DB2数据库。感谢。
答案 0 :(得分:0)
在DB2中,您可以跟踪基本审核信息。
DB2可以跟踪修改的数据,修改数据的人员以及修改数据的SQL操作。
要跟踪数据的修改时间,请将表定义为系统周期时态表。关联历史记录表中的row-begin和row-end列包含有关何时发生数据修改的信息。
要跟踪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;
答案 1 :(得分:0)
使用DB2 Audit工具可以解决在有限数量的表和有限时间内捕获SQL语句的问题 - 据我了解您的问题。
create audit policy tabsql categories execute status both error type normal
audit <tabname> using policy tabsql
您必须在theh数据库中拥有SECADM权限,第二个命令将启动审核过程。你可以用
来阻止它audit <tabname> remove policy
查看
db2audit
命令用于配置路径并将审计文件中的数据提取到分隔文件,然后可以将其再次加载到数据库中。 可以使用提供的sqllib / misc / db2audit.ddl脚本创建必需的表。您将需要查询EXECUTE表以获取SQL详细信息
请注意,审核可以捕获大量数据,因此请务必在获取必要信息后再将其关闭。