資料庫快照集是 SQL Server 資料庫的唯讀靜態檢視( 源資料庫)。 資料庫快照集在建立快照集時,會與源資料庫交易一致。 資料庫快照集一律位於與其源資料庫相同的伺服器實例上。 更新源資料庫時,會更新資料庫快照集。 因此,資料庫快照集存在的時間越長,就越有可能使用其可用的磁碟空間。
給定來源資料庫中可以存在多個快照集。 每個資料庫快照集都會保存,直到資料庫擁有者主動移除為止。
備註
資料庫快照與快照備份、交易的快照分離或快照複製無關。
本主題內容:
功能概觀
資料庫快照會在資料頁面層級運作。 在第一次修改來源資料庫的頁面之前,系統就會將原始頁面從來源資料庫複製到快照集。 快照集會儲存原始頁面,保留快照集建立時已存在的資料記錄。 第一次被修改的每個頁面都會重複相同的流程。 對使用者而言,資料庫快照集似乎永遠不會變更,因為資料庫快照集上的讀取作業一律會存取原始數據頁面,而不論它們位於何處。
為了儲存複製的原始頁面,快照集會使用一或多個 稀疏檔案。 一開始,疏鬆檔案是一個基本上空白的檔案,其中包含沒有用戶數據,而且尚未為用戶數據配置磁碟空間。 隨著源資料庫中越來越多的頁面更新,檔案的大小就會成長。 下圖說明兩個相反的更新模式,對於快照集大小的影響。 更新模式 A 所反映的環境,在快照集的生命期限內,只有 30% 的原始頁面有更新。 更新模式 B 所反映的環境,在快照集的生命期限內,有 80% 的原始頁面有更新。
資料庫快照的優點
快照集可以用於報表用途。
用戶端可以查詢資料庫快照集,這可讓您根據快照集建立時的數據撰寫報表。
維護報表產生的歷程記錄資料。
快照集可對特定時間點的資料提供使用者存取。 例如,您可以在指定時間週期結束時建立資料庫快照集,以供稍後報告使用。 接著,您可以在快照集執行期末報表。 如果磁碟空間允許,您也可以無限期地維護期間結束快照集,允許對這些期間的結果進行查詢;例如,若要調查組織效能。
使用您為了可用性而維護的鏡像資料庫卸除報告。
將資料庫快照集與資料庫鏡像一起使用,可讓您存取鏡像伺服器上的資料以供報表使用。 此外,在鏡像資料庫上執行查詢可以釋放主資料庫上的資源。 如需詳細資訊,請參閱資料庫鏡像和資料庫快照集 (SQL Server)。
保護資料以防發生管理疏失。
在源資料庫發生使用者錯誤時,您可以將源資料庫還原為建立指定資料庫快照集時的狀態。 您只會失去建立快照集之後的資料庫更新資料。
例如,在執行重大更新,例如大量更新或架構變更之前,請在資料庫上建立資料庫快照集來保護數據。 如果發生錯誤,您可以將資料庫還原為快照集,利用快照集進行復原。 恢復可能比從備份復原更快;不過,之後您無法進行向前復原。
這很重要
離線或損毀的資料庫不能還原。 因此,需要定期備份並測試還原計劃,才能保護資料庫。
備註
資料庫快照集相依於來源資料庫。 因此,使用資料庫快照集來還原資料庫並不是備份和還原策略的替代方案。 基本上還是請您執行所有排程備份。 如果您必須將源資料庫還原到您建立資料庫快照集的時間點,請實作可讓您執行此動作的備份原則。
保護資料以防使用者有所疏失。
您可以定期建立資料庫快照,以減輕重大使用者錯誤的影響,例如刪除的資料表。 如需更高階的保護,您可以建立一系列資料庫快照集,所涵蓋的時間長度足以辨識出大多數使用者造成的錯誤,並對之作出回應。 例如,視磁碟資源而定,您可能會維護跨越 24 小時間隔的 6 到 12 個滾動快照集。 接著,每建立一個新的快照集,就會刪除最舊的快照集。
若要復原使用者造成的錯誤,您可以將資料庫還原為錯誤發生之前的快照集。 還原可能比從備份還原更快;不過,您無法在之後向前復原。
或者,您可以根據快照中的資訊,手動重建已刪除的資料表或其他丟失的資料。 例如,您可以將數據從快照集大量複製到資料庫中,並手動將數據合併回資料庫。
備註
使用資料庫快照集的理由,會決定資料庫上同時要有幾個快照集、建立新快照集的頻率,以及保留快照集的時間長度。
管理測試資料庫
在測試環境中,在每次測試開始時重複執行測試通訊協定,讓資料庫包含相同的數據時,可能會很有用。 執行第一輪之前,應用程式開發人員或測試人員可以在測試資料庫上建立資料庫快照集。 在每一回測試執行之後,可還原資料庫快照集,使資料庫快速回到它先前的狀態。
詞彙和定義
資料庫快照
資料庫 (來源資料庫) 在交易上一致的唯讀、靜態檢視。
源資料庫
若是資料庫快照集,則為快照集建立所在的資料庫。 資料庫快照集相依於來源資料庫。 資料庫的快照集必須與資料庫位於相同的伺服器執行個體上。 此外,如果該資料庫因任何原因而無法使用,其所有資料庫快照集也會變成無法使用。
稀疏檔案
由 NTFS 檔案系統提供的檔案所需的磁碟空間比原本需要的少得多。 疏鬆檔案可用來儲存複製到資料庫快照集的頁面。 初次建立時,疏鬆檔案所佔的磁碟空間很小。 當資料寫入資料庫快照集時,NTFS 也會逐漸將磁碟空間配置到對應的疏鬆檔案。
資料庫快照的必要條件和限制
本節內容:
先決條件
可使用任何復原模式的來源資料庫必須符合下列必要條件:
伺服器實例必須在支持資料庫快照集的 SQL Server 版本上執行。 如需詳細資訊,請參閱 SQL Server 2014 版本支援的功能。
除非來源資料庫是資料庫鏡像工作階段中的鏡像資料庫,否則該資料庫必須處於線上狀態。
您可以在可用性群組中的任何主要或輔助資料庫上建立資料庫快照集。 複本角色必須是不在 RESOLVING 狀態的 PRIMARY 或 SECONDARY。
當您建立資料庫快照集時,建議資料庫同步處理狀態為 SYNCHRONIZING 或 SYNCHRONIZED。 不過,當資料庫同步狀態不是同步處理中時,可以建立資料庫快照集。
如需詳細資訊,請參閱具有 AlwaysOn 可用性群組的資料庫快照集(SQL Server)。
若要在鏡像資料庫上建立資料庫快照集,資料庫必須處於「已同步處理」的鏡像狀態。
來源資料庫無法設定為可擴充的共用資料庫。
備註
所有復原模式都支援資料庫快照集。
源資料庫的限制
只要資料庫快照集存在,快照集的來源資料庫就會有下列限制:
無法刪除、分離或還原資料庫。
備註
備份源資料庫正常運作;它不受資料庫快照集影響。
效能會降低,因為每次更新頁面時,因對快照進行複製寫入作業,導致源資料庫上的 I/O 增加。
無法從源資料庫或任何快照集卸除檔案。
資料庫快照的限制
下列限制適用於資料庫快照集:
建立及保留資料庫快照集的伺服器執行個體必須與來源資料庫相同。
資料庫快照集永遠會處理完整的資料庫。
資料庫快照集相依於源資料庫,且不是備援記憶體。 它們不會防止磁碟錯誤或其他類型的損毀。 因此,使用資料庫快照集還原資料庫並不能取代您的備份和還原策略。 基本上還是請您執行所有排程備份。 如果您必須將源資料庫還原到您建立資料庫快照集的時間點,請實作可讓您執行此動作的備份原則。
當源資料庫上更新的頁面推送至快照集時,如果快照集用完磁碟空間或遇到一些其他錯誤,快照集就會變得可疑且必須刪除。
快照集是唯讀的。 因為它們是唯讀的,所以無法升級。 因此,升級後,資料庫快照集預期將無法有效運作。
禁止拍攝模型、master和tempdb資料庫的快照。
您無法變更資料庫快照集檔案的任何規格。
您無法從資料庫快照集卸除檔案。
您無法備份或還原資料庫快照集。
您無法附加或分離資料庫快照集。
您無法在 FAT32 檔案系統或 RAW 磁碟分區上建立資料庫快照集。 資料庫快照集所使用的疏鬆檔案是由NTFS文件系統所提供。
資料庫快照集不支援全文索引。 全文檢索目錄不會從源資料庫傳播。
資料庫快照集在建立快照集時,會繼承其來源資料庫的安全性限制。 因為快照集是只讀的,所以無法變更繼承的許可權,而且對來源所做的許可權變更不會反映在現有的快照中。
快照集永遠反映出快照集建立時的檔案群組狀態:線上檔案群組保持線上狀態、離線檔案群組保持離線狀態。 如需詳細資訊,請參閱本主題稍後的 "具有離線檔案群組的資料庫快照"。
如果源資料庫變成RECOVERY_PENDING,其資料庫快照集可能會變成無法存取。 不過,在源資料庫的問題解決之後,其快照集應該會再次可供使用。
只讀檔案群組和壓縮檔群組不支援還原。 嘗試還原包含下列其中一種檔案群組的資料庫失敗。
在記錄傳送組態中,資料庫快照集只能在主資料庫上建立,而不是在輔助資料庫上建立。 如果您在主伺服器實例與輔助伺服器實例之間切換角色,您必須先卸除所有資料庫快照集,才能將主資料庫設定為輔助資料庫。
資料庫快照集無法設定為可調整的共享資料庫。
資料庫快照集不支援 FILESTREAM 檔案群組。 如果源資料庫中有 FILESTREAM 檔案群組,其資料庫快照集會標示為離線,且資料庫快照集無法用於還原資料庫。
備註
針對資料庫快照集執行的 SELECT 陳述式不得指定 FILESTREAM 資料行,否則將會傳回下列錯誤訊息:
Could not continue scan with NOLOCK due to data movement.當只讀快照集上的統計數據遺失或過時時,Database Engine 會在 tempdb 中建立和維護暫存統計數據。 如需詳細資訊,請參閱統計資料。
磁碟空間需求
資料庫快照集會耗用磁碟空間。 如果資料庫快照集用盡磁碟空間,則會將其標示為可疑且必須卸除。 (然而,源資料庫沒有受到影響;對其採取的動作會正常繼續。不過,相較於資料庫的完整復本,快照集具有很高的空間效率。 快照集所需儲存空間,只要足夠儲存那些在存留時間內會有變更的頁面即可。 一般而言,快照通常會保留有限的時間,因此它們的大小並不是主要的問題。
不過,您保留快照的時間越長,就越有可能用到可用的空間。 疏鬆檔案可以成長的大小上限是快照集建立時對應的源資料庫檔案大小。
如果資料庫快照集用盡磁碟空間,則必須刪除它(卸除)。
備註
除了檔案空間以外,資料庫快照集耗用的資源數量大致上與資料庫相同。
具有脫機檔案群組的資料庫快照
當您嘗試執行下列任一動作時,來源資料庫中的離線檔案群組會影響到資料庫快照集:
建立快照
來源資料庫具有一個或多個離線檔案群組時,快照集會在這些檔案群組離線的狀態下順利建立。 不會為離線檔案群組建立稀疏檔案。
使檔案群組離線
您可以使來源資料庫中的檔案離線。 不過,如果建立快照集時,檔案群組是在線上,則在資料庫快照集中該檔案群組仍保持在線上。 如果查詢的數據在快照集建立后已變更,則原始數據頁面將會在快照集中存取。 不過,若想使用查詢從快照集存取檔案群組中的未修改資料,可能會失敗並發生輸入/輸出 (I/O) 錯誤。
使檔案群組上線
您無法在具有任何資料庫快照集的資料庫中讓檔案群組上線。 如果檔案群組在建立快照集時脫機,或在資料庫快照集存在期間脫機,檔案群組會保持脫機。 這是因為將檔案帶回在線牽涉到還原它,如果資料庫上存在資料庫快照集,則不可能。
將來源資料庫還原到快照集
將源資料庫還原為資料庫快照集,需要所有檔案群組都處於在線狀態,但建立快照集時脫機的檔案群組除外。