アーティクルのプロパティの表示および変更
適用対象: SQL Server Azure SQL Managed Instance
このトピックでは、SQL Server Management Studio、Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して SQL Server のアーティクル プロパティを表示および変更する方法について説明します。
このトピックの内容
作業を開始する準備:
アーティクルのプロパティを表示および変更するために使用するもの:
始める前に
制限事項と制約事項
- パブリケーションの作成後には変更できないプロパティや、パブリケーションへのサブスクリプションがある場合には変更できないプロパティもあります。 変更できないプロパティは、読み取り専用として表示されます。
推奨事項
- パブリケーションの作成後、プロパティの変更によっては新しいスナップショットが必要となります。 パブリケーションにサブスクリプションが含まれている場合、変更によっては、すべてのサブスクリプションを再初期化する必要もあります。 詳細については、「Change Publication and Article Properties」 (パブリケーションおよびアーティクルのプロパティの変更) と「既存のパブリケーションでのアーティクルの追加および削除」を参照してください。
SQL Server Management Studio を使用する
[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスで、アーティクルのプロパティを表示および変更します。このダイアログ ボックスは、Microsoft SQL Server Management Studio およびレプリケーション モニターで使用できます。 レプリケーション モニターの起動の詳細については、「Start the Replication Monitor」 (レプリケーション モニターの開始) を参照してください。
[全般] ページ。パブリケーションの名前と説明、データベースの名前、パブリケーションの種類、およびサブスクリプションの有効期限の設定が含まれています。
[アーティクル] ページ。パブリケーションの新規作成ウィザードの [アーティクル] ページに相当します。 このページでは、アーティクルの追加や削除、およびアーティクルのプロパティや列のフィルター選択の変更を行うことができます。
[行のフィルター選択] ページ。パブリケーションの新規作成ウィザードの [テーブル行のフィルター選択] ページに相当します。 このページでは、すべての種類のパブリケーションの静的行フィルターや、マージ パブリケーションのパラメーター化された行フィルターと結合フィルターを追加、編集、および削除できます。
[スナップショット] ページ。このページでは、スナップショットの形式と場所、スナップショットを圧縮するかどうか、およびスナップショットの適用の前後に実行するスクリプトを指定できます。
[FTP スナップショット] ページ (スナップショット パブリケーション、トランザクション パブリケーション、および SQL Server 2005 より前のバージョンを実行しているパブリッシャーのマージ パブリケーションの場合)。このページでは、サブスクライバーがスナップショット ファイルをファイル転送プロトコル (FTP) でダウンロードできるかどうかを指定できます。
[FTP スナップショットとインターネット] ページ (SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーションの場合)。このページでは、サブスクライバーがスナップショット ファイルを FTP でダウンロードできるかどうか、および HTTPS でサブスクリプションを同期できるかどうかを指定できます。
[サブスクリプション オプション] ページ。このページでは、すべてのサブスクリプションに適用されるさまざまなオプションを設定できます。 利用できるオプションは、パブリケーションの種類によって異なります。
[パブリケーション アクセス リスト] ページ。このページでは、パブリケーションにアクセスできるログインやグループを指定できます。
[エージェント セキュリティ] ページ。このページでは、エージェントの実行やレプリケーション トポロジ内のコンピューターへの接続に使用されるアカウントの設定にアクセスできます。この設定を使用するエージェントは、すべてのパブリケーションのスナップショット エージェント、すべてのトランザクション パブリケーションのログ リーダー エージェント、およびキュー更新サブスクリプションを許可するトランザクション パブリケーションのキュー リーダー エージェントです。
[データ パーティション] ページ (SQL Server 2005 以降を実行しているパブリッシャーからのマージ パブリケーションの場合)。このページでは、パラメーター化されたフィルターを使用するパブリケーションのサブスクライバーが、スナップショットを利用できない場合にスナップショットを要求できるかどうかを指定できます。 また、1 つ以上のパーティションのスナップショットを 1 回生成したり、スケジュールによって定期的に生成したりすることもできます。
アーティクルのプロパティを表示および変更するには
[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [アーティクル] ページで、アーティクルを選択し、[アーティクルのプロパティ] をクリックします。
プロパティの変更を適用するアーティクルを選択します。
[反転表示された <ObjectType> アーティクルのプロパティを設定] をクリックし、[アーティクルのプロパティ - <ObjectName>] ダイアログ ボックスを表示します。このダイアログ ボックスで行われたプロパティの変更は、[アーティクル] ページのオブジェクト ペインで反転表示されたオブジェクトだけに適用されます。
[すべての <ObjectType> アーティクルのプロパティを設定] をクリックし、すべての <ObjectType>アーティクルのプロパティ ダイアログ ボックスを表示します。このダイアログ ボックスで行われたプロパティの変更は、パブリケーションが選択されていないオブジェクトも含めた、[アーティクル] ページのオブジェクト ペインにあるこの種類のすべてのオブジェクトに適用されます。
Note
[すべての <ObjectType> アーティクルのプロパティ] ダイアログ ボックスで行われたプロパティの変更は、[アーティクルのプロパティ - <ObjectName> ダイアログ ボックスで以前行われたすべての変更をオーバーライドします。 たとえば、あるオブジェクトの種類のすべてのアーティクルに対して複数の既定を設定し、かつそれぞれのオブジェクトに対してプロパティを設定する場合には、最初にすべてのアーティクルに対する既定を設定します。 次に、それぞれのオブジェクトに対してプロパティを設定します。
必要に応じてプロパティを変更し、 [OK]をクリックします。
[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスで、[OK] をクリックします。
Transact-SQL の使用
アーティクルのプロパティは、レプリケーションのストアド プロシージャを使用して、プログラムから変更および取得できます。 使用するストアド プロシージャは、アーティクルが属するパブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションに属するアーティクルのプロパティを表示するには
@publication
パラメーターにパブリケーションの名前、@article
パラメーターにアーティクルの名前を指定して、sp_helparticle を実行します。@article
を指定しない場合は、パブリケーションのすべてのアーティクルに関する情報が返されます。テーブル アーティクルについて sp_helparticlecolumns を実行し、ベース テーブルで使用できるすべての列を一覧表示します。
スナップショット パブリケーションまたはトランザクション パブリケーションに属するアーティクルのプロパティを変更するには
@property
パラメーターに変更するアーティクルのプロパティを指定し、@value
パラメーターにこのプロパティの新しい値を指定して、sp_changearticle を実行します。Note
変更で新しいスナップショットを生成する必要がある場合は、
@force_invalidate_snapshot
に対して値1
を指定する必要もあり、変更でサブスクライバーを再初期化する必要がある場合は、@force_reinit_subscription
に対して値1
を指定する必要もあります。 変更時に新しいスナップショットの生成または再初期化が必要となるプロパティの詳細については、「Change Publication and Article Properties」(パブリケーションとアーティクルのプロパティの変更) を参照してください。
マージ パブリケーションに属するアーティクルのプロパティを表示するには
@publication
パラメーターにパブリケーションの名前、@article
パラメーターにアーティクルの名前を指定して、sp_helpmergearticle を実行します。 これらのパラメーターを指定しない場合、パブリケーションまたはパブリッシャーのすべてのアーティクルに関する情報が返されます。テーブル アーティクルに対して sp_helpmergearticlecolumn を実行し、ベース テーブルで使用できるすべての列を一覧表示します。
マージ パブリケーションに属するアーティクルのプロパティを変更するには
@property
パラメーターに変更するアーティクルのプロパティを指定し、@value
パラメーターにこのプロパティの新しい値を指定して、sp_changemergearticle を実行します。Note
変更で新しいスナップショットを生成する必要がある場合は、
@force_invalidate_snapshot
に対して値1
を指定する必要もあり、変更でサブスクライバーを再初期化する必要がある場合は、@force_reinit_subscription
に対して値1
を指定する必要もあります。 変更時に新しいスナップショットの生成または再初期化が必要となるプロパティの詳細については、「Change Publication and Article Properties」(パブリケーションとアーティクルのプロパティの変更) を参照してください。
例 (Transact-SQL)
パブリッシュされたアーティクルのプロパティを取得するトランザクション レプリケーションの例を、次に示します。
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorks2022]
EXEC sp_helparticle
@publication = @publication;
GO
パブリッシュされたアーティクルのスキーマ オプションを変更するトランザクション レプリケーションの例を、次に示します。
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));
-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle
@publication = @publication,
@article = @article,
@property = N'schema_option',
@value = @option,
@force_invalidate_snapshot = 1;
GO
パブリッシュされたアーティクルのプロパティを取得するマージ レプリケーションの例を、次に示します。
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
USE [AdventureWorks2022]
EXEC sp_helpmergearticle
@publication = @publication;
GO
パブリッシュされたアーティクルの競合検出の設定を変更するマージ レプリケーションの例を、次に示します。
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';
-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property = N'column_tracking',
@value = N'true',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
レプリケーション管理オブジェクト (RMO) の使用
アーティクルのプロパティは、レプリケーション管理オブジェクト (RMO) を使用してプログラムから変更できます。 アーティクルのプロパティを表示または変更する際に使用する RMO のクラスは、アーティクルが属しているパブリケーションの種類によって異なります。
スナップショット パブリケーションまたはトランザクション パブリケーションに属しているアーティクルのプロパティを表示または変更するには
ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。
TransArticle クラスのインスタンスを作成します。
Name、 PublicationName、 DatabaseName の各プロパティを設定します。
手順 1. で作成した接続を ConnectionContext プロパティに設定します。
LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドから falseが返された場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。
(省略可) プロパティを変更するには、 TransArticle の設定可能なプロパティに新しい値を設定します。
(省略可) P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges に CachePropertyChangesを指定した場合、 CommitPropertyChanges メソッドを呼び出してサーバーに変更をコミットします。 CachePropertyChanges に値 false (既定値) を指定した場合、変更は直ちにサーバーに送られます。
マージ パブリケーションに属しているアーティクルのプロパティを表示または変更するには
ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。
MergeArticle クラスのインスタンスを作成します。
Name、 PublicationName、 DatabaseName の各プロパティを設定します。
手順 1. で作成した接続を ConnectionContext プロパティに設定します。
LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドから falseが返された場合、手順 3. で指定したアーティクルのプロパティが正しく定義されていないか、アーティクルが存在していません。
(省略可) プロパティを変更するには、 MergeArticle の設定可能なプロパティに新しい値を設定します。
(省略可) P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges に CachePropertyChangesを指定した場合、 CommitPropertyChanges メソッドを呼び出してサーバーに変更をコミットします。 CachePropertyChanges に値 false (既定値) を指定した場合、変更は直ちにサーバーに送られます。
例 (RMO)
次の例では、マージ アーティクルに変更を加え、アーティクル用のビジネス ロジック ハンドラーを指定しています。
// Define the Publisher, publication, and article names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
string articleName = "SalesOrderHeader";
// Set the friendly name of the business logic handler.
string customLogic = "OrderEntryLogic";
MergeArticle article = new MergeArticle();
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the article.
article.ConnectionContext = conn;
article.Name = articleName;
article.DatabaseName = publicationDbName;
article.PublicationName = publicationName;
// Load the article properties.
if (article.LoadProperties())
{
article.ArticleResolver = customLogic;
}
else
{
// Throw an exception of the article does not exist.
throw new ApplicationException(String.Format(
"{0} is not published in {1}", articleName, publicationName));
}
}
catch (Exception ex)
{
// Do error handling here and rollback the transaction.
throw new ApplicationException(String.Format(
"The business logic handler {0} could not be associated with " +
" the {1} article.",customLogic,articleName), ex);
}
finally
{
conn.Disconnect();
}
' Define the Publisher, publication, and article names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim articleName As String = "SalesOrderHeader"
' Set the friendly name of the business logic handler.
Dim customLogic As String = "OrderEntryLogic"
Dim article As MergeArticle = New MergeArticle()
' 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 article.
article.ConnectionContext = conn
article.Name = articleName
article.DatabaseName = publicationDbName
article.PublicationName = publicationName
' Load the article properties.
If article.LoadProperties() Then
article.ArticleResolver = customLogic
Else
' Throw an exception of the article does not exist.
Throw New ApplicationException(String.Format( _
"{0} is not published in {1}", articleName, publicationName))
End If
Catch ex As Exception
' Do error handling here and rollback the transaction.
Throw New ApplicationException(String.Format( _
"The business logic handler {0} could not be associated with " + _
" the {1} article.", customLogic, articleName), ex)
Finally
conn.Disconnect()
End Try