【发布时间】:2021-01-24 21:45:32
【问题描述】:
我正在尝试使用 Microsoft.SqlServer.Rmo.dll 通过 PowerShell 编写复制对象的脚本。复制类型是带有推送订阅的事务性。
我已经能够编写出版物、文章、PAL,但无法编写出版商订阅。
参考
[reflection.assembly]::LoadFrom("c:\\sql\\Microsoft.SqlServer.Rmo.dll") | out-null
脚本选项
$scriptargs =[Microsoft.SqlServer.Replication.ScriptOptions]::Creation `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludeCreateLogreaderAgent `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludeCreateMergeAgent `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludeCreateQueuereaderAgent `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludePublicationAccesses `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludeArticles `
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludePublisherSideSubscriptions` #one way tried to get the subscriptions
-bor [Microsoft.SqlServer.Replication.ScriptOptions]::IncludeGo
foreach($replicateddatabase in $repsvr.ReplicationDatabases)
{
if ($replicateddatabase.TransPublications.Count -gt 0)
{
foreach($tranpub in $replicateddatabase.TransPublications)
{
**[string] $myscript=$tranpub.script($scriptargs)** #Errors out here
writetofile $myscript $filename 0
}
}
}
我尝试的另一种方法是从 Scriptoptions 中排除 IncludePublisherSideSubscriptions 并尝试使用以下语句直接编写脚本
foreach($replicateddatabase in $repsvr.ReplicationDatabases)
{
if ($replicateddatabase.TransPublications.Count -gt 0)
{
foreach($tranpub in $replicateddatabase.TransPublications)
{
[string] $subs=$tranpub.TransSubscriptions.script($scriptargs) #another way but same error
writetofile $subs $filename 0
}
}
}
我尝试的第三种方式:
$repsvr.ReplicationDatabases.TransPublications.TransSubscriptions.Script($scriptargs)
总之,我发现以下link 非常有用,我的代码主要基于但只是卡在了发布方订阅之外的脚本中。感谢您的帮助。
【问题讨论】:
-
您似乎需要先加载
Microsoft.SqlServer.Replication.dll?另外,请注意,根据我的研究,Rmo命名空间/api 已被弃用。 -
您是否使用 [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Rmo') | 加载程序集Out-Null OR Add-Type -AssemblyName "Microsoft.SqlServer.Rmo, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" -ErrorAction Stop
-
您好,我认为您必须删除 $scriptargs 中存在的您的评论,此中断多行变量“#one way试图获取订阅”
-
@marsze 贬低...嗯?将对此进行更多研究。如果你能提供你看到它的链接,它会有所帮助。
-
@Sanpas 如果您看到#cmets,请忽略。它只是为了帮助观众,因为我无法将我没有使用 loadwithparticalname 的行加粗,因为我正在测试的服务器正在产生错误。因此,我使用了 LoadFrom 并从外部复制并在自定义位置提供了 Rmo.dll。
标签: sql-server powershell replication transactional-replication