サブスクライバでデータを検証する方法 (RMO プログラミング)
レプリケーションでは、サブスクライバのデータがパブリッシャのデータと一致するかどうかを、レプリケーション管理オブジェクト (RMO) を使用してプログラムから検証できます。使用するオブジェクトは、レプリケーション トポロジの種類によって異なります。トランザクション レプリケーションでは、パブリケーションのサブスクリプションをすべて検証する必要があります。
トランザクション パブリケーションのすべてのアーティクルについてデータを検証するには
ServerConnection クラスを使用して、パブリッシャへの接続を作成します。
TransPublication クラスのインスタンスを作成します。パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。ConnectionContext プロパティに、手順 1. で作成した接続を設定します。
LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。
ValidatePublication メソッドを呼び出します。次のパラメータを指定します。
検証が終了した後、ディストリビューション エージェントを停止するかどうかを示すブール値
これにより、アーティクルが検証対象としてマークされます。
まだディストリビューション エージェントを実行していない場合は、ディストリビューション エージェントを起動して、各サブスクリプションを同期します。詳細については、「プッシュ サブスクリプションを同期する方法 (RMO プログラミング)」または「プル サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。検証操作の結果は、エージェントの履歴に出力されます。詳細については、「レプリケーションをプログラムから監視する方法 (RMO プログラミング)」を参照してください。
マージ パブリケーションのすべてのサブスクリプションについてデータを検証するには
ServerConnection クラスを使用して、パブリッシャへの接続を作成します。
MergePublication クラスのインスタンスを作成します。パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。ConnectionContext プロパティに、手順 1. で作成した接続を設定します。
LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。
ValidatePublication メソッドを呼び出します。必要な ValidationOption を指定します。
各サブスクリプションについてマージ エージェントを実行して検証を開始するか、次回予定されているエージェントの実行を待ちます。詳細については、「プル サブスクリプションを同期する方法 (RMO プログラミング)」および「プッシュ サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。検証操作の結果は、エージェントの履歴に出力されます。この履歴は、レプリケーション モニタを使って表示できます。詳細については、「レプリケーションをプログラムから監視する方法 (RMO プログラミング)」を参照してください。
マージ パブリケーションの単一のサブスクリプションについてデータを検証するには
ServerConnection クラスを使用して、パブリッシャへの接続を作成します。
MergePublication クラスのインスタンスを作成します。パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。ConnectionContext プロパティに、手順 1. で作成した接続を設定します。
LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。
ValidateSubscription メソッドを呼び出します。サブスクライバの名前、検証対象のサブスクリプション データベース、および、必要な ValidationOption を指定します。
目的のサブスクリプションについてマージ エージェントを実行して検証を開始するか、次回予定されているエージェントの実行を待ちます。詳細については、「プル サブスクリプションを同期する方法 (RMO プログラミング)」および「プッシュ サブスクリプションを同期する方法 (RMO プログラミング)」を参照してください。検証操作の結果は、エージェントの履歴に出力されます。この履歴は、レプリケーション モニタを使って表示できます。詳細については、「レプリケーションをプログラムから監視する方法 (RMO プログラミング)」を参照してください。
使用例
次の例では、トランザクション パブリケーションのすべてのサブスクリプションを、行数検証の対象としてマークします。
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks";
TransPublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// If we can't get the properties for this publication,
// throw an application exception.
if (publication.LoadProperties())
{
// Initiate validataion for all subscriptions to this publication.
publication.ValidatePublication(ValidationOption.RowCountOnly,
ValidationMethod.ConditionalFast, false);
// If not already running, start the Distribution Agent at each
// Subscriber to synchronize and validate the subscriptions.
}
else
{
throw new ApplicationException(String.Format(
"Settings could not be retrieved for the publication. " +
"Ensure that the publication {0} exists on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Do error handling here.
throw new ApplicationException(
"Subscription validation could not be initiated.", ex);
}
finally
{
conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks"
Dim publication As TransPublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' If we can't get the properties for this publication,
' throw an application exception.
If publication.LoadProperties() Then
' Initiate validataion for all subscriptions to this publication.
publication.ValidatePublication(ValidationOption.RowCountOnly, _
ValidationMethod.ConditionalFast, False)
' If not already running, start the Distribution Agent at each
' Subscriber to synchronize and validate the subscriptions.
Else
Throw New ApplicationException(String.Format( _
"Settings could not be retrieved for the publication. " + _
"Ensure that the publication {0} exists on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Do error handling here.
Throw New ApplicationException( _
"Subscription validation could not be initiated.", ex)
Finally
conn.Disconnect()
End Try
次の例では、マージ パブリケーションの特定のサブスクリプションを、行数検証の対象としてマークします。
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
MergePublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the publication.
publication = new MergePublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// If we can't get the properties for this merge publication, then throw an application exception.
if (publication.LoadProperties())
{
// Initiate validation of the specified subscription.
publication.ValidateSubscription(subscriberName,
subscriptionDbName, ValidationOption.RowCountOnly);
// Start the Merge Agent to synchronize and validate the subscription.
}
else
{
throw new ApplicationException(String.Format(
"Settings could not be retrieved for the publication. " +
"Ensure that the publication {0} exists on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Do error handling here.
throw new ApplicationException(String.Format(
"The subscription at {0} to the {1} publication could not " +
"be validated.", subscriberName, publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publication As MergePublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the publication.
publication = New MergePublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' If we can't get the properties for this merge publication, then throw an application exception.
If publication.LoadProperties() Then
' Initiate validation of the specified subscription.
publication.ValidateSubscription(subscriberName, _
subscriptionDbName, ValidationOption.RowCountOnly)
' Start the Merge Agent to synchronize and validate the subscription.
Else
Throw New ApplicationException(String.Format( _
"Settings could not be retrieved for the publication. " + _
"Ensure that the publication {0} exists on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Do error handling here.
Throw New ApplicationException(String.Format( _
"The subscription at {0} to the {1} publication could not " + _
"be validated.", subscriberName, publicationName), ex)
Finally
conn.Disconnect()
End Try