如何从 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 工作台上的另一台服务器