遇到相同的超时问题后发现here并尝试了解决方法,我发现我得到了错误:
Backup-SqlDatabase : Cannot bind parameter 'InputObject'. Cannot convert the "[instDW_QA0]" value of type "Microsoft.SqlServer.Management.Smo.Server" to type "Microsoft.SqlServer.Management.Smo.Server".
At line:21 char:50
+ Backup-SQLDatabase -Database msdb -InputObject $server -BackupAction Database ...
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Backup-SqlDatabase], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.SqlServer.Management.PowerShell.BackupSqlDatabaseCommand
运行简单脚本时:
$ServerName = "instDW_QA0"
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $ServerName
$server.ConnectionContext.StatementTimeout = 0
$db = $server.Databases["msdb"]
Backup-SQLDatabase -Database msdb -InputObject $server -BackupAction Database -CompressionOption ON -CopyOnly -Initialize
这在我尝试过的三台Win7机器上发生,但是脚本在我尝试过的所有服务器(Win2012)上都可以正常运行。三台Win7机器混合了已安装的软件。一个安装了SQL 2008R2、2012和2014,另一个仅安装了2008R2和2012。一个安装了PS 2.0,另外两个安装了PS 3.0。服务器再次混合在一起。所有人都安装了PS 3.0,但有些人装有SQL2008R2和SQL2012,有些人只有SQL2012,而我尝试过的只有SQL2014,但它们都可以。唯一一致的区别是操作系统,即Win7与Win2012,但这对我来说潜在的原因没有多大意义。
错误本身令人困惑,它引用的两种类型是相同的。在运行脚本之前,我曾尝试加载特定的SMO程序集版本(11和12),但这似乎无济于事。
有任何想法吗?提前致谢。
最佳答案
附带地,我猜想对象可能是使用Backup-SQLDatabase使用的同一库的不同版本创建的,这就是为什么有些服务器抱怨而其他服务器工作得很好的原因。
由于您仅使用此方法作为Backup-SqlDatabase
超时问题的解决方法,因此了解SQL Server 2012 SP1的累积更新包8中的Restore-SQLDatabase
的Backup-SQLDatabase
已修复是有用的。我认为这也会影响Backup-SQLDatabase
。如果您无法解决ojit_code遇到的错误,则可以解决超时问题。