サブスクリプションを再初期化する方法 (RMO プログラミング)

次回の同期で新しいスナップショットが適用されるように、個別のサブスクリプションに再初期化のマークを付けることができます。レプリケーション管理オブジェクト (RMO) を使用することで、プログラムによってサブスクリプションを再初期化できます。使用するクラスは、サブスクリプションが属するパブリケーションの種類と、サブスクリプションの種類 (プッシュ サブスクリプションまたはプル サブスクリプション) に応じて変わります。

トランザクション パブリケーションに対するプル サブスクリプションを再初期化するには

  1. ServerConnection クラスを使用して、サブスクライバへの接続を作成します。

  2. TransPullSubscription クラスのインスタンスを作成し、PublicationNameDatabaseNamePublisherNamePublicationDBName を設定して、手順 1. の接続を ConnectionContext に設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。

    注意

    このメソッドが false を返す場合、手順 2. でサブスクリプション プロパティを不適切に設定したか、プル サブスクリプションが存在していません。

  4. Reinitialize メソッドを呼び出します。このメソッドにより、サブスクリプションを再初期化するようにマークされます。

  5. プル サブスクリプションを同期します。詳細については、「プル サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。

トランザクション パブリケーションに対するプッシュ サブスクリプションを再初期化するには

  1. ServerConnection クラスを使用して、パブリッシャへの接続を作成します。

  2. TransSubscription クラスのインスタンスを作成し、PublicationNameDatabaseNameSubscriberNameSubscriptionDBName を設定して、手順 1. の接続を ConnectionContext に設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。

    注意

    このメソッドが false を返す場合、手順 2. でサブスクリプション プロパティを不適切に設定したか、プッシュ サブスクリプションが存在していません。

  4. Reinitialize メソッドを呼び出します。このメソッドにより、サブスクリプションを再初期化するようにマークされます。

  5. プッシュ サブスクリプションを同期します。詳細については、「プッシュ サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。

マージ パブリケーションに対するプル サブスクリプションを再初期化するには

  1. ServerConnection クラスを使用して、サブスクライバへの接続を作成します。

  2. MergePullSubscription クラスのインスタンスを作成し、PublicationNameDatabaseNamePublisherNamePublicationDBName を設定して、手順 1. の接続を ConnectionContext に設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。

    注意

    このメソッドが false を返す場合、手順 2. でサブスクリプション プロパティを不適切に設定したか、プル サブスクリプションが存在していません。

  4. Reinitialize メソッドを呼び出します。再初期化の前に true を渡してサブスクライバの変更をアップロードするか、false を渡して再初期化し、サブスクライバの保留中の変更をすべて破棄します。このメソッドにより、サブスクリプションを再初期化するようにマークされます。

    注意

    サブスクリプションの有効期限が切れると、変更をアップロードできません。詳細については、「マージ サブスクリプションの有効期限切れおよび変更のアップロード」を参照してください。

  5. プル サブスクリプションを同期します。詳細については、「プル サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。

マージ パブリケーションに対するプッシュ サブスクリプションを再初期化するには

  1. ServerConnection クラスを使用して、パブリッシャへの接続を作成します。

  2. MergeSubscription クラスのインスタンスを作成し、PublicationNameDatabaseNameSubscriberNameSubscriptionDBName を設定して、手順 1. の接続を ConnectionContext に設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。

    注意

    このメソッドが false を返す場合、手順 2. でサブスクリプション プロパティを不適切に設定したか、プッシュ サブスクリプションが存在していません。

  4. Reinitialize メソッドを呼び出します。再初期化の前に true を渡してサブスクライバの変更をアップロードするか、false を渡して再初期化し、サブスクライバの保留中の変更をすべて破棄します。このメソッドにより、サブスクリプションを再初期化するようにマークされます。

    注意

    サブスクリプションの有効期限が切れると、変更をアップロードできません。詳細については、「マージ サブスクリプションの有効期限切れおよび変更のアップロード」を参照してください。

  5. プッシュ サブスクリプションを同期します。詳細については、「プッシュ サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。

使用例

次の例では、トランザクション パブリケーションに対するプル サブスクリプションを再初期化します。

          // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksProductTran";
            String publicationDbName = "AdventureWorks2008R2";
            String subscriptionDbName = "AdventureWorks2008R2Replica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            TransPullSubscription subscription;

            try
            {
                // Connect to the Subscriber.
                conn.Connect();

                // Define subscription properties.
                subscription = new TransPullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize();
                    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));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be reinitialized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2008R2"
Dim subscriptionDbName As String = "AdventureWorks2008R2Replica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As TransPullSubscription

Try
    ' Connect to the Subscriber.
    conn.Connect()

    ' Define subscription properties.
    subscription = New TransPullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize()
        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
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
    conn.Disconnect()
End Try

次の例では、最初にサブスクライバの保留中の変更をアップロードした後、マージ パブリケーションに対するプル サブスクリプションを初期化します。

          // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksSalesOrdersMerge";
            String publicationDbName = "AdventureWorks2008R2";
            String subscriptionDbName = "AdventureWorks2008R2Replica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            MergePullSubscription subscription;

            try
            {
                // Connect to the Subscriber.
                conn.Connect();

                // Define subscription properties.
                subscription = new MergePullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization after upload and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize(true);
                    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));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be synchronized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2008R2"
Dim subscriptionDbName As String = "AdventureWorks2008R2Replica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As MergePullSubscription

Try
    ' Connect to the Subscriber.
    conn.Connect()

    ' Define subscription properties.
    subscription = New MergePullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization after upload and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize(True)
        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
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try