我有一堆功能测试,我正在从H2过渡到SQL Server。在运行一些测试之间,我会(自动)备份数据库,从数据库中删除所有内容,并使用SQL还原数据库。
使用标准备份数据库和还原数据库命令无法使用SQL Server进行备份/还原,因为为了还原,我需要调用ALTER DATABASE mydatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
,这会终止测试服务器和数据库之间的连接。
我想创建一个保存点,然后回滚到它,但回滚不起作用,我假设是因为 API 中的事务在创建保存点和回滚之间提交。我在功能测试代码中将自动提交设置为 false,并且没有收到任何自动提交错误。
一个想法是通过删除所有表并还原它们来使用 SQL 进行还原。不过,我不知道该怎么做。
有什么想法吗?
您应该能够在不终止连接的情况下备份数据库。您还可以将数据库还原为其他名称,这将允许您进行测试而不是终止连接。
至于备份和自动还原,这已经公开编写了脚本。
备份脚本
自动还原