使用CodeCeption(PHP)还原数据库会使数据库处于“恢复”状态

时间:2016-03-03 09:29:58

标签: php sql-server codeception

我正在尝试在使用 CodeCeption (PHP)编写的验收测试开始时恢复 MSSQL数据库。对于那些了解CodeCeption的人,我正在使用转储文件来运行恢复。

我正在使用的还原命令在SQL Management Studio中运行时效果很好但是从测试套件运行时,它仍处于“恢复”状态,因此无法使用。正在运行

RESTORE DATABASE [dbname] WITH RECOVERY

此时将失败并显示消息

  

“无法恢复数据库,因为日志未恢复”   但运行完整还原命令(RESTORE DATABASE [dbname]   从磁盘....)

此时在Management Studio中的

将起作用。我在恢复命令中使用 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

有什么建议吗?

1 个答案:

答案 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来填充数据库。