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

问题描述:

假设我知道特定数据库记录何时更新。我知道某处存在执行的所有SQL的历史记录,可能只能由DBA访问。如果我可以访问这个历史记录,我可以从中选择查询文本是LIKE '%fieldname%'。尽管这样可以提取包含我要查找的字段名称的任何事务性查询,但这是一个很好的开始,特别是如果我可以将记录集过滤到特定的日期/时间范围。有没有办法找到在特定时间更新特定字段的SQL?

我发现了dbc.DBQLogTbl视图,但它看起来没有像我期望的那样工作。是否有另一个视图包含我正在查找的信息?

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

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

  • DBC.QryLog包含有关查询的信息相对于用户,会话,应用程序,报表的类型,CPU ,IO和与特定查询相关的其他字段。
  • DBC.QryLogSQL包含SQL语句。如果一个SQL语句超过了一定的长度,它将被分割成多个行,这个行由表中的列表示。如果您将其加入主查询日志表,则必须小心如果要在查询日志表中进行聚合和指标。虽然更经常的情况是,如果您将查询日志表加入到SQL表中,则不会进行任何聚合。
  • DBC.QryLogObjects包含特定查询使用的对象以及它们的使用方式。这包括由特定查询引用的表,列和索引。

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

请咨询您的DBA团队以确定正在进行的日志记录级别以及历史DBQL数据的保留位置。通常,DBQL数据每晚移动到历史数据库,并且数据从缓存刷新到DBC表通常有10分钟的延迟。您的DBA团队可以告诉您在哪里可以找到历史DBQL数据。

+0

你能否更清楚地回答:哪个表格专门包含此信息“如果已启用记录”? – javadba 2013-07-12 04:30:57

+0

做的修改有助于澄清你的不确定性 – 2013-07-12 14:07:39

+0

这样猜测。 upvoted。 – javadba 2013-07-12 19:07:57