2

我正在考虑使用 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 脚本最终将进行一些其他测试环境维护(清除缓存等)。

4

1 回答 1

2

Invoke-SqlCmd 是一个可怕的 hack。

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

SMO 优势:

  • 错误在带​​有 Exception/InnerException 链的完整 ErrorRecord 中返回,因此您可以实际诊断问题
  • 它本机使用 Powershell 对象,因此您不只是扔掉可能需要转义或不需要转义的字符串
  • SQL 命令可以直接使用原生对象执行,允许更丰富的调试和错误恢复
于 2013-09-11T20:38:26.837 回答