2013-04-30 51 views
0

假設我知道特定數據庫記錄何時更新。我知道某處存在執行的所有SQL的歷史記錄,可能只能由DBA訪問。如果我可以訪問這個歷史記錄,我可以從中選擇查詢文本是LIKE '%fieldname%'。儘管這樣可以提取包含我要查找的字段名稱的任何事務性查詢,但這是一個很好的開始,特別是如果我可以將記錄集過濾到特定的日期/時間範圍。有沒有辦法找到在特定時間更新特定字段的SQL?

我發現了dbc.DBQLogTbl視圖,但它看起來沒有像我期望的那樣工作。是否有另一個視圖包含我正在查找的信息?

回答

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表通常有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

相關問題