【问题标题】:Unable to use SQLPS CmdLet Backup-SQLDatabase with -InputObject parameter无法使用带有 -InputObject 参数的 SQLPS CmdLet Backup-SQLDatabase
【发布时间】:2015-07-08 18:51:25
【问题描述】:

遇到相同的超时问题,发现 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 -? 说命令想要什么?顺便说一句,我猜这些对象可能是使用 Backup-SQLDatabase 使用的同一个库的不同版本创建的,这就是为什么有些服务器抱怨而其他服务器工作得很好。
  • 它不需要它,不,但如果我只传递实例名称和数据库名称而不是 smo 服务器对象,我无法设置超时并且任何持续时间超过 10 分钟的备份都会超时并且失败。我的秋季备份是继续使用我们内部开发的完全基于 smo 的 cmdlet,但我真的希望维护的代码更少:) 版本冲突也是我的猜测之一,以及为什么我尝试显式预加载特定smo 程序集的版本。
  • 我已经编辑了原始帖子以包括设置超时只是为了更好地说明我们正在尝试解决的 Backup-SQLDatabase 问题。
  • This 声称在 SQL Server 2012 SP1 的累积更新包 8 中为 Restore-SQLDatabase 修复了相同的问题。我认为这也会影响Backup-SQLDatabase,但我对 Connect 的信任程度低于对 Yahoo! 的信任!答案。显然,这对您来说不是一个完整的解决方案,但它可能会有所帮助。
  • @Bacon Bits,事实证明,我已经在这条路上了,并且在我打字时正在测试它。我在 SP1 上,刚刚更新到 SP2 并再次尝试使用 -Serverinstance 和 -Database 参数。

标签: sql sql-server powershell smo sqlps


【解决方案1】:

顺便说一句,我猜这些对象可能是使用 Backup-SQLDatabase 使用的同一库的不同版本创建的,这就是为什么有些服务器抱怨而其他服务器工作正常的原因。

由于您只是将此方法用作解决Backup-SqlDatabase 超时问题的方法,因此了解the same issue 在SQL Server 2012 SP1 的累积更新包8 中针对Restore-SQLDatabase 已修复可能会很有用。我认为这也会影响Backup-SQLDatabase。如果您无法修复使用 Backup-SQLDatabase 时遇到的错误,这可能会解决超时问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多