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

osc*_*tin 0 teradata

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

我已经发现了这个dbc.DBQLogTbl视图,但它似乎并没有像我期望的那样工作.是否有另一个视图包含我要查找的信息?

Rob*_*ler 5

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

您的问题将特别关注以下数据字典对象:

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

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

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