0

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

我发现了这个dbc.DBQLogTbl视图,但它似乎没有像我预期的那样工作。是否有其他视图包含我正在寻找的信息?

4

1 回答 1

5

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

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

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

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

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

于 2013-04-30T12:04:52.230 回答