使用sql-command cmdlet和还原cmdlet有什么区别?

时间:2013-09-09 18:18:02

标签: sql powershell

我正在考虑使用Powershell脚本在我的SQL Server 2008实例上自动执行还原过程,我发现有两种不同的方法可以实现:

  • 使用invoke-sqlcmd cmdlet
  • 加载Microsoft.SqlServer.Management.Smo.Restore并使用
  • 中的聚焦还原方法

我已阅读TechNet文档,但我认为我的问题可能过于基本,无法涵盖在那里。使用与以下一样简单的代码,并且将是静态的(迭代可能是备份的名称与其采用的日期一致):

RESTORE DATABASE Loadtest
    FROM DISK = 'D:\databases\LoadTest_09_09_2013.bak'
    WITH REPLACE
GO

为什么我会使用除了简单的invoke-sqlcmd之外的任何东西?看起来使用直接恢复类会使脚本变得更复杂。使用还原可以获得任何性能提升吗?

请注意,我在此工作站上安装了SQL Management Studio,完整的PowerShell脚本最终将进行其他一些测试环境维护(清除缓存等)。

1 个答案:

答案 0 :(得分:2)

Invoke-SqlCmd是一个可怕的黑客。

  • 如果要从文本文件运行命令,则该文件路径不能包含空格
  • 如果发生了不好的事情,您只会收到一条模糊的短信。
  • 它实际上调用了运行sqlcmd可执行文件,创建了另一个间接级别
  • 不支持GO(批处理)

SMO优势:

  • 错误在带有Exception / InnerException链的完整ErrorRecord中返回,因此您可以实际诊断事物
  • 它本身使用Powershell对象,所以你不只是抛出可能需要或不需要转义的字符串
  • 可以使用本机对象直接执行SQL命令,从而实现更丰富的调试和错误恢复