文書番号: 820675 - 最終更新日: 2004年4月7日 - リビジョン: 1.3

[HOWTO] 双方向のトランザクション レプリケーションを実装する方法

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。

目次

すべて展開する | すべて折りたたむ

概要

この資料では、双方向のトランザクション レプリケーションの実装方法を順を追って説明します。また、双方向のトランザクション レプリケーションで発生する可能性のある問題についても説明します。

双方向のトランザクション レプリケーション

双方向のトランザクション レプリケーションとは、1 台のサーバーが同じデータのパブリッシャにもサブスクライバにもなることができる構成です。レプリケーションに参加している各サーバーがローカル データベースに加えられた変更を他のサーバーにレプリケートするため、変更が最初に行われたサーバーにその変更が他のサーバーから伝達されることはありません。

たとえば、2 台のサーバー (サーバー A およびサーバー B) が、以下の条件を 2 つとも満たしている場合、この 2 台は双方向のトランザクション レプリケーション構成であると言います。
  • サーバー A のテーブル T1 に加えられた変更がサーバー B のテーブル T1 にレプリケートされます。
  • サーバー B のテーブル T1 に加えられた変更がサーバー A のテーブル T1 にレプリケートされます。
したがって、サーバー A で行われた変更がサーバー B にレプリケートされますが、その変更がサーバー B からサーバー A に伝達されることはありません。レプリケーションでは、最初に変更が行われたサーバーに変更を送信するかどうかを判断するため、ディストリビュータによってループバック検出メカニズムが使用されます。

双方向のトランザクション レプリケーションのトポロジの計画

双方向のトランザクション レプリケーションでは、サーバーのうち 1 台が中央サブスクライバとして機能し、他のサーバーはすべて中央サブスクライバに対してデータをサブスクライブします。したがって、あるサーバーで行われた変更は、いったんすべて中央サブスクライバにレプリケートされた後、中央サブスクライバから、レプリケーションに参加している他のすべてのサーバーにレプリケートされます。しかし、ループバック検出メカニズムが機能するため、ディストリビュータから最初に変更が行われたサーバーに変更が伝達されることはありません。

たとえば、3 台のサーバー (サーバー A、サーバー B、およびサーバー C) が双方向のトランザクション レプリケーションに参加し、サーバー A が中央サブスクライバの場合、パブリッシャとサブスクライバは次のように維持されます。
  • サーバー A からサーバー B およびサーバー C にデータがパブリッシュされます。
  • サーバー A がサーバー B およびサーバー C からデータをサブスクライブします。
  • サーバー B のパブリッシュおよびサブスクライブの相手は、サーバー A のみです。
  • サーバー C のパブリッシュおよびサブスクライブの相手は、サーバー A のみです。
その結果、サーバー B で行われた変更は、すべてサーバー A およびサーバー C にレプリケートされます。

双方向のトランザクション レプリケーションの競合

レプリケーションに参加しているサーバーの 1 台で変更を行うと、その変更は他のすべてのサーバーにレプリケートされます。このレプリケーションの間に競合が発生してレプリケーションが失敗する場合があります。以下に、想定される競合とその回避方法を示します。
  • 1 台のサーバーのテーブルにレコードを挿入するとき、そのレコードのキーと同じキーを持つ別のレコードがレプリケーションに参加している他のサーバーに既に存在している場合、レプリケーションによって他のサーバーに変更が伝達されません。

    推奨される回避方法 : レプリケーションに参加しているサーバーごとに異なるキーを使用します。そのためには、レプリケーションに参加しているそれぞれのサーバーに割り当てるキーの範囲をあらかじめ決めておきます。また、サーバーごとに複合キーを使用することもできます。
  • UPDATE ステートメントの実行時、更新対象の行が他のサーバーで削除されていると、そのサーバーには更新が適用されず、レプリケーションがエラーで失敗します。

    推奨される回避方法 : 以下の手順のいずれかを実行します。
    • 更新を行うカスタム ストアド プロシージャの実際の UPDATE ステートメントの後にある @@ROWCOUNT チェックを削除します。

      または
    • ディストリビューション エージェントで -Skiperrors パラメータを使用して、このエラーをスキップします。トランザクション レプリケーションでエラーをスキップする場合の詳細については、次のマイクロソフト Web サイトを参照してください。
      http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replmon_9vjn.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replmon_9vjn.asp)
      または
    • 更新を行うストアド プロシージャで、UPDATE ステートメントを実行する前にレコードを検索します。レコードが存在しない場合、UPDATE ステートメントをバイパスすると、すべてのサブスクライバからそのレコードが削除されます。
  • 別のサーバーで更新中のレコードの列を更新すると、2 台のサーバー間でデータの違いが発生することがあります。

    推奨される回避方法 : 更新対象のデータを更新中のサーバーがあるかどうかを検出し、必要な処理を行います。そのためには、更新用のカスタム ストアド プロシージャを変更し、ストアド プロシージャを XCALL 構文で呼び出します。XCALL 構文では、ストアド プロシージャを呼び出す前のすべての列の値と、列の更新後の値を得ることができます。現在の列の値と更新ストアド プロシージャを呼び出す前の値とを比較し、2 つの値が異なる場合、同じ列を別のサーバーが更新中であると判断できます。ストアド プロシージャをカスタマイズして、どちらの値を保持するかを選択できます。XCALL の使用法の詳細については、次のマイクロソフト Web サイトを参照してください。
    http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replimpl_4hwz.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replimpl_4hwz.asp)
    : XCALL 構文を指定すると、パブリケーション中に sp_addarticle を使用して、対応する更新ストアド プロシージャまたは削除ストアド プロシージャを呼び出すことができます。また、XCALL 構文は SQL Server Enterprise Manager を使用して指定することもできます。これを行うには、以下の手順を実行します。
    1. SQL Server Enterprise Manager で、対象のパブリケーションを指定します。
    2. パブリケーションを右クリックし、[プロパティ] をクリックします。
    3. [アーティクル] タブをクリックし、アーティクルを選択し、アーティクルの横にあるプロパティ ボタン [(...)] をクリックします。
    4. [テーブル アーティクルのプロパティ] ダイアログ ボックスで、[コマンド] タブをクリックします。
    5. [UPDATE コマンドを次のストアド プロシージャ呼び出しに置換] ボックスの CALL または MCALL を XCALL に置き換え、[OK] をクリックします。
    6. [パブリケーションのプロパティ] ダイアログ ボックスで [OK] をクリックします。
  • 同じレコード内のさまざまな列を同時に更新すると、競合が発生する場合があります。

    推奨される回避方法 : 同じレコードのさまざまな列が同時に更新されているかどうかを判断し、必要な処理を行います。そのためには、更新用のカスタム ストアド プロシージャを変更し、ストアド プロシージャを XCALL 構文で呼び出します。XCALL 構文では、ストアド プロシージャを呼び出す前の値が得られるため、ストアド プロシージャで実際の更新が行われる前に次のいずれかの操作を追加できます。
    • すべての列の現在の値と更新ストアド プロシージャを呼び出す前の値とを比較します。
    • 行のバージョンを格納する列を追加して、更新ストアド プロシージャを呼び出す前の値と現在の値とを比較します。
    値が異なる場合は、同時に複数の列が更新されていると判断できます。この結果から、列を更新するかどうかを判断できます。
  • 別のサーバーで更新中の行を削除すると、レプリケーションが失敗する場合があります。

    推奨される回避方法 : 行の更新と削除が同時に行われているかどうかを判断するには、削除用のストアド プロシージャで XCALL 構文を使用します。削除対象にしている行のすべての列と削除用のストアド プロシージャを呼び出す前の値とを比較します。2 つの値が異なる場合、同時に更新が行われていると判断できます。必要に応じて、更新後の行を削除するか、保持します。

    : サブスクライバでレコードを削除しなくても、DELETE ステートメントが実行されたサーバーではそのレコードが既に削除されています。
  • DELETE ステートメントの実行時、削除対象の行をレプリケーションに参加している別のサーバーが削除しようとしている場合、一部のサブスクライバで行が削除されないため、レプリケーションが失敗します。

    推奨される回避方法 : 以下の手順のいずれかを実行します。
    • 更新用のカスタム ストアド プロシージャの実際の DELETE ステートメントの後にある @@ROWCOUNT チェックを削除します。

      または
    • ディストリビューション エージェントで -Skiperrors パラメータを使用して、このエラーをスキップします。トランザクション レプリケーションでエラーをスキップする場合の詳細については、次のマイクロソフト Web サイトを参照してください。
      http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replmon_9vjn.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/replsql/replmon_9vjn.asp)
: これらの競合を解決するために必要な方法は、ビジネス要件に応じて異なる場合があります。競合に関係しているサーバーが 2 台だけの場合、解決は容易です。競合に 3 台以上のサーバーが関係している場合は、ストアド プロシージャを使用して、変更が最初に行われたサーバーを判断できる場合があります。ただし、たとえば、サーバー C 上のレコードを更新するために使用する更新ストアド プロシージャでは、最初の変更がサーバー A で行われたのかサーバー B で行われたのかが認識されません。マージ レプリケーションと異なり、トランザクション レプリケーションは競合を解決するように設計されていません。トランザクション レプリケーションは、少なくとも競合を解決できる場合にのみ使用してください。

双方向のトランザクション レプリケーションの実装

双方向のトランザクション レプリケーションを実装するには、以下の条件がすべて満たされている必要があります。
  • レプリケーションに参加しているサーバー間で、データの同期が取られています。
  • レプリケーションに使用するストアド プロシージャが、レプリケーションに参加しているすべてのデータベースに配置されています。
  • サブスクリプションが @loopback_detection = 'true' パラメータを使用して構成されています。

    : 現在、set @loopback_detection = 'true' のオプションをユーザー インターフェイスで使用することはできません。そのため、sp_addsubscription ストアド プロシージャを使用してサブスクリプションを実行する必要があります。
バックアップと復元を実行する場合は、重複する主キーが生成されるのを防ぐため、サイトごとに異なる制約を主キーに適用する必要があります。また、作成するすべての制約に NOT FOR REPLICATION 句を付ける必要があります。

次の例を使用して、SQL Server 2000 を実行しているコンピュータに双方向のトランザクション レプリケーションを構成できます。

: 以下の各手順には、Transact-SQL ステートメントが記載されています。作業を実行するには、手順の直後に記載されている Transact-SQL ステートメントを実行してください。
  1. SQL Server を実行しているコンピュータに、ディストリビュータ、パブリッシャ、およびサブスクライバを作成します。これを行うには、次の手順を実行します。
    1. データベースを 2 つ作成します。
      use master
      go
      create database test1
      go
      create database test2
      go
      
    2. NOT FOR REPLICATION オプションを設定した IDENTITY 列を持つテーブルを 2 つ作成します。
      use test1
      go
      create table two_way_test1 
      (
      	pkcol		INTEGER PRIMARY KEY NOT NULL,
      	intcol		INTEGER IDENTITY(1,1) NOT FOR REPLICATION,
       	charcol		CHAR(100),
      	timestampcol 	TIMESTAMP
      )
      use test2
      go
      create table two_way_test2 
      (
      	pkcol 		INTEGER PRIMARY KEY NOT NULL,
      	intcol 		INTEGER IDENTITY(1000000000,1) NOT FOR REPLICATION,
       	charcol 	CHAR(100),
       	timestampcol 	TIMESTAMP
      )
      go
    3. あらかじめ決められた範囲の値を主キー列に割り当て、サーバーごとに異なる範囲の値が使用されるようにします。たとえば、test1 データベースの two_way_test1 テーブルのキー範囲を 1 〜 1000 に、test2 データベースの two_way_test2 テーブルのキー範囲を 1001 〜 2000 に定めることができます。これを行うには、次のコードを実行します。
      	-- Constraint to enforce a range of values between 1 and 1000 in database test1 
      use test1
      go
      alter table 
      	two_way_test1 
      with nocheck 
      add constraint 
      	checkprimcol check NOT FOR REPLICATION 
      	(
      		pkcol BETWEEN 1 and 1000
      	) 
      go 
      use test2
      go
      	-- Constraint to enforce a range of values between 1001 and 2000 in the database test2 
      alter table 
      	two_way_test2
      with nocheck 
      add constraint 
      	checkprimcol check NOT FOR REPLICATION 
      	(
      		pkcol BETWEEN 1001 and 2000
      	) 
      go 
      
  2. サーバーをディストリビュータとして指定し、ディストリビューション データベースを作成します。
    use master
    go
    sp_adddistributor @distributor = '<distributor name>' 
    go
    use master
    go
    sp_adddistributiondb @database='distribution'
    go
  3. レプリケーションに参加している、SQL Server を実行しているすべてのコンピュータをパブリッシャとして指定します。
    use master
    go
    exec sp_adddistpublisher 
    	@publisher = '<Your Server Name>', 
    	@distribution_db ='distribution', 
    	@security_mode = 0, 
    	@login = 'sa', 
    	@password = 'sa',
    	@working_directory ='<Location of Directory>'
  4. レプリケーション用に指定したすべてのデータベースを有効にします。
    use master
    go
    exec sp_replicationdboption N'test1', N'publish', true
    go
    exec sp_replicationdboption N'test2', N'publish', true
    go
    
  5. レプリケーション中に行われる変更を適用するすべてのデータベースで INSERT、UPDATE、および DELETE の各操作を実行するカスタム ストアド プロシージャを作成します。

    : 通常、IDENTITY 列に値を挿入するときは、テーブルの IDENTITY_INSERT オプションを有効にする必要があります。この作業は、受け取り側のレプリケーション エージェントの NOT FOR REPLICATION オプションによって実現されます。

    IDENTITY 列の値は更新できません。したがって、レプリケーション時に値を更新するときは、古い値を削除して新しい値を挿入する必要があります。カスタム ストアド プロシージャを作成するには、以下の手順を実行します。
    1. test1 データベースにカスタム ストアド プロシージャを作成します。
      use test1
      go
      -- INSERT Stored Procedure
      create procedure sp_ins_two_way_test1	
      	@pkcol int, 
      	@intcol int, 
      	@charcol char(100), 
      	@timestampcol timestamp,
      	@rowidcol uniqueidentifier
      as
      	insert into two_way_test1 
      	(
      		pkcol,
      		intcol,
      		charcol
      	) 
      	values
      	(
      		@pkcol, 
      		@intcol, 
      		@charcol
      	)
      go
      --UPDATE Stored Procedure
      create procedure sp_upd_two_way_test1	
      	@pkcol int, 
          	@intcol int, 
          	@charcol char(100), 
          	@timestampcol timestamp,
      	@rowidcol uniqueidentifier,
          	@old_pkcol int
      as
      	declare @x int
      	declare @y int
      	declare @z char(100)
       
      	select 
      		@x=pkcol, 
      		@y=intcol, 
      		@z=charcol 
      	from 
      		two_way_test1 
      	where 
      		pkcol = @pkcol
      	delete 
      		two_way_test1 
      	where 
      		pkcol=@pkcol
      	insert into two_way_test1 
      	(
      		pkcol, 
      		intcol, 
      		charcol
      	) 
      	values
      	(
      		case isnull(@pkcol,0) when 0 then @x else @pkcol end,
      		case isnull(@intcol,0) when 0 then @y else @intcol end,
      		case isnull(@charcol,'N') when 'N' then @z else @charcol end
      	)
      go
      --  DELETE Stored Procedure
      create procedure sp_del_two_way_test1 
      	@old_pkcol int
      as
      	delete 
      		two_way_test1 
      	where 
      		pkcol = @old_pkcol
      go
      
    2. test2 データベースにカスタム ストアド プロシージャを作成します。
      use test2
      go
      -- INSERT Stored Procedure
      create procedure sp_ins_two_way_test2	
      	@pkcol int, 
      	@intcol int, 
      	@charcol char(100), 
      	@timestampcol timestamp,
      	@rowidcol uniqueidentifier
      as
      	insert into two_way_test2 
      	(
      		pkcol,
      		intcol,
      		charcol
      	) 
      	values
      	(
      		@pkcol, 
      		@intcol, 
      		@charcol
      	)
      go
      --UPDATE Stored Procedure
      create procedure sp_upd_two_way_test2	
      	@pkcol int, 
          	@intcol int, 
          	@charcol char(100), 
          	@timestampcol timestamp,
      	@rowidcol uniqueidentifier,
          	@old_pkcol int
      as
      	declare @x int
      	declare @y int
      	declare @z char(100)
       
      	select 
      		@x=pkcol, 
      		@y=intcol, 
      		@z=charcol 
      	from 
      		two_way_test2 
      	where 
      		pkcol = @pkcol
      	delete 
      		two_way_test2 
      	where 
      		pkcol=@pkcol
      	insert into two_way_test2 
      	(
      		pkcol, 
      		intcol, 
      		charcol
      	) 
      	values
      	(
      		case isnull(@pkcol,0) when 0 then @x else @pkcol end,
      		case isnull(@intcol,0) when 0 then @y else @intcol end,
      		case isnull(@charcol,'N') when 'N' then @z else @charcol end
      	)
      go
      --  DELETE Stored Procedure
      create procedure sp_del_two_way_test2 
      	@old_pkcol int
      as
      	delete 
      		two_way_test2 
      	where 
      		pkcol = @old_pkcol
      go
      
  6. トランザクション パブリケーションを作成し、次に test1 データベースおよび test2 データベースの両方のパブリケーションにアーティクルを追加します。
    --In the database test1.
    use test1
    go
    --  Adding the transactional publication.
    exec sp_addpublication 
    	@publication = N'two_way_pub_test1', 
    	@restricted = N'false',
    	@sync_method = N'native', 
    	@repl_freq = N'continuous',
    	@description = N'Transactional publication of database test1.',
    	@status = N'active', 
    	@allow_push = N'true', 
    	@allow_pull = N'true',
    	@allow_anonymous = N'false', 
    	@enabled_for_internet = N'false',
    	@independent_agent = N'false', 
    	@immediate_sync = N'false',
    	@allow_sync_tran = N'true', 
    	@autogen_sync_procs = N'true',
    	@retention = 72
    go
    exec sp_addpublication_snapshot 
    	@publication = N'two_way_pub_test1',
    	@frequency_type = 4,
    	@frequency_interval = 1, 
    	@frequency_relative_interval = 0,
    	@frequency_recurrence_factor = 1, 
    	@frequency_subday = 1,
    	@frequency_subday_interval = 0, 
    	@active_start_date = 0,
    	@active_end_date = 0, 
    	@active_start_time_of_day = 233000,
    	@active_end_time_of_day = 0
    go
    --  Adding the transactional articles.
    exec sp_addarticle 
    	@publication = N'two_way_pub_test1', 
    	@article = N'two_way_test1',
    	@source_owner = N'dbo', 
    	@source_object = N'two_way_test1',
    	@destination_table = N'two_way_test1', 
    	@type = N'logbased',
    	@creation_script = null, 
    	@description = null, 
    	@pre_creation_cmd = N'drop',
            @schema_option = 0x00000000000000F1, 
    	@status = 16,
    	@vertical_partition = N'false', 
    	@ins_cmd = N'CALL sp_ins_two_way_test2',
    	@del_cmd = N'CALL sp_del_two_way_test2',
    	@upd_cmd = N'CALL sp_upd_two_way_test2', 
    	@filter = null,
    	@sync_object = null
    go
    --  In the database test2
    use test2
    go
    --  Adding the transactional publication.
    exec sp_addpublication 
    	@publication = N'two_way_pub_test2', 
    	@restricted = N'false',
    	@sync_method = N'native', 
    	@repl_freq = N'continuous',
    	@description = N'Transactional publication of database test2',
    	@status = N'active', 
    	@allow_push = N'true', 
    	@allow_pull = N'true',
    	@allow_anonymous = N'false', 
    	@enabled_for_internet = N'false',
    	@independent_agent = N'false', 
    	@immediate_sync = N'false',
    	@allow_sync_tran = N'true', 
    	@autogen_sync_procs = N'true',
    	@retention = 72
    go
    exec sp_addpublication_snapshot 
    	@publication = N'two_way_pub_test2',
    	@frequency_type = 4,
    	@frequency_interval = 1, 
    	@frequency_relative_interval = 0,
    	@frequency_recurrence_factor = 1, 
    	@frequency_subday = 1,
    	@frequency_subday_interval = 0, 
    	@active_start_date = 0,
    	@active_end_date = 0, 
    	@active_start_time_of_day = 233000,
    	@active_end_time_of_day = 0
    go
    --  Adding the transactional articles.
    exec sp_addarticle 
    	@publication = N'two_way_pub_test2', 
    	@article = N'two_way_test2',
    	@source_owner = N'dbo', 
    	@source_object = N'two_way_test2',
    	@destination_table = N'two_way_test2', 
    	@type = N'logbased',
    	@creation_script = null, 
    	@description = null, 
    	@pre_creation_cmd = N'drop',
    	@schema_option = 0x00000000000000F1, 
    	@status = 16,
    	@vertical_partition = N'false', 
    	@ins_cmd = N'CALL sp_ins_two_way_test1',
    	@del_cmd = N'CALL sp_del_two_way_test1',
    	@upd_cmd = N'CALL sp_upd_two_way_test1', 
    	@filter = null,
    	@sync_object = null
    go
    
  7. レプリケーションに参加しているすべてのサーバーをサブスクライバとして指定します。
    exec sp_addsubscriber 
    	@subscriber = '<Your Server Name>', 
    	@login = '<login name>', 
    	@password = '<password>'
    go
    
  8. データベースの 1 つを中央サブスクライバとして指定します。レプリケーションに参加しているすべてのデータベースにトランザクション サブスクリプションを作成し、中央サブスクライバにすべてのデータベースがサブスクライブされた後、中央サブスクライバから他のすべてのデータベースにサブスクライブされるようにします。

    たとえば、この例では、test1 データベースが中央サブスクライバです。test1 のパブリケーションにサブスクライブするトランザクション サブスクリプションを test2 データベースに作成し、test2 のパブリケーションにサブスクライブするトランザクション サブスクリプションを test1 データベースに作成します。

    : 作成するすべてのサブスクリプションで LOOPBACK_DETECTION オプションを有効にする必要があります。

    設定するには、次のコードを実行します。
    --Adding the transactional subscription in test1.
    use test1
    go
    exec sp_addsubscription 
    	@publication = N'two_way_pub_test1', 
    	@article = N'all', 
    	@subscriber = '<Your Server Name>', 
    	@destination_db = N'test2', 
    	@sync_type = N'none', 
    	@status = N'active', 
    	@update_mode = N'sync tran', 
    	@loopback_detection = 'true'
    go
    -- Adding the transactional subscription in test2.
    use test2
    go
    exec sp_addsubscription 
    	@publication = N'two_way_pub_test2', 
    	@article = N'all', 
    	@subscriber = '<Your Server Name>', 
    	@destination_db = N'test1', 
    	@sync_type = N'none', 
    	@status = N'active', 
    	@update_mode = N'sync tran', 
    	@loopback_detection = 'true'
    go
    
: sp_scriptpublicationcustomprocs システム ストアド プロシージャを使用して、すべてのパブリケーションにカスタム ストアド プロシージャを作成することもできます。sp_scriptpublicationcustomprocs システム ストアド プロシージャの詳細については、SQL Server 2000 Books Online (アップデート) で「sp_scriptpublicationcustomprocs」を参照してください。

: SQL クエリ アナライザで返すことのできる文字数は、1 列につき 256 文字までです。このオプションを最大許容値に変更できます。



関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
320499? (http://support.microsoft.com/kb/320499/EN-US/ ) HOW TO: Manually Synchronize Replication Subscriptions by Using Backup or Restore
299903? (http://support.microsoft.com/kb/299903/ ) FIX: sp_scriptpublicationcustomprocs Generates Replication Stored Procedures
299903? (http://support.microsoft.com/kb/299903/JA/ ) [FIX] レプリケーションストアドプロシージャ sp_scriptpublicationcustomprocs
327817? (http://support.microsoft.com/kb/327817/ ) INF: Use the "-SkipErrors" Parameter in Distribution Agent Cautiously
327817? (http://support.microsoft.com/kb/327817/JA/ ) [INF] ディストリビューション エージェントで "-SkipErrors" パラメータを使用する際の注意点
SQL Server 7.0 で双方向のトランザクション レプリケーションを実装する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
300164? (http://support.microsoft.com/kb/300164/EN-US/ ) INF: How to Set Up an Identity Column on both the Publisher and the Subscriber with Transactional Replication
240235? (http://support.microsoft.com/kb/240235/ ) BUG: "Implementing Nonpartitioned, Bi-directional, Transactional Replication" Sample in Books Online Contains Errors

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 820675? (http://support.microsoft.com/kb/820675/EN-US/ ) (最終更新日 2004-01-21) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
キーワード:?
kbreplication kbcode kbtsql kbhowtomaster KB820675
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"