Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Необъяснимое поведение одноранговой репликации транзакций  [new]
Finder
Member

Откуда:
Сообщений: 320
Ситуация очень простая: настраиваю одноранговую репликацию для одной статьи (таблица TLinkSys), указываю при помощи sp_register_custom_scripting генерацию собственной ХП вставки (генератор sp_genMSins_dboTLinkSys создана заранее), после создания подписки появляются все три ХП поддержки репликации: sp_MSins_dboTLinkSysU (создана моим генератором), sp_MSupd_dboTLinkSys228099114, sp_MSdel_dboTLinkSys228099114 (автосгенерированные сервером).

При вставке записи в TLinkSys - она нормально реплицируется во вторую базу. Но! В этот момент во второй базе исчезает sp_MSupd_dboTLinkSys228099114, вторая автосгенерированная сервером ХП - sp_MSdel_dboTLinkSys228099114 остается на месте. Понятно, что без ХП поддержки UPDATE репликация дальше работать не может и... в общем я застрял.

Кто-нибудь сталкивался с подобной проблемой?

Тестовый скрипт:
-- ServerA
use [REPLTEST]
exec sp_replicationdboption @dbname = N'REPLTEST', @optname = N'publish', @value = N'true'
GO
exec [REPLTEST].sys.sp_addlogreader_agent @publisher_security_mode = 1, @job_name = null
GO
exec sp_addpublication @publication = N'REPLTEST', @description = N'p2p publication', 
  @sync_method = N'native', @retention = 0, @allow_push = N'true', @allow_pull = N'true', 
  @allow_anonymous = N'false', @enabled_for_internet = N'false', 
  @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, 
  @ftp_login = N'anonymous', @allow_subscription_copy = N'false', 
  @add_to_active_directory = N'false', @repl_freq = N'continuous', 
  @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', 
  @allow_sync_tran = N'false', @autogen_sync_procs = N'false', 
  @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1, 
  @allow_initialize_from_backup = N'true', @enabled_for_p2p = N'true', @enabled_for_het_sub = N'false',
  @p2p_conflictdetection = N'true', @p2p_originator_id = 1, @p2p_continue_onconflict = N'false'
GO
exec sp_addpublication_snapshot @publication = N'REPLTEST', @frequency_type = 1,   @frequency_interval = 0, @frequency_relative_interval = 0,   
  @frequency_recurrence_factor = 0, @frequency_subday = 0,   @frequency_subday_interval = 0, @active_start_time_of_day = 0,   
  @active_end_time_of_day = 235959, @active_start_date = 0,   @active_end_date = 0, @publisher_security_mode = 1
GO
exec sp_addarticle @publication = N'REPLTEST', @article = N'TLinkSys', @source_owner = N'dbo', @source_object = N'TLinkSys', 
  @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', 
  @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'TLinkSys', 
  @destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd = N'CALL sp_MSins_dboTLinkSysU', 
  @del_cmd = N'CALL sp_MSdel_dboTLinkSys', @upd_cmd = N'SCALL sp_MSupd_dboTLinkSys'
GO
declare @int int 
set @int = object_id('TLinkSys') 
exec sys.sp_identitycolumnforreplication @int , 0
GO
exec sp_changearticle @publication='REPLTEST', @article = 'TLinkSys', @property='ins_cmd', @value=N'CALL sp_MSins_dboTLinkSysU'
GO
sp_register_custom_scripting @type='insert', @value='[dbo].[sp_genMSins_dboTLinkSys]', @publication='REPLTEST', @article=N'TLinkSys'
GO
--
-- !! backup ServerA and restore to ServerB !!
--
-- ServerA
use REPLTEST
GO
EXEC sp_addsubscription @publication = 'REPLTEST', @subscriber = 'SQLSERVER', @destination_db = 'REPLTEST', 
  @sync_type='initialize with backup', @backupdevicetype='disk', 
  @backupdevicename='D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\REPLTEST.bak'
GO
EXEC sp_addpushsubscription_agent @publication = 'REPLTEST', @subscriber = 'SQLSERVER', @subscriber_db = 'REPLTEST', 
  @subscriber_security_mode=0, @subscriber_login='SA', @subscriber_password='xxxx'
GO
-- На ServerB создаются sp_MSins_dboTLinkSysU, sp_MSupd_dboTLinkSys228099114, sp_MSdel_dboTLinkSys228099114
13 июл 12, 10:36    [12861378]     Ответить | Цитировать Сообщить модератору
 Re: Необъяснимое поведение одноранговой репликации транзакций  [new]
Finder
Member

Откуда:
Сообщений: 320
-- ServerB
use [REPLTEST]
exec sp_replicationdboption @dbname = N'REPLTEST', @optname = N'publish', @value = N'true'
GO
exec [REPLTEST].sys.sp_addlogreader_agent @publisher_security_mode = 1, @job_name = null
GO
-- Adding the transactional publication
exec sp_addpublication @publication = N'REPLTEST', @description = N'p2p replication',
@sync_method = N'native', @retention = 0, @allow_push = N'true', @allow_pull = N'true',
@allow_anonymous = N'false', @enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21,
@ftp_login = N'anonymous', @allow_subscription_copy = N'false',
@add_to_active_directory = N'false', @repl_freq = N'continuous',
@status = N'active', @independent_agent = N'true', @immediate_sync = N'true',
@allow_sync_tran = N'false', @autogen_sync_procs = N'false',
@allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1,
@allow_initialize_from_backup = N'true', @enabled_for_p2p = N'true', @enabled_for_het_sub = N'false',
@p2p_conflictdetection = N'true', @p2p_originator_id = 2, @p2p_continue_onconflict = N'false'
GO

exec sp_addpublication_snapshot @publication = N'REPLTEST', @frequency_type = 1,
@frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0,
@frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0,
@active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @publisher_security_mode = 1
GO

exec sp_addarticle @publication = N'REPLTEST', @article = N'TLinkSys', @source_owner = N'dbo', @source_object = N'TLinkSys',
@type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'TLinkSys',
@destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd = N'CALL sp_MSins_dboTLinkSysU',
@del_cmd = N'CALL sp_MSdel_dboTLinkSys', @upd_cmd = N'SCALL sp_MSupd_dboTLinkSys'
GO

declare @int int
set @int = object_id('TLinkSys')
exec sys.sp_identitycolumnforreplication @int , 0
GO

exec sp_changearticle @publication='REPLTEST', @article = 'TLinkSys', @property='ins_cmd', @value=N'CALL sp_MSins_dboTLinkSysU'
GO
sp_register_custom_scripting @type='insert', @value='[dbo].[sp_genMSins_dboTLinkSys]', @publication='REPLTEST', @article=N'TLinkSys'
GO

EXEC sp_addsubscription @publication = 'REPLTEST', @subscriber = 'FINDER',
@destination_db = 'REPLTEST', @sync_type='replication support only'
GO

EXEC sp_addpushsubscription_agent @publication = 'REPLTEST', @subscriber = 'FINDER',
@subscriber_db = 'REPLTEST', @subscriber_security_mode=0,
@subscriber_login='SA', @subscriber_password='xxxx'
GO
-- На ServerA создаются sp_MSins_dboTLinkSysU, sp_MSupd_dboTLinkSys0829293835, sp_MSdel_dboTLinkSys0829293835
--
-- On ServerA
use [REPLTEST]
GO
declare @int int
set @int = object_id('TLinkSys')
exec sys.sp_identitycolumnforreplication @int , 0
GO
--- TEST
SELECT name FROM sysobjects WHERE (name LIKE N'sp_MSins_dboTLinkSys%'
OR name LIKE N'sp_MSupd_dboTLinkSys%' OR name LIKE N'sp_MSdel_dboTLinkSys%' ) AND type = 'P'
-- Все три ХП на месте
-- On Server B:
INSERT INTO TLinkSys (F_ATTRID, F_OBJID) VALUES (2,4)
-- On ServerA:
SELECT name FROM sysobjects WHERE (name LIKE N'sp_MSins_dboTLinkSys%'
OR name LIKE N'sp_MSupd_dboTLinkSys%' OR name LIKE N'sp_MSdel_dboTLinkSys%' ) AND type = 'P'
-- Результат для ServerA- sp_MSupd_dboTLinkSys исчезла, хотя запись в TLinkSys добавилась
13 июл 12, 10:45    [12861461]     Ответить | Цитировать Сообщить модератору
 Re: Необъяснимое поведение одноранговой репликации транзакций  [new]
Finder
Member

Откуда:
Сообщений: 320
Сама табличка выглядит так:
CREATE TABLE TLinkSys2 (F_ATTRID bigint, F_OBJID bigint, F_OWNID bigint IDENTITY (1,1) NOT NULL)

Собственная ХП синхронизации мне нужны чтобы игнорировать F_OWNID при репликации. Но вот куда девается ХП поддержки UPDATE???
13 июл 12, 11:00    [12861571]     Ответить | Цитировать Сообщить модератору
 Re: Необъяснимое поведение одноранговой репликации транзакций  [new]
Finder
Member

Откуда:
Сообщений: 320
Что, неужели никто не сталкивался с p2p?! Скрипт рабочий, повторить его - 5 минут.
16 июл 12, 15:15    [12872939]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Необъяснимое поведение одноранговой репликации транзакций  [new]
Semdba
Guest
Finder,
надо добавить @reserved = 'nosync' или 'internal' для sp_addsubscription
24 май 16, 18:56    [19214253]     Ответить | Цитировать Сообщить модератору
 Re: Необъяснимое поведение одноранговой репликации транзакций  [new]
komrad
Member

Откуда:
Сообщений: 5250
Semdba,

поторопился таки с ответом - совсем немного до 4 лет не хватило
24 май 16, 22:47    [19215157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить