有没有办法找到在特定时间更新特定字段的SQL?

时间:2013-04-30 11:51:45

标签: teradata

假设我知道特定数据库记录何时更新。我知道某个地方存在所有执行的SQL的历史记录,可能只有DBA才能访问。如果我可以访问此历史记录,我可以从中查询查询文本为LIKE '%fieldname%'的位置。虽然这几乎可以提取包含我正在寻找的字段名称的任何事务查询,但这是一个很好的开始,特别是如果我可以将记录集过滤到特定的日期/时间范围。

我发现了dbc.DBQLogTbl视图,但它似乎没有像我期望的那样工作。还有其他视图包含我要查找的信息吗?

1 个答案:

答案 0 :(得分:5)

这取决于DBA启用的数据库查询日志记录(DBQL)的级别。 某些DBA可能会选择不提供战术查询的详细信息,因此最好咨询您的DBA团队以了解正在捕获的内容。您还可以查询DBC.DBQLRules以确定已启用的日志记录级别。

以下数据字典对象对您的问题特别感兴趣:

  • DBC.QryLog 包含有关用户,会话,应用程序,语句类型,CPU,IO以及与特定查询关联的其他字段的查询的详细信息。
  • DBC.QryLogSQL 包含SQL语句。如果SQL语句超过某个长度,则会将其拆分为多个行,该行由此表中的列表示。如果将此参数连接到主查询日志表,则必须注意查询日志表中的聚合和度量标准。虽然更常见的是,如果您将查询日志表加入SQL表,则表示您没有进行任何聚合。
  • DBC.QryLogObjects 包含特定查询使用的对象及其使用方式。这包括特定查询引用的表,列和索引。

这些表可以通过QueryIDProcID在DBC中连接在一起。还有一些其他表可以捕获有关查询的信息,但超出了这个特定问题的范围。您可以在Teradata手册中找到相关内容。

与您的DBA团队核实,以确定正在完成的日志记录级别以及保留历史DBQL数据的位置。通常,DBQL数据会在夜间移动到历史数据库,并且从缓存到DBC表的数据通常会有十分钟的延迟。您的DBA团队可以告诉您在哪里可以找到历史DBQL数据。