【发布时间】:2014-10-16 09:23:50
【问题描述】:
我的机器上安装了 SQL Server 2012 Developer。我也安装了 SQL Server 2014 管理对象,这可能是问题的根源。
我正在编写一个模块来通过 Powershell 自动执行一些常见的开发任务。其中之一是简单地将现有数据库复制到新数据库。
我知道备份和恢复有三种不同的方法:执行 SQL 语句、SMO 对象和 SQLPS cmdlet。我对 SQLPS 路线感兴趣。这是我的功能:
push-location
import-module sqlps -disablenamechecking
pop-location
function Copy-Database {
param (
[string] $database,
[string] $newDatabase
)
$backupFile = "$database-{0:yyyyMMddhhmmss}.bak" -f (get-date)
backup-sqldatabase -serverinstance $defaultServerInstance -database $database -backupfile $backupFile -copyonly
$solutionName = $newDatabase
$mdf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDb_Data", "$defaultDatabaseRootPath\$solutionName\$newDatabase.mdf")
$ldf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDb_Log", "$defaultDatabaseRootPath\$solutionName\$newDatabase.ldf")
restore-sqldatabase -serverinstance $defaultServerInstance -database $newDatabase -backupfile $backupFile -RelocateFile @($mdf,$ldf)
}
它备份数据库,但是当它尝试恢复时,我收到以下错误:
Restore-SqlDatabase:无法绑定参数“RelocateFile”。不能 将“Microsoft.SqlServer.Management.Smo.RelocateFile”值转换为 键入“Microsoft.SqlServer.Management.Smo.RelocateFile”以键入 "Microsoft.SqlServer.Management.Smo.RelocateFile"。
这里也描述了这个问题:Problems with RelocateFile property in the Restore-SqlDatabase cmdlet
我接受问题可能是程序集中的冲突。接受的答案提供了两个建议:
- 确保版本匹配。
- 使用 Microsoft.SqlServer.Management.Smo.Restore.SqlRestore 方法而不是 Restore-SqlDatabase cmdlet。
但是,他们只解释了如何做#2。我想知道如何使用Restore-SqlDatabase cmdlet 使其工作。
【问题讨论】:
-
您尝试过 32 位和 64 位 Powershell 会话吗?使用
[Environment]::Is64BitProcess确定您的身份。 -
@vonPryz 我没有,我会试一试
标签: sql-server powershell smo