<#===========================创建请求订阅===========================#>
##分发代理程序执行账户
#------------------------------------------------------------
$serverInstance="WINSERVER01\SQL2008DE01"
$userName="sa"
$password="sql20081"
##设置域账号,应用于同步复制
#------------------------------------------------------------
$RAccount="TN\SQLAccount"
$RPassword="Sql123456"
##连接到订阅服务器账户
#------------------------------------------------------------
$SubserverInstance="TON-WINXP001\SQL2008DE"
$SubuserName="sa"
$Subpassword="WinXP00120081"
##发布对象
#------------------------------------------------------------
$DataBase="ReplicationDB"
$TransPublicationName=“ReplicationDB_Tran_”
##是否要初始化
#------------------------------------------------------------
$invalidate=$true
<#================================================================#>
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Rmo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
#Step 1: 创建连接
$ServerConnection =New-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
$SubServerConnection =New-object "Microsoft.SqlServer.Management.Common.ServerConnection" $SubserverInstance,$SubuserName, $Subpassword
#Step 2:
Try
{
$ServerConnection.Connect()
$SubServerConnection.Connect()
if ($ServerConnection.IsOpen -And $SubServerConnection.IsOpen)
{
$TransPublication=New-object "Microsoft.SqlServer.Replication.TransPublication" $TransPublicationName,$DataBase,$ServerConnection
if ($TransPublication.LoadProperties() -eq $true)
{
##设置请求订阅
if($TransPublication.Attributes -notmatch "AllowPull")
{
##使用到位运算符OR(inclusive) "-bor" ,如果要刪除某一特征就使用"-bxor"
$TransPublication.Attributes =$TransPublication.Attributes -bor [Microsoft.SqlServer.Replication.PublicationAttributes]::AllowPull
}
$subscriptionDBName=$TransPublication.DatabaseName
$publisherName=$serverInstance
$publicationDBName=$TransPublication.DatabaseName
$publicationName=$TransPublication.Name
$TransSubscription=New-object "Microsoft.SqlServer.Replication.TransPullSubscription" $subscriptionDBName,$publisherName,$publicationDBName,$publicationName,$SubServerConnection
if($TransSubscription.LoadProperties() -eq $false)
{
##设置分发代理程序账号(Windows帳戶)
$TransSubscription.SynchronizationAgentProcessSecurity.Login=$RAccount
$TransSubscription.SynchronizationAgentProcessSecurity.Password=$RPassword
##设置分发服务器登录账号(SQL Server帳戶)
$TransSubscription.DistributorSecurity.WindowsAuthentication=$false
$TransSubscription.DistributorSecurity.SqlStandardLogin=$userName
$TransSubscription.DistributorSecurity.SqlStandardPassword=$password
$TransSubscription.CreateSyncAgentByDefault=$true
#每天执行
$TransSubscription.AgentSchedule.FrequencyType=[Microsoft.SqlServer.Replication.ScheduleFrequencyType]::Daily
#分钟
$TransSubscription.AgentSchedule.FrequencySubDay=[Microsoft.SqlServer.Replication.ScheduleFrequencySubDay]::Minute
#多少分钟执行一次
$TransSubscription.AgentSchedule.FrequencySubDayInterval=1
$TransSubscription.Create()
#是否初始化
if($invalidate -eq $false)
{
$SyncType=[Microsoft.SqlServer.Replication.SubscriptionSyncType]::ReplicationSupportOnly
}
Else
{
$SyncType=[Microsoft.SqlServer.Replication.SubscriptionSyncType]::Automatic
}
#设置订阅服务器是否只读
$subscriberType=[Microsoft.SqlServer.Replication.TransSubscriberType]::ReadOnly
#在发布服务器上注册订阅服务器
$TransPublication.MakePullSubscriptionWellKnown($SubserverInstance,$subscriptionDBName,$SyncType,$subscriberType)
#启动快照代理作业
if ($TransPublication.SnapshotAvailable -eq $false )
{
$TransPublication.StartSnapshotGenerationAgentJob()
}
Write-Host "订阅 "$TransSubscription.Name" 创建完成!"
}
Else
{
Write-Host "订阅 "$TransSubscription.Name" 已创建!"
}
}
Else
{
Write-Host "发布对象 $TransPublicationName 不存在!"
}
}
}
Catch
{
Write-Error $_
}