創(chuàng)建數(shù)據庫快照 (Transact-SQL)
? ? ? ?創(chuàng)建 SQL Server 數(shù)據庫快照的唯一方式是使用 Transact-SQL語言。?SQL Server Management Studio 不支持
創(chuàng)建數(shù)據庫快照。? ??
? ? 一、可以使用任何恢復模式的源數(shù)據庫必須滿足以下先決條件:
服務器實例必須正在運行支持數(shù)據庫快照的 SQL Server 版本。有關在 SQL Server 中支持數(shù)據庫快照的信息,
請參閱?SQL Server ?各個版本支持的功能。?
源數(shù)據庫必須處于聯(lián)機狀態(tài),除非該數(shù)據庫在數(shù)據庫鏡像會話中是鏡像數(shù)據庫。
若要在鏡像數(shù)據庫中創(chuàng)建數(shù)據庫快照,數(shù)據庫必須處于同步鏡像狀態(tài)。
不能將源數(shù)據庫配置為可縮放共享數(shù)據庫。
創(chuàng)建數(shù)據庫快照之前,考慮如何命名它們是非常重要的。?每個數(shù)據庫快照都需要一個唯一的數(shù)據庫名稱。?為了便于
管理,數(shù)據庫快照的名稱可以包含標識數(shù)據庫的信息,例如:
源數(shù)據庫的名稱。
該新名稱用于快照的指示信息。
快照的創(chuàng)建日期和時間、序列號或一些其他的信息(例如一天中的某個時間)以區(qū)分給定的數(shù)據庫上的連續(xù)快
照。
例如,考慮 AdventureWorks2012 數(shù)據庫的一系列快照。?在上午 6 時和下午 6 時(基于 24 小時制)之間,?以?
6?個小時為間隔創(chuàng)建三個每日快照。?每個每日快照保持 24 小時才被刪除并被同一名稱的新快照替換。?請注意,每
個快照名稱指明了小時,而非天:
AdventureWorks_snapshot_0600 AdventureWorks_snapshot_1200 AdventureWorks_snapshot_1800
另外,如果這些每日快照創(chuàng)建的時間每天都變化,則推薦使用不太精確的命名約定,例如:
AdventureWorks_snapshot_morning AdventureWorks_snapshot_noon AdventureWorks_snapshot_evening
隨著時間的變化創(chuàng)建一系列快照可捕獲源數(shù)據庫的連續(xù)快照。?每個數(shù)據庫快照會一直存在直到顯式刪除。?因為每個
快照會隨著原始頁的更新而不斷增長,所以您可能想在創(chuàng)建新快照后通過刪除舊的快照來節(jié)省空間。
若要使用數(shù)據庫快照,客戶端需要知道它的位置。?正在創(chuàng)建或刪除另一個數(shù)據庫快照時,用戶可以從一個數(shù)據庫快
照讀取。?但是,如果用新快照替代現(xiàn)有快照,您需要將客戶端重新定向到新快照。?用戶可以通過 SQL Server Management Studio 手動連接到數(shù)據庫快照。?但是,若要支持生產環(huán)境,您應該創(chuàng)建一個編程解決方案,該方案
透明地將報表編寫客戶端定向到數(shù)據庫的最新數(shù)據庫快照。
? 二、創(chuàng)建數(shù)據庫快照(使用 Transact-SQL)
根據源數(shù)據庫的當前大小,確保有足夠的磁盤空間存放數(shù)據庫快照。?數(shù)據庫快照的最大大小為創(chuàng)建快照時源數(shù)
據庫的大小。?有關詳細信息,請參閱查看數(shù)據庫快照的稀疏文件大小 (Transact-SQL)。
使用 AS SNAPSHOT OF 子句對文件執(zhí)行 CREATE DATABASE 語句。?創(chuàng)建快照需要指定源數(shù)據庫的每個數(shù)據
庫文件的邏輯名稱。?語法如下:
CREATE DATABASE?database_snapshot_name
????ON
????(
????????NAME =?logical_file_name,
????????FILENAME = 'os_file_name'
????) [ ,...n]
????AS SNAPSHOT OF?source_database_name
[;]
其中,source_database_name?是源數(shù)據庫,logical_file_name?是引用該文件時在 SQL Server 中使用的邏
輯名稱,os_file_name?是創(chuàng)建該文件時操作系統(tǒng)使用的路徑和文件名,database_snapshot_name?是要將數(shù)
據庫恢復到的快照的名稱。?有關該語法的完整說明,請參閱?CREATE DATABASE (Transact-SQL)。
示例 (Transact-SQL)
本部分包含以下示例:
A.?對 AdventureWorks 數(shù)據庫創(chuàng)建快照
B.?對 Sales 數(shù)據庫創(chuàng)建快照
A.對 AdventureWorks 數(shù)據庫創(chuàng)建快照
此示例對?AdventureWorks?數(shù)據庫創(chuàng)建數(shù)據庫快照。?快照名稱?AdventureWorks_dbss_1800?及其稀疏文件
的名稱?AdventureWorks_data_1800.ss?指明了創(chuàng)建時間 6 P.M.(1800 小時)。
CREATE?DATABASE?AdventureWorks_dbss1800?ON (?NAME?=?AdventureWorks_Data,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLDataAdventureWorks_data_1800.ss'?) AS?SNAPSHOT?OF?AdventureWorks; GO
B.對 Sales 數(shù)據庫創(chuàng)建快照
此示例對?Sales?數(shù)據庫創(chuàng)建數(shù)據庫快照?sales_snapshot1200。?此數(shù)據庫是在?CREATE DATABASE?
(Transact-SQL)?中的“創(chuàng)建具有文件組的數(shù)據庫”示例中創(chuàng)建的。
--Creating?sales_snapshot1200?as?snapshot?of?the --Sales?database: CREATE?DATABASE?sales_snapshot1200?ON (?NAME?=?SPri1_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLdataSPri1dat_1200.ss'), (?NAME?=?SPri2_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLdataSPri2dt_1200.ss'), (?NAME?=?SGrp1Fi1_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERmssqldataSG1Fi1dt_1200.ss'), (?NAME?=?SGrp1Fi2_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLdataSG1Fi2dt_1200.ss'), (?NAME?=?SGrp2Fi1_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLdataSG2Fi1dt_1200.ss'), (?NAME?=?SGrp2Fi2_dat,?FILENAME?=? 'C:Program?FilesMicrosoft?SQL?ServerMSSQL11.MSSQLSERVERMSSQLdataSG2Fi2dt_1200.ss') AS?SNAPSHOT?OF?Sales GO