如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?

Posted

技术标签:

【中文标题】如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?【英文标题】:How to check the data and time that a table was transacted in IBM Netezza SQL from Aginity workbench? 【发布时间】:2015-01-28 09:25:53 【问题描述】:

我的问题可能很简单,但是我一直在寻找答案。

如何从 Aginity 工作台检查 IBM Netezza SQL 中表的事务数据和时间?

在 MS SQL 服务器中很容易找到这个,但是,我在 Netezza 中找不到。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

一个小修正...如何从 Aginity 工作台检查 IBM Netezza SQL 中最后一次处理表的数据和时间? 您所说的“一张桌子被交易”是什么意思?您说的是表中数据的最后一次更改,表结构本身的最后一次更改,还是其他? 是的,上次更改来自 Aginity 工作台的 IBM Netezza SQL 中的表中的数据。 【参考方案1】:

很遗憾,系统没有在目录元数据中记录上次修改表内容的时间。

但是,如果您启用了查询历史记录,则可以从查询历史记录数据库中挖掘此信息。 $hist_table_access_n 表中的 USAGE 列(其中 n 是您所在的查询历史数据库的版本using) 包含有关对该表执行哪些操作的信息,as documented here。

您可以在 where 子句中使用此列来过滤表更新时的情况,还可以使用 FORMAT_TABLE_ACCESS() 函数以人类可读的格式显示 USAGE 信息,as documented here。

这是一个示例,我们在给定表上查找插入、更新、删除和截断。在我的例子中,我的历史数据库称为 HISTDB,历史数据收集在 HISTUSER 模式中。

SELECT FORMAT_TABLE_ACCESS(usage),
   submittime
FROM histdb.histuser."$hist_table_access_3" a
   JOIN histdb.HISTUSER."$hist_query_prolog_3" b
   ON a.NPSID          = b.NPSID
   AND a.NPSINSTANCEID = b.NPSINSTANCEID
   AND a.OPID          = b.OPID
   JOIN histdb.HISTUSER."$hist_query_epilog_3" c
   ON a.NPSID                   = c.NPSID
   AND a.NPSINSTANCEID          = c.NPSINSTANCEID
   AND a.OPID                   = c.OPID
WHERE a.DBNAME                  = 'TESTDB'
AND a.SCHEMANAME                = 'ADMIN'
AND a.TABLENAME                 = 'HIST_TEST'
AND c.STATUS                    = 0
AND a.USAGE & (2 + 4 + 8 + 16) <> 0 ;

 FORMAT_TABLE_ACCESS |         SUBMITTIME
---------------------+----------------------------
 ins                 | 2015-01-21 19:00:10.448681
 del                 | 2015-01-21 19:00:30.094608
 upd                 | 2015-01-21 19:00:49.148814
 ins                 | 2015-01-21 19:00:01.106845
(4 rows)

SELECT MAX(submittime)
FROM histdb.histuser."$hist_table_access_3" a
   JOIN histdb.HISTUSER."$hist_query_prolog_3" b
   ON a.NPSID          = b.NPSID
   AND a.NPSINSTANCEID = b.NPSINSTANCEID
   AND a.OPID          = b.OPID
   JOIN histdb.HISTUSER."$hist_query_epilog_3" c
   ON a.NPSID                   = c.NPSID
   AND a.NPSINSTANCEID          = c.NPSINSTANCEID
   AND a.OPID                   = c.OPID
WHERE a.DBNAME                  = 'TESTDB'
AND a.SCHEMANAME                = 'ADMIN'
AND a.TABLENAME                 = 'HIST_TEST'
AND c.STATUS                    = 0
AND a.USAGE & (2 + 4 + 8 + 16) <> 0 ;

            MAX
----------------------------
 2015-01-21 19:00:49.148814
(1 row)

请注意,这仅适用于已加载到查询历史数据库中的数据,因此根据系统的活动和配置,结果不会是实时的。另请注意,如果您要定期执行此操作,并且如果性能存在问题,您可能需要更改 where 子句以过滤对象 ID 而不是文本值。

【讨论】:

这看起来不错,是否可以加入它们,这样我就可以获得哪个表被哪个程序修改过的历史记录?

以上是关于如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?的主要内容,如果未能解决你的问题,请参考以下文章

在 IBM netezza aginity sql 数据库工作台中导出大表时如何添加列名

无法从 C# VS2013 访问 IBM Netezza 服务器,但在 IBM Aginity 工作台中运行良好

将 47G 数据文件从 Aginity 工作台导入 IBM netezza 数据库时出错

将 SQL 数据库从一台服务器复制到 IBM netezza Aginity 工作台上的另一台服务器

在 IBM netezza aginity 工作台中更改表名的错误

Win7 上 Aginity 工作台对 IBM netezza SQL 数据库的 SQL 查询错误