我正在尝试在使用 CodeCeption (PHP)编写的验收测试开始时恢复 MSSQL数据库。对于那些了解CodeCeption的人,我正在使用转储文件来运行恢复。
我正在使用的还原命令在SQL Management Studio中运行时效果很好但是从测试套件运行时,它仍处于“恢复”状态,因此无法使用。正在运行
RESTORE DATABASE [dbname] WITH RECOVERY
此时将失败并显示消息
此时在Management Studio中的“无法恢复数据库,因为日志未恢复” 但运行完整还原命令(RESTORE DATABASE [dbname] 从磁盘....)
将起作用。我在恢复命令中使用 WITH REPLACE , RECOVERY 。
我还查看了以下博文(https://blogs.msdn.microsoft.com/brian_swan/2010/07/01/restoring-a-sql-server-database-from-php/),但在那里发布的解决方案似乎也无效。我还尝试使用xp_cmdshell和sqlcmd的组合运行还原,但仍然没有成功。
我已经理论化了CodeCeption运行转储文件的方式,它已经连接到数据库打开所以我添加了一个
USE [master]
在恢复之前,检查活动监视器中的进程,以确保没有与要恢复的数据库的连接。
我确信这是PHP CodeCeption代码中的一个问题,可以在这里看到 - https://github.com/Codeception/Codeception/blob/2.1/src/Codeception/Module/Db.php
有什么建议吗?
答案 0 :(得分:0)
Codeception只是从您使用dump
参数配置的SQL文件中执行SQL语句:
https://github.com/Codeception/Codeception/blob/2.1/src/Codeception/Lib/Driver/Db.php#L105
SqlSrv特定代码位于https://github.com/Codeception/Codeception/blob/2.1/src/Codeception/Lib/Driver/SqlSrv.php
如果您知道如何改进,欢迎您的贡献 请在问题中添加SQL文件的内容 如果它只包含RESTORE DATABASE语句,那么它可能是pdo_sqlsrv驱动程序的问题。
我唯一的建议是使用SQL语句CREATE TABLE和INSERT来填充数据库。