Sql-Server

SQL Server - 文件時間戳不變,那麼備份的是什麼?

  • August 5, 2020

請參閱下面的快照,其中顯示了我管理的其中一個 SQL Server 實例的所有數據文件和事務日誌文件的時間戳。這是一個生產實例。

在此處輸入圖像描述

今天是 2019 年 12 月 27 日。但是,如您所見,所有時間戳都顯示了更早的時間。

事實是,我在幾天前的 12 月 24 日拍攝了這張快照。但是,正如我今天檢查的那樣,情況仍然沒有改變。

上面的快照取自使用者數據庫。我還檢查了駐留在單獨驅動器上的系統數據庫,並拍攝了文件時間戳的快照,如下所示:

在此處輸入圖像描述

這些數據庫當然不是超級活躍的。但是,我確信有交易一直在執行。此外,我查看了其中一些的“架構更改歷史記錄”報告,可以確認我們的維護工作在最近的 12 月 26 日之前一直在工作和重建索引。

數據庫都處於完全恢復模式(儘管這可能不相關 - 只是需要提及的事實)。作業系統是 Windows NT 6.0 (= Windows Server 2007),SQL Server 版本是 2008 SP3。作業系統和 SQL 服務都將在明年第一季度升級。從上面的快照中也可以看出,數據文件和日誌文件都駐留在同一個磁碟驅動器和文件夾中,我“繼承”的這個伺服器的配置肯定不是最好的。因此,希望在幾個月後進行的計劃升級/遷移活動期間,所有這些都將得到解決。

現在我的問題是為什麼這些文件的時間戳沒有得到更新,儘管數據庫仍然處於活動狀態?(即使手動執行 Checkpoint 也沒有改變任何東西)。然後,如果事務日誌文件沒有得到更新,備份是否良好且可靠?它們真的包含它們應該包含的記錄嗎?

在回答您的主要問題(“正在備份什麼”)時,所有應該是 😀 更嚴重的是,您不能使用這些時間戳作為數據庫文件中發生更改的標誌。SQL Server 不保證數據庫文件的修改日期將如何更改或更新。

這裡有一篇有趣的部落格文章,它試圖找到在 MDF 文件上更新日期修改戳的時間和方式的模式:

SQL Server 數據庫文件 - 修改日期

我認為他們的觀察與您的情況一致:對數據文件的正常寫入不會更新日期修改戳。看起來增長事件(手動或自動)會更新該值,就像重新啟動服務(或任何其他可能“打開”或“關閉”數據庫 - 使用自動關閉功能,顯式使數據庫離線等)一樣。

我預計 2019 年 19 月 12 日晚上 9:52 對應於 Windows 或 SQL Server 重新啟動,這就是幾個日期/時間同步的方式。

然而,同樣,這種行為是無證的。我們注意到的任何模式都可能隨時改變,或者有意想不到的邊緣情況。

對於駐留在 NTFS 文件系統上的 SQL Server 數據文件,適用:

關於文件時間戳的唯一保證是在關閉進行更改的句柄時正確反映文件時間。

不過,需要明確的是,這是 Windows 提供的保證。我們不一定知道 SQL Server 在每種情況下如何創建和銷毀文件句柄。

David Browne(微軟頂級人物)在評論中提到了這一點,了解這一點很有用:

SQL Server 在執行時保持數據庫文件打開,以提高性能並防止其他程序更改它們。所以屬性不會在每次文件寫入時都改變。

引用自:https://dba.stackexchange.com/questions/256345