1

私は開発データベースでいくつかのテストを行っています。既知の状態にロールバックする簡単な方法が欲しいのですが、データベースのサイズが大きいため、バックアップからの復元には 5 分かかります。

「ロールバック」したい作業は多くの接続に分散されています。ソースにアクセスできないアプリからのものであるため、一部の接続のSQLを変更できません(したがって、接続をラップすることはできません巨人BEGIN TRANSACTION

バックアップから復元するよりも軽量なものはありますが、明示的に有効にする必要はなくBEGIN TRANSACTION、ロールバック先のポイントが作成された後に開いて作業を実行し、閉じた接続によって行われた作業をロールバックするためにも機能しますか?

4

1 に答える 1

3

最初にデータベース スナップショットを使用し、最後に元に戻すことができます。ただし、BACKUP/RESTORE と非常によく似ているため、すべての接続を閉じる必要がありますが、確かに軽量です。これを行う 1 つの方法は、元に戻す前にすべての接続を切断することです。接続に失敗した後、アプリケーションがデータベースに再接続できる場合、これで達成したいことがカバーされるはずです。

----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
于 2012-11-18T23:17:45.557 に答える