2016-03-03 107 views
1

我試圖在使用CodeCeption(PHP)編寫驗收測試運行開始恢復MSSQL數據庫讓數據庫。對於那些知道CodeCeption的人,我使用轉儲文件來運行恢復。使用CodeCeption(PHP)恢復數據庫中的「恢復」狀態

我正在使用的還原命令在SQL Management Studio中運行時完美工作,但是從測試套件運行時,它仍處於「還原」狀態,因此無法使用。在這一點上運行

RESTORE DATABASE [dbname] WITH RECOVERY 

將失敗,消息

「數據庫無法恢復,因爲日誌未還原」,然而 運行完整恢復命令(RESTORE DATABASE [DBNAME] FROM DISK ....)

在Management Studio中此時會工作。我正在使用WITH REPLACERECOVERY上的還原命令。

我也看過以下博客文章(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簡單地執行從SQL文件,您配置了dump參數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來填充數據庫。

+0

還原命令是 RESTORE DATABASE [DBNAME] FROM DISK = 'C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL11.MSSQLSERVER \ MSSQL \備份\ backup_name.bak' 替換,RECOVERY 我m相信這是PDO _sqlsrv驅動程序的問題,但無法找到它。我已經通過使用數據庫快照解決了這個問題。 –