我正在对开发数据库进行一些测试。我想要一种简单的方法来回滚到已知状态,但是由于数据库的大小,从备份恢复需要 5 分钟才能执行。
我想要“回滚”的工作分布在许多连接上,我无法修改某些连接的 sql,因为它们来自我无权访问源的应用程序(所以我不能只用一个巨人BEGIN TRANSACTION
)
有没有比从备份恢复更轻的东西,但我不需要显式启用 likeBEGIN TRANSACTION
并且还可以回滚由已打开、执行其工作并在创建回滚到的点后关闭的连接完成的工作?
我正在对开发数据库进行一些测试。我想要一种简单的方法来回滚到已知状态,但是由于数据库的大小,从备份恢复需要 5 分钟才能执行。
我想要“回滚”的工作分布在许多连接上,我无法修改某些连接的 sql,因为它们来自我无权访问源的应用程序(所以我不能只用一个巨人BEGIN TRANSACTION
)
有没有比从备份恢复更轻的东西,但我不需要显式启用 likeBEGIN TRANSACTION
并且还可以回滚由已打开、执行其工作并在创建回滚到的点后关闭的连接完成的工作?
您可以在开始时使用数据库快照并在结束时恢复到它。但是,您必须关闭所有连接,因为它与 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