我有一个Yii控制台应用程序(使用Yiv1.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();执行该命令,但从未创建备份。我不确定该命令在哪里出错,因为它使用执行得非常好。
对于还原功能,代码如下:
$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应该处理该状态)。我尝试过切换RECOVERY和REPLACE选项的不同变体,甚至将命令拆分成两个命令来执行,结果是相同的。同样,这些命令在中按预期运行。
值得注意的是,我还拥有一个删除数据库的命令:
$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数据库命令使用相同的连接、用户等完美地工作,这使我认为这可能不是权限问题。
我不知道从哪里出发,如果有任何建议,我将不胜感激。
发布于 2014-06-13 19:38:28
这不是Yii的问题,它实际上是PHP层中的一个已知问题,请参阅SQL Server: Database stuck in “Restoring” state with PHP
https://stackoverflow.com/questions/24190722
复制相似问题