像交易一样回滚整个数据库

时间:2012-11-18 23:11:26

标签: sql sql-server transactions sql-server-2008-r2

我正在对开发数据库进行一些测试。我想要一种简单的方法回滚到已知状态,但是由于数据库的大小从备份恢复需要5分钟才能完成。

我想要“回滚”的工作分布在很多连接上,我无法修改某些连接的sql,因为它们来自一个我无法访问源的应用程序(所以我不能只是换行我与巨人BEGIN TRANSACTION)的联系

是否有比从备份恢复更轻的重量,但我不需要像BEGIN TRANSACTION那样明确启用,也可以回滚已打开的连接完成的工作,执行它的工作,并在之后关闭指向回滚到创建了吗?

1 个答案:

答案 0 :(得分:3)

您可以在开头使用database snapshots,然后在结尾处使用{{3}}。但是,您必须关闭所有连接,因为它与BACKUP / RESTORE非常相似,但它确实更轻量级。一种方法是在恢复之前杀死所有连接。如果您的应用程序在连接失败后可以重新连接到数据库,那么这应该涵盖您想要实现的目标。

----To create a snapshot
create database SrcDbSnapshot
on ( name = LogicalFileNameFromSrcDB, 
    filename = 'E:\SrcDB.ss')
AS SNAPSHOT OF SrcDB
go

----To roll back
--Kills all connections and performs the rollback
ALTER DATABASE [SrcDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [SrcDB] FROM DATABASE_SNAPSHOT = 'SrcDbSnapshot'
go

----To remove the snapshot
drop database SrcDbSnapshot
go