2011-06-27 46 views
1

自從上次創建數據庫備份以來,我的數據庫中的一個表有一些缺失的行,因爲它顯示了備份數據庫中的那些行。查看在Sql Server中的特定表上運行的所有查詢

我想查看最近3天內跑了反對該表(這是我最後一次做備份的時間)

我希望得到任何幫助所有查詢。 謝謝。

回答

1

這就是爲什麼數據庫需要審計表可以創建它來顯示誰採取了行動。您還需要事先設置一種自己記錄查詢的方式(您可以使用Profiler,但這樣做會帶來顯着的性能下降,並且很少有dbas允許您在生產數據庫上使用它)。真的很想知道,但通常知道是誰採取了行動(或者我們有許多應用程序觸及我們的數據庫),以及我們什麼時候需要查找數據問題。如果您沒有事先設置審計,很難得到您想要的答案。一些第三方日誌分析器(這將是昂貴的)可能能夠重新創建數據,但它仍然不知道是誰做的或者查詢是什麼。你爲什麼每三天只進行一次備份?

你怎麼知道這些行缺失(即他們應該仍然存在),並沒有正確刪除某人,因爲他們不應該在那裏。只是因爲三天前有數據差異並不表示存在問題。如果這些值不應該被用戶改變,他們爲什麼有權改變它們?或許您的安全模型與您的後臺進程一樣需要重新評估。

就目前而言,您很難找到如何做出改變。因此,使用它作爲激勵來調查您需要數據庫設置的檢查和平衡,以便將來您可以更好地查看導致數據問題或阻止數據發生的原因。而且,由於您的備份與您所說的是正確的值(請參見第2節),然後修復數據。

+0

我們定期備份並在我們的開發機器上恢復它們​​。幾天前,我發現一個核心表中有一行錯配,表明有問題。我看了一下,有一個重要的產品記錄丟失了。這已經修復了。我們也幾乎弄清楚了它是如何發生的,但是在這種情況下,知道對服務器運行什麼查詢也是有益的。但是,審計表是一個好主意! –

+0

不!它實際上是在一個作業運行並執行一個不應該運行的條件時發生的,但它又檢查由用戶(合法用戶)設置的條件。但這似乎是人爲錯誤。但非常感謝答案,這是我們應該研究的事情,設置審計表。 –

0

不幸的是,你必須先設置原始查詢的日誌。在互聯網上有很多解決方案(通過跟蹤器或其他)。所有日誌都被永久寫入DBMS的LOG文件中,但僅用於事務性IO目的,一旦將它們轉存到硬盤驅動器,查詢本身就會離開日誌。 SQL代理錯誤日誌可能有一些數據可能需要檢出。它是在對象資源管理器 - > SQL Server代理 - >錯誤日誌

3

你可以檢查是否查詢已被緩存,但它是一個長鏡頭:

SELECT sql FROM sys.syscacheobjects where sql like '%TableName%' 
相關問題