2012年7月24日 星期二

資料庫快照說明與應用

        資料庫快照(Snapshot)是一個可以將資料庫快速的產生一個資料庫的 "複本" 的一種技術,而從SQL Server 2005開始,已支援此功能,雖然只有Enterprise的版本才有支援,但就我個人來說,自從推出到現在,我一直很喜歡這個功能,而且也是一個好用且應用層面非常廣的功能,所以本篇我們就來介紹一下這個功能。

功能特性:
可以快速的建立一個與來源資料庫相同的唯讀資料庫。


應用情況:
  1. 提供給報表進行讀取。
  2. 當你有架設使用Database Mirroring時,你的Secondary的機器上的資料庫是無法讀取的,你可以透過此Snapshot的技術建立資料庫的快照,提供給其他的使用者唯讀存取。
  3. 當如果你有需要手動進行大量的資料異動時,可以先行建立快照,當如果真的有需要即時回復資料時,就可以從此快照資料庫中,將資料更新或寫回原本的資料庫中。
  4. 增加彈性到備份方案中,假設我的備份方案為每週一次 [Full Backup],每天一次 [Diff Backup],每小時一次 [Log Backup],這時候由於企業中午固定會有批次資料寫入,所以你可以在寫入前進行一次資料庫快照,藉以讓你的備份方案更加的彈性。

執行語法(以AdventureWorks2008R2為例):
IF EXISTS (SELECT database_id FROM sys.databases
    WHERE NAME='AdventureWorks2008R2_Snapshot')
    DROP DATABASE AdventureWorks2008R2_Snapshot;
GO

CREATE DATABASE AdventureWorks2008R2_Snapshot ON
( NAME = AdventureWorks2008R2_Data, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks2008R2.ss')
AS SNAPSHOT OF AdventureWorks2008R2
GO


執行完上述的指令後,即可在Database Snapshots中看到剛剛建立的資料快照了。


資料料庫快照集的限制(參考自官網)
  1. 建立及保留資料庫快照集的伺服器執行個體必須與來源資料庫相同。
  2. 資料庫快照集永遠會處理完整的資料庫。
  3. 資料庫快照集相依於來源資料庫,且不是備援儲存體。 資料庫快照集無法防止磁碟錯誤或其他類型的損毀。 因此,使用資料庫快照集還原資料庫,並非備份和還原策略的替代方案。 基本上還是請您執行所有排程備份。 如果您必須將來源資料庫還原到您建立資料庫快照集當時的時間點,請實作可讓您執行此作業的備份原則。
  4. 當來源資料庫上更新過的頁面發送到快照集時,如果快照集正好用光了磁碟空間,或遇到一些其他錯誤,快照集會變成有疑問,因此必須刪除。
  5. 快照集是唯讀的。
  6. 您無法為 model、master 與 tempdb 資料庫製作快照。
  7. 您無法變更資料庫快照集檔案的任何規格。
  8. 您無法從資料庫快照集卸除檔案。
  9. 您無法備份或還原資料庫快照集。
  10. 您無法附加或卸離資料庫快照集。
  11. 您無法在 FAT32 檔案系統或 RAW 磁碟分割上建立資料庫快照集。 資料庫快照集所使用的疏鬆檔案都由 NTFS 檔案系統提供。
  12. 資料庫快照集不支援全文檢索索引。 全文檢索目錄不會從來源資料庫傳播。
  13. 資料庫快照集在建立快照集時,會繼承其來源資料庫的安全性限制。 因為快照集是唯讀的,所以無法變更所繼承的權限,而且對來源進行的權限變更都無法反映在現有的快照集中。
  14. 快照集永遠反映出快照集建立時的檔案群組狀態:線上檔案群組保持線上狀態、離線檔案群組保持離線狀態。 如需詳細資訊,請參閱本主題稍後的「含離線檔案群組的資料庫快照集」。
  15. 如果來源資料庫變成 RECOVERY_PENDING,其資料庫快照集可能會無法存取。 不過,在解決來源資料庫的問題之後,其快照集應該就可以使用了。
  16. 唯讀檔案群組以及壓縮檔案群組不支援還原, 嘗試還原包含這兩種檔案群組類型的資料庫都會失敗。
  17. 在記錄傳送組態中,只能在主要資料庫上建立資料庫快照集,不能在次要資料庫上建立。 如果在主要伺服器執行個體和次要伺服器執行個體之間切換角色,您必須先卸除所有的資料庫快照集,然後才能將主要資料庫設定為次要資料庫。
  18. 資料庫快照集無法設定為可擴充的共用資料庫。
  19. 資料庫快照集不支援 FILESTREAM 檔案群組。 如果 FILESTREAM 檔案群組存在來源資料庫中,它們就會在其資料庫快照集中標示為離線,而且這些資料庫快照集無法用於還原資料庫。


參考連結:
Create a Database Snapshot (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms175876.aspx
Database Snapshots (SQL Server)
http://msdn.microsoft.com/en-us/library/ms175158.aspx


關鍵字:SQL ServerDatabase Snapshot資料庫快照

沒有留言:

張貼留言