2009-10-05 87 views
0

我在SQL Server 2005數據庫上運行了t-sql查詢,它假設運行4天,但是當我4天后檢查時發現機器突然關閉。所以我想跟蹤查詢發生了什麼,或者換句話說什麼是機器故障時查詢的狀態 有沒有一種機制來檢查這個在SQL Server上執行的查詢日誌

回答

1

做這樣的驗屍可能非常困難。但是,當關閉發生時,可能無法確定長時間運行的查詢的哪個部分處於活動狀態,重要的是嘗試找到問題的根本原因!

根據查詢寫入的方式,SQL將嘗試回滾未完成的任何SQL(或者如果使用了事務,則任何未提交的事務)。這將在服務器首次重新啓動時發生;如果你有任何想分析SQL事務日誌(yuck!)的副本。

在查看可能在關閉時運行的查詢部分之前,最好查看一下SQL日誌(我的意思是應用程序日誌,包含信息消息,時間戳等等,而不是SQL事務記錄一個給定的數據庫),尋找基本的事實,並可能發生錯誤信息,發生在關機前一段時間,這可能是問題的根源。還要檢查Windows事件日誌,因爲它們可能表明系統範圍內的異常情況可能是SQL關閉的原因或結果。

SQL事務日誌可以被「反編譯」並用於理解數據庫中容易更新/插入/刪除的內容,但是這種4天運行的信息可能埋得很深,很長,可能與無關的查詢。實際上,SQL日誌的磁盤空間不足可能會導致服務器變得不穩定(我期望能夠更好地處理這種情況,但如果問題驅動器也是系統驅動器,可能會發生不好的事情。 。)

最後,通過分析「4天長」的SQL腳本,可能可以通過腳本的各種副作用來推斷哪些部分已完成。除此之外,如果需要,此評論可能允許將數據庫置於一致狀態,或截斷腳本以排除已完成的部分,以準備完成工作的新運行。

+0

實際上,我只是想識別當時正在運行的查詢,或者在機器停機之前停止了查詢。 磁盤空間不足是原因,因爲它所在的分區仍有100 GB空間 – paranjai 2009-10-05 06:24:02

+0

您是否可以識別可能證明其完成或接近完成的查詢的任何副作用?最終,這將告訴你長時間運行的查詢是否完成。 – mjv 2009-10-05 06:28:34

+0

沒問題,這是一個查詢生成排列,所以沒有辦法確定所有的排列生成 – paranjai 2009-10-05 10:18:13