Sql-Server-2014

快照文件儲存什麼樣的變化?

  • June 15, 2019

假設我創建了一個名為

$$ DBS $$在該數據庫中,我創建了一個名為$$ products $$. 然後我將 4 行插入$$ products $$. 後來我拍了一張$$ DBS $$. 結果,在我的驅動器及其屬性中創建了稀疏文件 Snapshot_DBS.ss,文件大小為 8 MB,而磁碟大小為 128KB(見附件)。讓我們進入有趣的部分。每當我對該表進行 INSERT 或 UPDATE 操作時,磁碟上 Snapshot_DBS.ss 的大小都會不斷增長。在網際網路上我找到了這樣的解釋:快照包含創建的頁面的原始版本以及自創建快照以來源中的更改。 我的第一個問題是,快照文件儲存什麼樣的更改?它的行為是否像 t-log(儲存對

$$ DBS $$)? 第二個問題是,它聲明**“……以及自創建快照以來源中的更改”**的部分讓我想起了差異備份的工作原理,後者在進行完整備份後獲取所有 t-logs。它們的工作原理是否相似? 在此處輸入圖像描述

我的第一個問題是,快照文件儲存什麼樣的更改?它的行為是否像 t-log(儲存對

$$ DBS $$)?

數據庫快照在數據頁級別而不是日誌級別執行。在第一次修改源數據庫的頁面之前,將原始頁面從源數據庫複製到快照。快照儲存原始頁面,保留創建快照時存在的數據記錄。對於第一次修改的每個頁面都重複相同的過程。對使用者來說,數據庫快照似乎永遠不會改變,因為對數據庫快照的讀取操作總是訪問原始數據頁,而不管它們位於何處。

這是日誌和數據將更改的點,因為日誌包含已送出和未送出的事務。

第二個問題是,它聲明“……以及自創建快照以來源中的更改”的部分讓我想起了差異備份的工作原理,後者在進行完整備份後獲取所有 t-logs。它們的工作原理是否相似?

差異備份和快照不一樣,不相關。快照不考慮上次完整備份,是源數據庫的靜態視圖。

備份: 在典型的完整備份期間,數據庫的所有頁面都被複製到不同的位置,並且此備份可以移動到不同的伺服器、SAN、磁帶、任何其他介質。如果需要,這甚至可以在幾十年後使用。甚至可以使用完整備份、差異備份和事務備份,為任何時間框架的時間點恢復設計和安排備份策略。這是一個完整的包,沒有間隙。

快照: 數據庫快照是 SQL Server 數據庫(源數據庫)的只讀靜態視圖。數據庫快照在創建快照時與源數據庫在事務上是一致的。

與備份相比,快照的主要優勢在於備份和恢復所需的時間,尤其是當您希望在短時間內快速進行備份和恢復時。參考下圖,在第一步中快照只需要幾秒鐘,因為沒有數據更改。在典型的部署中,只有不到 1% 的數據頁面會被更改,而且恢復速度也很快。

我們還需要了解這兩個的目的:

快照通常可用於審計和報告等目的。快照備份的另一個用途是可以為一個數據庫創建多個快照,這些快照可以在不同的時間點拍攝。這有助於進行週期分析。

重要的是要了解數據庫快照直接依賴於源數據庫。因此,快照永遠無法替代您的正常備份和恢復策略。例如,如果整個數據庫失去,則意味著其源文件不一致。如果源文件不可用,則快照無法引用它們,因此無法進行快照還原。

您可以從以下連結中參考更多詳細資訊:

https://www.sqlshack.com/understanding-database-snapshots-vs-database-backups-in-sql-server/

https://vijredblog.wordpress.com/2015/01/28/sql-snapshot-vs-backup-when-to-choose-snapshot-over-backup/

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-2017

以上希望有所幫助。

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