如何在 Table (AS400) DB2 for IBM i 上获取 SQL 执行或事务历史记录
How to get SQL executed or transaction history on a Table (AS400) DB2 for IBM i
我的数据库 (AS400-DB2) 有一个问题,在我们的 table 中,所有行都被删除了。我不知道它是用户执行的程序还是SQL。据我所知,它发生在凌晨 +- 凌晨 3 点。当时我确实检查了任何预定的工作。
我们设法从备份中取回了数据,但我想调查删除记录的原因或用户。
物理 table 上的 die as400 上是否有任何日志来检查 SQL 执行了什么以及何时在指定的 table 上执行?这将帮助我确定造成这种情况的原因。
我尝试检查 I systems navigator 但找不到任何日志...有没有办法使用 i system navigator 或绿屏在 table 上获取跨国数据?如果我能得到在时间轴上执行的SQL。
如有任何帮助,我们将不胜感激。
使用 System i 导航器,展开数据库。右键单击您的系统数据库。 Select SQL 计划缓存 -> 显示语句。从这里,您可以根据各种标准进行过滤。
没有提到时间是怎样的inferred\determined,但由于缺乏日志记录,我建议一个好的方法是立即收集有关文件和成员的信息; *SERVICE 和 *FULL 的 DSPOBJD,*ALL 的 DSPFD,DMPOBJ,甚至可能是目录中 TABLE 的行的副本 [包括 SYS[= 的 ALTEREDTS 列的 LAST_ALTERED_TIMESTAMP 32=]S 或基于 QADBXREF 中的字段 DBXATS]。收集这些,几乎只有在任何其他 activity [esp.在任何恢复 activity] 之前,可以帮助确定事件发生的时间,并可能暗示事件是什么;大多数时间戳仅反映对象的最新 activity [而不是作为历史日志],因此任何恢复 activity 都可能会影响任何时间戳的丢失,这些时间戳会反映先前的event\activity.
即使没有文件的日志并且计划缓存中也没有任何内容,也可能 [尽管不太可能] 处于活动状态 SQL 监视器。在 iNav GUI 的某处也应该可以看到一个活动监视器。我不确定在之前的时间范围内可能处于活动状态的监视器的可见性。
同样,尽管缺少日志记录,但可能存在一些系统级对象或用户审计,事件作为命令字符串或作为对 file.member 的操作进行跟踪;结合推断的时间,可以查看之前到之后的所有审计记录。
虽然计划的作业中可能没有任何内容,但历史日志 (DSPLOG) 从那时起可能会显示已结束的作业,或者 [可能很快] 在该时间之前显示已开始的作业,这更有可能已负责。根据我的经验,工作的名称通常可能是指示性的;例如,作业的名称作为文件的名称,可能只是因为请求已从 PDM 提交。可以查看任何假脱机的[或仍然可用的] 作业日志,以便可能参考文件 and\or 成员名称;可能是 CLRPFM 请求的完成消息。
如果操作可能来自某个程序,则该文件可能会被记录为参考对象,这样 DSPPGMREF 的输出可能会显示具有该参考的程序,以及任何 [=29= 的 [服务] 程序] 程序可以使用 PRTSQLINF 显示其嵌入的 SQL 语句;可以审查那些程序的最后使用的可能的匹配项。注意:也可以搜索模块和程序源,但是无法知道它们被编译成什么名称,或者如果只是为了绑定目的而临时创建它们可能绑定了什么。
这不是万无一失,但通常可以节省我一些时间。使用 System i Navigator,右键单击 table 并选择 Index Advisor。如果幸运的话,建议使用一个或多个索引。如果是这样,请按最后建议的日期排序并右键单击具有最新日期的索引和 select 显示语句... 在该对话框中,按日期排序以帮助缩小范围或只是滚动语句以查看找到您感兴趣的那个。右键单击它并 select 使用 SQL 语句然后就可以了。
我的数据库 (AS400-DB2) 有一个问题,在我们的 table 中,所有行都被删除了。我不知道它是用户执行的程序还是SQL。据我所知,它发生在凌晨 +- 凌晨 3 点。当时我确实检查了任何预定的工作。
我们设法从备份中取回了数据,但我想调查删除记录的原因或用户。
物理 table 上的 die as400 上是否有任何日志来检查 SQL 执行了什么以及何时在指定的 table 上执行?这将帮助我确定造成这种情况的原因。
我尝试检查 I systems navigator 但找不到任何日志...有没有办法使用 i system navigator 或绿屏在 table 上获取跨国数据?如果我能得到在时间轴上执行的SQL。
如有任何帮助,我们将不胜感激。
使用 System i 导航器,展开数据库。右键单击您的系统数据库。 Select SQL 计划缓存 -> 显示语句。从这里,您可以根据各种标准进行过滤。
没有提到时间是怎样的inferred\determined,但由于缺乏日志记录,我建议一个好的方法是立即收集有关文件和成员的信息; *SERVICE 和 *FULL 的 DSPOBJD,*ALL 的 DSPFD,DMPOBJ,甚至可能是目录中 TABLE 的行的副本 [包括 SYS[= 的 ALTEREDTS 列的 LAST_ALTERED_TIMESTAMP 32=]S 或基于 QADBXREF 中的字段 DBXATS]。收集这些,几乎只有在任何其他 activity [esp.在任何恢复 activity] 之前,可以帮助确定事件发生的时间,并可能暗示事件是什么;大多数时间戳仅反映对象的最新 activity [而不是作为历史日志],因此任何恢复 activity 都可能会影响任何时间戳的丢失,这些时间戳会反映先前的event\activity.
即使没有文件的日志并且计划缓存中也没有任何内容,也可能 [尽管不太可能] 处于活动状态 SQL 监视器。在 iNav GUI 的某处也应该可以看到一个活动监视器。我不确定在之前的时间范围内可能处于活动状态的监视器的可见性。
同样,尽管缺少日志记录,但可能存在一些系统级对象或用户审计,事件作为命令字符串或作为对 file.member 的操作进行跟踪;结合推断的时间,可以查看之前到之后的所有审计记录。
虽然计划的作业中可能没有任何内容,但历史日志 (DSPLOG) 从那时起可能会显示已结束的作业,或者 [可能很快] 在该时间之前显示已开始的作业,这更有可能已负责。根据我的经验,工作的名称通常可能是指示性的;例如,作业的名称作为文件的名称,可能只是因为请求已从 PDM 提交。可以查看任何假脱机的[或仍然可用的] 作业日志,以便可能参考文件 and\or 成员名称;可能是 CLRPFM 请求的完成消息。
如果操作可能来自某个程序,则该文件可能会被记录为参考对象,这样 DSPPGMREF 的输出可能会显示具有该参考的程序,以及任何 [=29= 的 [服务] 程序] 程序可以使用 PRTSQLINF 显示其嵌入的 SQL 语句;可以审查那些程序的最后使用的可能的匹配项。注意:也可以搜索模块和程序源,但是无法知道它们被编译成什么名称,或者如果只是为了绑定目的而临时创建它们可能绑定了什么。
这不是万无一失,但通常可以节省我一些时间。使用 System i Navigator,右键单击 table 并选择 Index Advisor。如果幸运的话,建议使用一个或多个索引。如果是这样,请按最后建议的日期排序并右键单击具有最新日期的索引和 select 显示语句... 在该对话框中,按日期排序以帮助缩小范围或只是滚动语句以查看找到您感兴趣的那个。右键单击它并 select 使用 SQL 语句然后就可以了。