Makale numarası: 820675 - Son Gözden Geçirme: 26 Kasım 2007 Pazartesi - Gözden geçirme: 1.9

Implement çift yönlü işlem çoğaltması nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, çift yönlü işlem çoğaltması nasıl açıklar. Bu makalede ayrıca, çift yönlü işlem çoğaltması gerçekleştirmek söz konusu sorunları anlatılır.

Çift yönlü işlem çoğaltması

Çift yönlü işlem yineleme olarak da bilinen çift yönlü işlem çoğaltması, bir sunucu hem yayımcı hem de aynı verilere abone olmasını sağlar. Yineleme işlemine katılan sunucular olur çünkü çoğaltılır, tüm değişiklikleri diğer sunuculara, değişiklikleri özgün sunucuya geri dağıtılmasını değil.

Iki sunucu (sunucu ve sunucu B) varsa, örneğin, sunucular aşağıdaki koşulların her ikisi de doğruysa çift yönlü işlem çoğaltması olduğu söylenir:
  • Tablo T1 sunucu B'deki BIR öğeler tablo T1 Server sırasında yapılan değişiklikleri çoğaltılmamışsa
  • Tablo T1 sunucu A'ADRESINDEKI sunucu b tablo T1 yaptığınız değişiklikler çoğaltılır
Bu nedenle, bir değişiklik, sunucu A kaynağı, değişiklik, sunucu B için çoğaltılır, ancak sunucu B değil yaymak aynı değişikliği geri Server A Replication dağıtıcı göndermek için değişiklikler sunucu kaynak için yeniden olup olmadığını belirlemek için kullandığı bir geridöngü algılama düzeneğini kullanır.

Çift yönlü işlem çoğaltması için topoloji planla

Çift yönlü işlem çoğaltması için sunuculardan biri merkezi abonesi olarak çalışabildiği ve tüm diğer sunucuları için bir merkez abone abone olun. Bu nedenle, değişiklikleri, bir sunucuda merkezi abonesi tarafından çoğaltılır, ve sonra merkez abone, sırayla değişikliklerin yineleme işlemine katılan tüm diğer sunuculara çoğaltır. Ancak, geridöngü algılama düzeneğini yardımıyla, değişikliği özgün sunucuya yayılmasını dağıtıcı durdurur.

Örneğin, üç sunucu (sunucu, sunucu B ve Server-C)'ı çift yönlü işlem çoğaltmaya katılan ve sunucu merkez abone olursa yayıncıların ve abonelerin aşağıdaki yollarla saklanır:
  • BIR sunucu için sunucu B'ı ve Server C yayımlar.
  • <a1>Sunucu</a1> BIR sunucu B'YI ve Server C abone olur.
  • <a1>Sunucu</a1> B yayımlar ve sunucudan yalnızca abone olan A.
  • <a1>Sunucu</a1> C yayımlar ve sunucudan yalnızca abone olan A.
Bu nedenle, sunucu B kaynağı herhangi bir değişiklik için Sunucu A ve sunucu c çoğaltılacağı

Olarak çakışıyor. çift yönlü işlem yineleme

Çoğaltmaya katılan bir sunucu üzerinde değişiklikler yaptığınızda, değişiklikler, diğer katılımcı tüm sunuculara çoğaltılır. Bu bir çoğaltma sırasında çakışma ortaya çıkabilir ve çoğaltması başarısız. Aşağıdaki liste, olası çakışmaları ve bu çakışmaları önlemek yolları açıklanmaktadır:
  • Sunuculardan biri bir tabloya bir anahtarı olan bir kayıt eklediğiniz ve yineleme işlemine katılan diğer sunucular üzerinde aynı anahtarı olan başka bir kayda var, çoğaltma değişiklikleri diğer sunuculara yaymak değil.

    Önerilen eylem Bu sorunun oluşmaması için <a0></a0>, yineleme işlemine katılan her sunucuda farklı anahtarlar kullandığınızdan emin olun. Bunu yapmak için <a0></a0>, tuşları, yineleme işlemine katılan her sunucu için önceden belirlenmiş bir dizi ayrılamadı. Ayrıca, her sunucuda bir bileşik anahtar kullanabilirsiniz.
  • UPDATE deyimi, başka bir sunucuda silinen bir kaydı güncelleştirdiğinizde, kaydı sildi ve yineleme, bir hata ile başarısız sunucu sıfır satır etkiler.

    Önerilen eylem Bu sorunun oluşmaması için <a0></a0>, aşağıdaki adımlardan birini gerçekleştirin:
    • @@ ROWCOUNT kaldırmak gerçek UPDATE deyiminin güncelleştirmenin özel saklı yordamında sonra denetleyin.

      -VEYA-
    • Use -Skiperrors bu hata atlamak Dağıtım Aracısı için bir parametre. Işlem çoğaltması atlanıyor hataları hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
      http://msdn2.microsoft.com/en-us/library/aa178842(SQL.80).aspx (http://msdn2.microsoft.com/en-us/library/aa178842(SQL.80).aspx)
      -VEYA-
    • UPDATE deyimi güncelleştirmesine saklı yordamını önce bir kayıt için bakın. Hiçbir kayıt varsa, UPDATE deyiminin atlamak, ve kayıt üzerinde tüm abonelerin silinir.
  • Bir sütun, bir kayıttaki aynı anda başka bir sunucuda güncelleştirildi güncelleştirdiğinizde, verileri iki sunucularda farklı olabilir.

    Önerilen eylem Bu sorunun oluşmaması için <a0></a0>, verileri diğer sunuculara aynı anda güncelleştiriliyor, belirleyin ve sonra tüm gerekli eylemi gerçekleştirin. Saklı yordamını, güncelleştirmenin özel saklı yordamın değiştirin ve güncelleştirmeyi aranacak XCALL sözdizimi'ni kullanın. Güncelleştirme yordamı olarak adlandırılır ve güncelleştirilmiş sütunundaki değerleri sağlar önce XCALL sözdizimi, tüm sütunlar için değerleri sağlar. Güncelleştirme, saklı yordamı çağrılmadan önce sütunun değeri karşı geçerli değeri karşılaştırabilirsiniz. Farklı değerler görürseniz, sütun farklı sunucuları tarafından aynı anda güncelleştiriliyor. Saklı yordamın, hangi değerin devam ederse seçmek için özelleştirebilirsiniz. XCALL kullanma hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
    http://msdn2.microsoft.com/en-us/library/Aa237133(SQL.80).aspx (http://msdn2.microsoft.com/en-us/library/Aa237133(SQL.80).aspx)
    Not Karşılık gelen güncelleştirmenin aranacak XCALL sözdizimi saklı yordamını veya saklı yordam, yayın sırasında sp_addarticle kullanarak silme belirtebilirsiniz. Ayrıca, SQL Server Enterprise Manager'ı kullanarak XCALL sözdizimi belirtebilirsiniz. Bunu yapmak için şu adımları izleyin:
    1. SQL Server Enterprise Manager'da, istediğiniz yayını bulun.
    2. Yayını'nı sağ tıklatın ve sonra da Properties ' i tıklatın.
    3. Makaleyi bulmak makaleleri sekmesini tıklatın ve makaleyi yanındaki makale Özellikler düğmesini (...) tıklatın.
    4. Tablo makalesi özellikleri iletişim kutusunda, Komutlar sekmesini tıklatın.
    5. Bu saklı yordam çağrısı Değiştir GÜNCELLEŞTIR komutlarıyla metin kutusuna XCALL yazın ve Tamam ' ı tıklatın.
    6. Yayını özellikler iletişim kutusunda, <a3>Tamam</a3>'ı tıklatın.
  • Bir kayıttaki farklı sütunlar güncelleştirdiğinizde, farklı bir sütun, bir kaydın eşzamanlı güncelleştirmeleri bazen çakışmalarına neden olabilir.

    Önerilen eylem Bu sorunun oluşmaması için <a0></a0>, farklı sütunlar aynı kaydı aynı anda güncelleştirilir ve sonra tüm gerekli eylemi gerçekleştirin belirler. Bunu yapmak, güncelleştirmenin özel saklı yordamın değiştirin ve sonra XCALL için güncelleştirmeyi aramak için sözdizimi saklı yordamını. Güncelleştirme saklı yordamı çağrılmadan önce XCALL sözdizimi değerlerini sağladığından, gerçek güncelleştirme gerçekleştirilmeden önce aşağıdaki seçeneklerden birini güncelleştirme depolanmış yordamın ekleyebilirsiniz:
    • Tüm sütunların değerlerini güncelleştirme saklı yordamını önce karşı olarak adlandırılan geçerli değerleri karşılaştırın.
    • Bir sütunun satır sürümü temsil eden ve güncelleştirmenin saklı yordamını önce geçerli değerini değeriyle karşılaştırılacak adlı ekleyin.
    Aynı anda farklı sütunlar güncelleştirilmekte olan farklı değerleri gösterir. Daha sonra sütun güncelleştirilip güncelleştirilmeyeceğini karar verebilirsiniz.
  • Aynı anda başka bir sunucu tarafından güncelleştirilen bir satırı sildiğinizde, çoğaltması başarısız olabilir.

    Önerilen eylem Bir satır güncelleştirildi ve aynı anda silindi, belirlemek için <a0></a0>, silme, saklı yordamda XCALL sözdizimi'ni kullanın. Her sütun değerleri karşı siliniyor silme saklı yordamı çağrılmadan önce satırın karşılaştırın. Bu güncelleştirmelerin aynı anda gerçekleştirilmekte farklı değerleri gösterir. Silmek veya güncelleştirilmiş satır korur.

    Not Abone kaydı silme olsa bile, kayıt SILME kaynaklanan sunucuda artık ifadesi.
  • DELETE deyimi abonelerin bazı satırlar etkilemez, çünkü yineleme işlemine katılan bir başka bir sunucuya aynı anda silinmiş olan bir satırı sildiğinizde, yineleme başarısız olur.

    Önerilen eylem Bu sorunun oluşmaması için <a0></a0>, aşağıdaki adımlardan birini gerçekleştirin:
    • @@ ROWCOUNT kaldırmak sonra güncelleştirmenin özel saklı yordamın gerçek DELETE deyiminde denetleyin.

      -VEYA-
    • Use -Skiperrors parametresi bu hatanın atlamak için Dağıtım Aracısı en. Işlem çoğaltması atlanıyor hataları hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
      http://msdn2.microsoft.com/en-us/library/aa178842(SQL.80).aspx (http://msdn2.microsoft.com/en-us/library/aa178842(SQL.80).aspx)
Not Her dağıtım iş gereksinimlerine bağlı olarak, bu çakışmaları çözmek için farklı bir yaklaşım kullanmanız gerekebilir. Bu çakışmaları yalnızca iki sunucular, söz konusu çözümlemeye daha kolaydır. Ikiden fazla sunucu söz konusu olduğunda, saklı yordamlar, hangi sunucunun değişiklikleri geldiğini belirlemek için kullanmak mümkün olabilir. Sunucu c kayıtları güncelleştirmek için kullanılan depolanan güncelleştirme yordamı, değişiklik sunucu veya sunucu b kaynağı bilmez Birleştirme çoğaltması farklı olarak, işlem çoğaltması, çakışmaları çözümlemek için tasarlanmamıştır. Yalnızca burada çakışmaları yerine kaçınılması senaryolarda işlem çoğaltması dağıtmak çözümlendi.

Çift yönlü işlem çoğaltma Uygula

Çift yönlü işlem çoğaltması uygulamak için aşağıdaki koşulların tümünün doğru olması gerekir:
  • Verileri çoğaltma sunucular arasında eşitlenir.
  • Çoğaltma tarafından kullanılan saklı yordamlar, katılan tüm veritabanlarında bulunur.
  • Abonelik @ loopback_detection kullanılarak ayarlanmış durumda = 'true' parametresi.

    Not Seçeneği @ loopback_detection ayarlamak = 'true' kullanıcı arabiriminde şu anda kullanılabilir değil. Bu nedenle, sp_addsubscription saklı yordamını kullanarak abone olmalısınız.
Yedekleme ve geri yükleme gerçekleştiriyorsanız, farklı siteler farklı yinelenen birincil anahtarlar oluşturulmadı emin olmak için birincil anahtar kısıtlamaları gerektiğini unutmayın. Tüm kısıtlamalar IÇIN NOT REPLICATION yan tümcesiyle birlikte oluşturmak de unutmayın.

Aşağıdaki örnek, SQL Server 2000 çalıştıran bir bilgisayarda çift yönlü işlem çoğaltması ayarlamak için kullanabilirsiniz.

Not Transact-SQL deyimlerini aşağıdaki adımlar için listelenen. Önceki adımda anlatılan görevi gerçekleştirmek için Transact-SQL deyimlerini çalıştırın.
  1. SQL Server çalıştıran bir bilgisayarda, bir dağıtıcı, yayımcı ve abonelerin oluşturun. Bunu yapmak için şu adımları izleyin:
    1. Iki veritabanını oluşturun:
      use master
      go
      
      create database test1
      go
      
      create database test2
      go
      
    2. Bir IDENTITY sütunu IÇIN NOT REPLICATION seçeneği ayarlanmış olan iki tablo oluşturun:
      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. Böylece farklı sunucular üzerindeki değerleri, aynı aralıkta olmayan bir önceden belirlenmiş aral??? için birincil anahtar sütunu ayrılamadı. Örneğin, test1 veritabanındaki two_way_test1 tablosu için bir anahtar aralığı 1-1000 zorlamak ve sonra da anahtar <a0>test2</a0> veritabanında two_way_test2 tablo aralığı olarak 1001-2000 zorlamak. Bunu yapmak için şu kodu kullanın:
      	-- 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. Dağıtıcı olarak sunucunuzu etkinleştirin ve sonra bir dağıtım veritabanı oluşturun:
    use master
    go
    sp_adddistributor @distributor = '<distributor name>' 
    go
    use master
    go
    sp_adddistributiondb @database='distribution'
    go
  3. Çoğaltma yayımcı üyesi olan SQL Server çalıştıran tüm bilgisayarların etkinleştir:
    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. Çoğaltma için tanımlanan tüm veritabanlarının etkinleştir:
    use master
    go
    
    exec sp_replicationdboption N'test1', N'publish', true
    go
    
    exec sp_replicationdboption N'test2', N'publish', true
    go
    
  5. INSERT, UPDATE özel saklı yordamlarda oluşturmak ve çoğaltma sırasında yapılan değişiklikleri uygulamak için tüm veritabanlarının işlemlerde DELETE.

    Not Genellikle, bir IDENTITY sütununa bir değer eklediğinizde, tablonun ıdentıty_ınsert seçeneği AÇıK olmalıdır. Bu görev IÇIN NOT REPLICATION seçeneği için gelen çoğaltma aracıları tarafından sağlanır.

    KIMLIK sütununu değerleri güncelleştiremiyor. Çoğaltma sırasında değerleri güncelleştirdiğinizde, bu nedenle, eski değerlerini kaldırın ve yeni değerler eklemek gerekir. Özel saklı yordamlarda oluşturmak için aşağıdaki adımları izleyin:
    1. Create the custom stored procedures in the test1 database:
      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. Create the custom stored procedures in the test2 database:
      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. Işlem bir yayın oluşturursanız ve makalelere, test1 ve test2 veritabanlarının her ikisini de yayına ekleyin:
    --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. Çoğaltmaya katılan tüm sunucuları aboneleri etkinleştir:
    exec sp_addsubscriber 
    	@subscriber = '<Your Server Name>', 
    	@login = '<login name>', 
    	@password = '<password>'
    go
    
    
  8. Veritabanlarının bir merkezi abonesi olarak tanımlayın. Böylece, tüm veritabanlarının merkezi için abone ol ve merkez abone için diğer tüm veritabanlarının abone olan yineleme işlemine katılan tüm veritabanlarının işlem abonelikler oluşturun.

    Örneğin, bu senaryoda, test1 veritabanı merkez abone olur. Işlem abonelikler, yayın sırasında test1 abone test2 veritabanında ve test2 adresindeki yayınına abone test1 veritabanında oluşturun.

    Not Tüm abonelikler LOOPBACK_DETECTION seçeneği etkinken oluşturun.

    Bunu yapmak için şu kodu kullanın:
    --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
    
NotSp_scriptpublicationcustomprocs Sistem saklı yordamını kullanarak, tüm yayınlar için özel saklı yordamlarda da oluşturabilirsiniz. Sp_scriptpublicationcustomprocs Sistem saklı yordamı hakkında daha fazla bilgi için SQL Server 2000 güncelleştirme Books Online'da "sp_scriptpublicationcustomprocs" konusuna bakın.

Not SQL Query Analyzer sütun başına düşen yalnızca 256 karakter verir. Değer izin verilen en fazla için bu seçeneği değiştirebilirsiniz.



Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
320499  (http://support.microsoft.com/kb/320499/EN-US/ ) Nasıl yapılır: el ile çoğaltma abonelikler kullanarak yedekleme veya geri yükleme tarafından Eşitle
299903  (http://support.microsoft.com/kb/299903/ ) Düzeltme: depolanan sp_scriptpublicationcustomprocs oluşturuyor çoğaltma yordamlar
327817  (http://support.microsoft.com/kb/327817/ ) INF: Kullan "-SkipErrors" dağıtım aracısını, Parameter dikkatli biçimde
SQL Server 7. 0'çift yönlü işlem çoğaltması uygulama hakkında ek bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
300164  (http://support.microsoft.com/kb/300164/EN-US/ ) INF: Nasıl hem yayımcı hem de abone işlem çoğaltması ile bir kimlik sütunu yukarı ayarla
240235  (http://support.microsoft.com/kb/240235/ ) Hata: "uygulama" Nonpartitioned, çift yönlü, işlem çoğaltma örnek defterleri çevrimiçi hataları içerir.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
Anahtar Kelimeler: 
kbmt kbreplication kbcode kbtsql kbhowtomaster KB820675 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:820675  (http://support.microsoft.com/kb/820675/en-us/ )