Yii备份/恢复MSSQL数据库

时间:2014-06-12 17:44:15

标签: php sql-server yii database-backups database-restore

我有一个Yii控制台应用程序(使用Yii v1.1.14),我想要包含数据库备份和恢复命令功能。

对于备份功能,代码如下:

$backupDir = "C:\\mssql_backup\\backup.bak";

// Grab the db name from the config values
$dbName = $this->dbConfig['dbMainDatabaseName'];

$cmd = "USE [master] BACKUP DATABASE [$dbName] TO DISK = '$backupDir' WITH FORMAT";

$this->mssql->createCommand($cmd)->execute();

该命令执行但永远不会创建备份。我不确定命令在哪里出错,因为它使用SQL Server Management Studio执行得很好。

对于恢复功能,代码如下:

$backupDir = "C:\\mssql_backup\\backup.bak";

// Grab the db name from the config values
$dbName = $this->dbConfig['dbMainDatabaseName'];

$singleUserCmd = "USE [master] ALTER DATABASE [$dbName] SET single_user WITH ROLLBACK IMMEDIATE";
$restoreCmd = "USE [master] RESTORE DATABASE [$dbName] FROM DISK ='$backupDir' WITH REPLACE, RECOVERY";

$this->mssql->createCommand($singleUserCmd)->execute();
$this->mssql->createCommand($restoreCmd)->execute();

数据库似乎已恢复,但仍处于恢复状态(WITH RECOVERY应该处理的状态)。我尝试过切换RECOVERYREPLACE选项的不同变体,甚至将命令拆分为2个命令来执行,看到的结果相同。同样,命令在SQL Server Management Studio中按预期运行。

值得注意的是,我还有一个删除数据库的命令:

$singleUserCmd = "USE [master] ALTER DATABASE [$name] SET single_user WITH ROLLBACK IMMEDIATE";
$dropCmd = "USE [master] DROP DATABASE [$name]";

$this->mssql->createCommand($singleUserCmd)->execute();
$this->mssql->createCommand($dropCmd)->execute();

drop database命令使用相同的连接,用户等完美地工作,这让我觉得它可能不是权限问题。

我不确定从哪里开始,任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这不是Yii的问题,它实际上是PHP中PDO层的已知问题,请参阅SQL Server: Database stuck in “Restoring” state with PHP