2009-01-28 24 views
2

夥計找出數據庫備份的時間點

假設您收到SQL Server數據庫(2005或2008)的斷開備份並將其還原到您的SQL Server實例。

有沒有一種方法,是否有系統目錄或什麼,以找出最後一次寫入操作何時發生在特定數據庫?我希望能夠找出特定數據庫備份來自哪一天 - 不幸的是,這並不是真的在任何地方明確記錄,並且檢查所有數十個數據表以查看最高日期/時間戳記也不是真正的選擇...

任何想法?當然 - 我可以查看* .bak文件的日期/時間戳 - 但是我可以從SQL Server(Management Studio)中更精確地找到?

謝謝! Marc

回答

1

您可以嘗試RESTORE HEADERONLY您的備份文件,如描述here

應該給你你正在尋找的信息。

0

據我所知在主數據庫中存在一個日誌表,其中每個寫入都存儲有詳細信息。但我不確定是否需要啓用日誌機制 - 以便默認不記錄,並且必須啓用它。 在Oracle中,例如,存在可以查詢的系統數據庫表日誌。

如果情況並非如此 - 您仍然可以自己寫一個觸發器並將其應用於所需的每個表格/列,並自行進行記錄。

+1

海報正在要求已經發生的事情;你的觸發器的建議將無法正常工作... – 2009-01-28 10:31:41

+0

確切 - 觸發器不起作用。我正在討論在本地計算機B上恢復備份文件格式的服務器A,然後診斷該數據庫最後一次寫入操作何時發生(無需訪問它駐留的服務器) – 2009-01-29 21:35:11

2

如果你有機會到SQL Server實例,其中備份最初運行,你應該能夠查詢msdb

SELECT backup_set_id, backup_start_date, backup_finish_date 
FROM msdb.dbo.backupset 
WHERE database_name = 'MyDBname' AND type = 'D' 

有與備份集數表:

  • 備份文件 - 每個數據文件或備份的日誌文件包含一行
  • backupmediafamily - 每個媒體系列包含一行
  • backupmediaset - 包含每一行對應一個備份介質設置
  • 備份集 - 包含一行每個備份集

通過查詢這些表即可確定最後的備份發生時,發生了什麼類型的備份和文件的寫入位置。

+0

那麼,因爲我收到了一個BAK文件在例如磁盤,USB棒,或通過FTP,我不幸*不*有* * *有權訪問源服務器:-( – 2009-01-28 13:59:12

1

有點晚了,但應該是你想要的。

每次寫入數據庫都是日誌文件中的一個條目。其中有一個LSN。 至少必須將其存儲在用於日誌還原的備份中。

那麼,如何將LSN與日期時間相匹配?

SELECT TOP 5 [End Time] AS BringFirst, * 
FROM ::fn_dblog (NULL, NULL) 
WHERE [End Time] IS NOT NULL 
ORDER BY BringFirst DESC 

我從來沒有使用過此之前(只是有一個這個答案)。有些寫道很可能是備份本身的一部分,但是你應該能夠通過一些插曲來區分它們。