【发布时间】:2015-04-27 06:44:35
【问题描述】:
我得到了这个 cmdlet 来恢复数据库,如果没有使用现有数据库,它可以正常工作。
Restore-SqlDatabase -ServerInstance $databaseServerInstance -Database $database -BackupFile $backupLocation -ReplaceDatabase
但是当数据库正在使用时覆盖失败:
System.Data.SqlClient.SqlError:无法获得独占访问 因为数据库正在使用中
我不知道是否有一种简单的方法(通过参数)来覆盖它并终止连接或将数据库置于单用户模式。有这样的事吗?还是我必须切换到 SMO 才能执行比基本还原更复杂的操作?
我现在正在使用一种解决方法,即首先使用 SMO API 删除数据库,但如果可能的话,我希望能简化它。
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($databaseServerInstance)
# If the database exists then drop it otherwise Restore-SqlDatabase may fail if connections are open to it
if ($srv.Databases[$database] -ne $null)
{
$srv.KillAllProcesses($database)
$srv.KillDatabase($database)
}
Restore-SqlDatabase -ServerInstance $databaseServerInstance -Database $database -BackupFile $backupLocation -ReplaceDatabase
【问题讨论】:
-
感谢方便的 PS :) 帮助!
标签: sql powershell sql-server-2012