Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何跟踪某些数据库表的更改?_Sql_Db2_Rad - Fatal编程技术网

Sql 如何跟踪某些数据库表的更改?

Sql 如何跟踪某些数据库表的更改?,sql,db2,rad,Sql,Db2,Rad,我有一个程序,可以在五个表中获取用户并更新他/她的信息。这个过程相当复杂,因为它需要许多步骤(页面)才能完成。我有日志、sysout和syserr语句,它们可以帮助我在IDE控制台中查找sql查询,但它并没有所有这些语句。我已经花了很多天的时间通过调试来捕获其他丢失的查询,但到目前为止运气不好。我之所以这样做,是因为我想自动更新用户信息,这样我就不必在每个页面上手动输入用户详细信息 我想知道我是否可以使用一些技术来显示数据库表的更改,因为我已经知道了表名,我所说的更改是指是update还是ins

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


我想知道我是否可以使用一些技术来显示数据库表的更改,因为我已经知道了表名,我所说的更改是指是update还是insert语句,以及具体更改了什么(插入/更新的列名和值)。非常感谢您的建议。我有IBMRAD和DB2数据库。谢谢。

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

DB2可以跟踪修改了什么数据、谁修改了数据以及修改数据的SQL操作

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

要跟踪SQL修改数据的人和内容,可以使用非确定性生成的表达式列。这些列可以包含有助于审计目的的值,例如修改数据时当前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 special register的值

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

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

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;

在有限数量的表和有限的时间内捕获SQL语句——据我所知,您的问题——可以通过DB2审计工具解决

create audit policy tabsql categories execute status both error type normal

audit <tabname> using policy tabsql
创建审核策略选项卡SQL类别执行状态两种错误类型正常
使用策略tabsql进行审计
您必须在h数据库中拥有SECADM权限,第二个命令将启动审核过程。你可以用这个来阻止它

audit <tabname> remove policy
审核删除策略
查看

db2audit

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


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

我的意思是,SQL跟踪可以让您接近这一点。什么DB2版本/平台?DB2不支持使用触发器吗?除了大量加载环境(如BI)外,触发器将是我跟踪SQL DB上更改的首选工具。@mustaccio版本10