0

我正在从没有安装 SQLPS(Ms SQL Server 数据库引擎)的客户端计算机(Win7)上运行 PS 脚本。

因此,我通过导入远程 ps-session 来实现:

  1. 为 SQL Server 创建远程 PS-Session

$sourceSQLRemoteSession = New-PSSession -ComputerName $SQLServerHostname -身份验证协商 -Credential $PSOCredentialObject

  1. 导入 SQLPS 模块

Import-PSSession -Session $sourceSQLRemoteSession -Module SQLPS -DisableNameChecking

  1. 运行 SQL 备份

Backup-SqlDatabase -ServerInstance "destinationSQL\SQLInstance" -Database "blabla_db" -BackupFile "c:\blabla.bak" -Credential $PSOCredentialObject

问题是,如果我需要将数据库恢复到不同的 SQL 数据库服务器,需要我使用“RelocateFile”对象,例如:

$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("uat_project1_db", "c:\SQLDATA\blabla.mdf")
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("uat_project1_db_Log", "c:\SQLDATA\blabla.ldf")
Restore-SqlDatabase -ServerInstance "Computer\Instance" -Database "MainDB" -BackupFile "\\mainserver\databasebackup\MainDB.trn" -RelocateFile @($RelocateData,$RelocateLog)

当我运行新对象时,它似乎不喜欢它:

错误:

New-Object : Cannot find type [Microsoft.SqlServer.Management.Smo.RelocateFile]: verify that the assembly containing this type is loaded.At line:1 char:17
+ ... ocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFil ...
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo         : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

解决这个问题的最佳方法是什么?

谢谢

4

1 回答 1

1

您最好的方法是使用dbaTools。一探究竟!您可以从 PowerShell 库进行安装,但如果您运行的是 Windows 7,则可能必须将 PowerShell 升级到 v3 或更高版本(升级到v5!)才能使用 PowerShell 库。

dbaTools 有一个用于备份和恢复 DB 的命令。

这是他们文档中的一个示例:

Copy-DbaDatabase -Source sqlserver2014a -Destination sqlcluster -Exclude Northwind, pubs, AdventureWorks -BackupRestore -NetworkShare \\\\fileshare\sql\migration

希望有帮助

于 2017-11-21T16:23:22.433 回答