[SQL Server]创建某DB的Snapshot,与从shapshot还原某DB

-- create a snapshot for a database.  (caution:  a database can't be backuped if there is a snapshot for it.)

Declare @INT_DB_NAME varchar(30),@INT_DB_NAME_SNAPSHOT varchar(40),@SQL varchar(1000)

set @INT_DB_NAME = 'test_db'

set @INT_DB_NAME_SNAPSHOT = @INT_DB_NAME+'_SNAPSHOT'

IF  EXISTS (SELECT name FROM sys.databases WHERE name = @INT_DB_NAME_SNAPSHOT) exec ('DROP DATABASE '+@INT_DB_NAME_SNAPSHOT)

set @SQL = 'create database  '+@INT_DB_NAME_SNAPSHOT+' ON'+char(13)

select @SQL=@SQL+'(Name = '+DB_FILE.name+',FileName = "'+REPLACE(REPLACE(upper(DB_FILE.physical_name),'.MDF','_snapshot.mdf'),'.NDF','_snapshot.ndf')+ '")'+char(13)+','from    master.sys.databases DB join    master.sys.master_files DB_FILE on DB. database_id= DB_FILE. database_id where DB.name = @INT_DB_NAME and upper(DB_FILE.type_desc)<>'LOG'

set @SQL = left(@SQL,len(@SQL)-1)+'AS SNAPSHOT OF '+@INT_DB_NAME

exec (@SQL)

 

 

-- restore a database from its snapshot

use master

Declare @INT_DB_NAME varchar(30),@INT_DB_NAME_SNAPSHOT varchar(40),@SQL varchar(1000)

set @INT_DB_NAME = 'test_db'

set @INT_DB_NAME_SNAPSHOT = @INT_DB_NAME+'_SNAPSHOT'

set @SQL='ALTER DATABASE '+@INT_DB_NAME+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'

exec (@SQL)

RESTORE DATABASE @INT_DB_NAME from DATABASE_SNAPSHOT = @INT_DB_NAME_SNAPSHOT

set @SQL='ALTER DATABASE '+@INT_DB_NAME+' SET MULTI_USER'

exec (@SQL)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值