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