Ms Sql Server 2005的数据库快照功能使用实践
數(shù)據(jù)庫(kù)快照是sql server 2005的一個(gè)新功能。Msdn上對(duì)它的定義是:
數(shù)據(jù)庫(kù)快照是數(shù)據(jù)庫(kù)(稱為“源數(shù)據(jù)庫(kù)”)的只讀靜態(tài)視圖。在創(chuàng)建時(shí),每個(gè)數(shù)據(jù)庫(kù)快照在事務(wù)上都與源數(shù)據(jù)庫(kù)一致。在創(chuàng)建數(shù)據(jù)庫(kù)快照時(shí),源數(shù)據(jù)庫(kù)通常會(huì)有打開(kāi)的事務(wù)。在快照可以使用之前,打開(kāi)的事務(wù)會(huì)回滾以使數(shù)據(jù)庫(kù)快照在事務(wù)上取得一致。?
客戶端可以查詢數(shù)據(jù)庫(kù)快照,這對(duì)于基于創(chuàng)建快照時(shí)的數(shù)據(jù)編寫報(bào)表是很有用的。而且,如果以后源數(shù)據(jù)庫(kù)損壞了,便可以將源數(shù)據(jù)庫(kù)恢復(fù)到它在創(chuàng)建快照時(shí)的狀態(tài)。?
下面我們實(shí)踐一下數(shù)據(jù)庫(kù)快照的創(chuàng)建和使用:
一.????????????? 我們創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)在此數(shù)據(jù)庫(kù)的基礎(chǔ)上創(chuàng)建快照
創(chuàng)建源數(shù)據(jù)庫(kù)和數(shù)據(jù)表
Use?MASTER;
GO
CREATE?DATABASE?[Snapshot_Test]?ON??PRIMARY?
(?NAME?=?N'Snapshot_Test',?FILENAME?=?N'C:\Program?Files\Microsoft?SQL?Server\MSSQL.1\MSSQL\DATA\Snapshot_Test.mdf'?,?SIZE?=?3072KB?,?MAXSIZE?=?UNLIMITED,?FILEGROWTH?=?1024KB?)
?LOG?ON?
(?NAME?=?N'Snapshot_Test_log',?FILENAME?=?N'C:\Program?Files\Microsoft?SQL?Server\MSSQL.1\MSSQL\DATA\Snapshot_Test_log.ldf'?,?SIZE?=?504KB?,?MAXSIZE?=?UNLIMITED,?FILEGROWTH?=?10%)
?COLLATE?Chinese_PRC_CI_AS
GO
EXEC?dbo.sp_dbcmptlevel?@dbname=N'Snapshot_Test',?@new_cmptlevel=90
GO
USE?[Snapshot_Test]
GO
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
CREATE?TABLE?[dbo].[test](
????[id]?[int]?NOT?NULL,
????[name]?[nvarchar](50)?COLLATE?Chinese_PRC_CI_AS?NOT?NULL
)?ON?[PRIMARY]
GO
在創(chuàng)建完數(shù)據(jù)庫(kù)之后,我們馬上創(chuàng)建一個(gè)快照,創(chuàng)建快照使用的也是CREATE DATABASE語(yǔ)句,如下:
創(chuàng)建數(shù)據(jù)庫(kù)快照--創(chuàng)建數(shù)據(jù)庫(kù)快照
create?database?Snapshot_Test_shot?ON
(
????--是源數(shù)據(jù)庫(kù)的邏輯名
????Name?=?Snapshot_Test,
????--快照文件地址
????FileName?=?'D:\SqlData\Snapshot_Test_shot.ss'
)?
AS?SNAPSHOT?OF?Snapshot_Test;
?
現(xiàn)在的快照應(yīng)該和我們新建的數(shù)據(jù)庫(kù)一摸一樣,可以通過(guò)sql server 2005的對(duì)象瀏覽器查看數(shù)據(jù)庫(kù)快照,我們可以通過(guò)USE [快照庫(kù)名]來(lái)查詢數(shù)據(jù)庫(kù)快照
Codeuse?Snapshot_Test_shot;
go
SELECT?*?FROM?dbo.test;
以上語(yǔ)句執(zhí)行后dbo.test中沒(méi)有任何數(shù)據(jù),下一步我們往源數(shù)據(jù)庫(kù)表中插入幾條數(shù)據(jù)
use?snapshot_Test;
go
INSERT?INTO?TEST?(id,name)values(1,'hello?1');
INSERT?INTO?TEST?(id,name)values(2,'hello?2');
INSERT?INTO?TEST?(id,name)values(3,'hello?3');
INSERT?INTO?TEST?(id,name)values(4,'hello?4');
GO
我們?cè)俅尾樵兛煺諗?shù)據(jù)庫(kù)中的數(shù)據(jù)
GO
use?Snapshot_Test_shot;
go
SELECT?*?FROM?dbo.test;
二.????????????? 使用快照恢復(fù)數(shù)據(jù)庫(kù)
使用快照恢復(fù)數(shù)據(jù)庫(kù)Go
--從數(shù)據(jù)庫(kù)快照恢復(fù)數(shù)據(jù)庫(kù)
use?master;
GO
RESTORE?DATABASE?Snapshot_Test?from?
DATABASE_SNAPSHOT?=?'Snapshot_Test_shot';
三.????????????? 刪除數(shù)據(jù)庫(kù)快照
刪除快照--和刪除數(shù)據(jù)庫(kù)的語(yǔ)法一樣
DROP?DATABASE?Snapshot_Test_shot
在MSDN中數(shù)據(jù)庫(kù)快照的典型應(yīng)用是
1)?維護(hù)歷史數(shù)據(jù)以生成報(bào)表。
2)?使用為了實(shí)現(xiàn)可用性目標(biāo)而維護(hù)的鏡像數(shù)據(jù)庫(kù)來(lái)卸載報(bào)表。
3)?使數(shù)據(jù)免受管理失誤所帶來(lái)的影響。
4)?使數(shù)據(jù)免受用戶失誤所帶來(lái)的影響。
?
迄今為止,在我接觸的項(xiàng)目中還沒(méi)有快照的使用場(chǎng)景,本文只是一次簡(jiǎn)單的對(duì)新技術(shù)的一次動(dòng)手實(shí)踐,大家在實(shí)際項(xiàng)目中用過(guò)快照嗎,請(qǐng)談?wù)勀目捶ā?/p>
完整腳本文件 下載
總結(jié)
以上是生活随笔為你收集整理的Ms Sql Server 2005的数据库快照功能使用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深夜,在这个已不再喧嚣的城市中寻找到一片
- 下一篇: python调用动态链接库传送proto