@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

SQL SERVER 2005 レプリケーションを.NETにて

1
投稿者投稿内容
moimoimen
会議室デビュー日: 2007/09/13
投稿数: 3
投稿日時: 2007-09-13 17:28
レプリケーションを組み、プログラム(Visual Basic.NET)から、レプリケーションを動かしたいと考えています。

・SQL SERVER 認証を使用して接続する
・マージ パブリケーションを選択する
・サブスクリプションのサーバは、SQL SERVER 2005 EXPRESSである

といったことが条件です。

そこで、SQL SERVER Management Studioにて、レプリケーションの作成する際、セキュリティ設定を以下のように行いました。

●パブリケーションの設定
・スナップショットエージェントのセキュリティ
→SQL SERVER エージェントサービスのアカウントで実行する
・パブリッシャへの接続
→「次のSQL SERVER ログインを使用する」を選択し、ログイン名等を入力する

●サブスクリプションの設定
・サブスクリプションを同期するときに、ディストリビューションエージェントの実行で必要となるドメイン、アカウント
→SQL SERVER エージェントサービスのアカウントで実行する
・ディストリビュータに接続
→プロセスのアカウントを借用する
・サブスクライバに接続
→「次のSQL SERVER ログインを使用する」を選択し、ログイン名等を入力する

尚、SQL SERVER Management Studioから「同期」をとると正常に動きます。

プログラムは、以下のサイトより、
「マージ パブリケーションへのプッシュ サブスクリプションを同期します。エージェントはエージェント ジョブを使用して非同期的に起動されます。」
の箇所を参考にしています。

動かしたところ、
>If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
の箇所で、
「A subscription to 'AdvWorksSalesOrdersMerge' does not exists on SERVER_S\EXPRESS」
というエラーが出てしまいます。

以下がそのソースなのですが、どなたかヒントだけでも、ご教授願えないでしょうか??

subscriptionの箇所にも、SQL SERVER 接続の記述が必要なのかなとは思いますが、
その場合の記述を教えていただけないでしょうか??
よくわからないまま、以下の記述は試しましたが、解決しませんでした。

subscription.SubscriberSecurity.WindowsAuthentication = False
subscription.SubscriberSecurity.SqlStandardLogin = "aaa"
subscription.SubscriberSecurity.SqlStandardPassword = "bbb"

subscription.PublisherSecurity.WindowsAuthentication = False
subscription.PublisherSecurity.SqlStandardLogin = "aaa"
subscription.PublisherSecurity.SqlStandardPassword = "bbb"

===========================================================
問題のプログラム

' Define the server, publication, and database names.
Dim subscriberName As String = "SERVER_S\EXPRESS"
Dim publisherName As String = "SERVER_P"
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

conn.LoginSecure = False
conn.Login = "aaa"
conn.Password = "bbb"

Dim subscription As MergeSubscription

' Connect to the Publisher.
conn.Connect()

' Define push subscription.
subscription = New MergeSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = publicationDbName
subscription.PublicationName = publicationName
subscription.SubscriptionDBName = subscriptionDbName
subscription.SubscriberName = subscriberName

' If the push subscription and the job exists, start the agent job.
If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
' Start the Merge Agent asynchronously.
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
conn.Disconnect()
moimoimen
会議室デビュー日: 2007/09/13
投稿数: 3
投稿日時: 2007-09-13 17:32
すみません、参考サイトを書き損じました。こちらです。
http://msdn2.microsoft.com/ja-jp/library/ms146910.aspx
moimoimen
会議室デビュー日: 2007/09/13
投稿数: 3
投稿日時: 2007-09-13 18:26
すみません、上記の分は、自己解決しました。
ただ、別のエラーが発生しました。

>subscription.SynchronizeWithJob()

の箇所で

「Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。」

というものです。
1

スキルアップ/キャリアアップ(JOB@IT)