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

Откуда: Киев
Сообщений: 2611
Добрый нужны пояснения к хранимке sp_addmergearticle (не смог нагуглить (( )

создал публикацию слиянием (все сервера (оба) 2005 sp3 )
Тестируем и вот что получается

Вопрос 1.
@identity_range = 10000
@pub_identity_range = 500000
Я так понял эти 2 параметра могут быть одинаковыми

на подписчике ID в начинаеться с 4100000 почему так ?

Вопрос 2.
Какие есть варианты реализации следующего.
Есть таблица структуру которой нужно реплицировать, но данные по некоторым столбцам не нужно синхронизировать
Как это можно сделать ?

Вопрос 3

@creation_script в каком виде задавать путь и имя этого сценария схемы статьи.
Этот вопрос созрел как способ реализации задачи во 2 вопросе
То есть, то есть статью реплицируем вот так
exec sp_addmergearticle @publication = N'publMirKvartir',
@article = N'Publishers',@source_owner = N'dbo',@source_object = N'Publishers',
@type = N'table',@description = N'',@creation_script = null,@pre_creation_cmd = N'none',
@schema_option = 0x000000000C034FD1,
@destination_owner = N'dbo',
@force_reinit_subscription = 1,
@column_tracking = N'false',
@subset_filterclause = '[PublisherId] = 2527',
@vertical_partition = N'true',
@verify_resolver_signature = 1,@allow_interactive_resolver = N'false',@fast_multicol_updateproc = N'true',
@check_permissions = 0,@subscriber_upload_options = 0,@delete_tracking = N'true',
@compensate_for_errors = N'false',@stream_blob_columns = N'false',@partition_options = 0,
@processing_order = 90,@force_invalidate_snapshot = 1

exec sp_mergearticlecolumn @publication = N'publMirKvartir', @article = N'Publishers', @column = N'PublisherId', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_mergearticlecolumn @publication = N'publMirKvartir', @article = N'Publishers', @column = N'PublisherName', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_mergearticlecolumn @publication = N'publMirKvartir', @article = N'Publishers', @column = N'LanguageID', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_mergearticlecolumn @publication = N'publMirKvartir', @article = N'Publishers', @column = N'Version', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1


и @creation_script для нее должен содержать сценарий добавления необходимого поля которое должно быть в базе но не должно синхронизироваться . Что вроде этого
ALTER TABLE dbo.Publishers ADD
	isLocal bit NOT NULL CONSTRAINT DF__Publishers_isLocal DEFAULT 1

2 дек 09, 13:50    [8008155]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
подниму на всяк случай
3 дек 09, 11:07    [8012491]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
хмм...

Пока суть да дело возник еще вопрос применительно статьи публикации.

Использую параметр @subscriber_upload_options

Читаю мсдн

Выполните хранимую процедуру sp_addmergearticle, указав значение 1 или 2 в параметре @subscriber_upload_options. Числа соответствуют следующему поведению.

* 0 = без ограничений (по умолчанию). Изменения, произведенные на подписчике, передаются на издатель.
* 1 — изменения на подписчике разрешены, но они не передаются на издатель.
* 2 — изменения на подписчике не разрешены.

меня очень устраивает 1 но данные все равно передаются в публикатор (публицируемую базу )
3 дек 09, 18:56    [8016507]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
забанили меня что ли ?


))
4 дек 09, 11:19    [8018586]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Приведу скрипты может кто то отзовется

Создание Распространителя и публикатора
/****** Scripting replication configuration. Script Date: 18.11.2009 12:38:36 ******/
/****** Please Note: For security reasons, all password parameters were scripted with either NULL or an empty string. ******/

/****** Installing the server as a Distributor. Script Date: 18.11.2009 12:38:36 ******/
DECLARE @distributor_name nvarchar(20) 
DECLARE @publisher_name nvarchar(20) 
SET @distributor_name = N'P1-DB-04'
SET @publisher_name = N'P1-DB-04'


use master
exec sp_adddistributor @distributor = N'P1-DB-04', @password = N''
GO
exec sp_adddistributiondb @database = N'distrMK', 
@data_folder = N'C:\!backup\Replication\Data', 
@log_folder = N'C:\!backup\Replication\Data', 
@log_file_size = 2, 
@min_distretention = 0, 
@max_distretention = 72, 
@history_retention = 48, 
@security_mode = 1
GO

use [distrMK] 
if (not exists (select * from sysobjects where name = 'UIProperties' and type = 'U ')) 
	create table UIProperties(id int) 
if (exists (select * from ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', null, null))) 
	EXEC sp_updateextendedproperty N'SnapshotFolder', N'\\p1-db-04\!backup\Replication\ReplData', 'user', dbo, 'table', 'UIProperties' 
else 
	EXEC sp_addextendedproperty N'SnapshotFolder', '\\p1-db-04\!backup\Replication\ReplData', 'user', dbo, 'table', 'UIProperties'
GO

exec sp_adddistpublisher @publisher = N'P1-DB-04', 
@distribution_db = N'distrMK', 
@security_mode = 1, 
@working_directory = N'\\p1-db-04\!backup\Replication\ReplData', 
@trusted = N'false', 
@thirdparty_flag = 0, 
@publisher_type = N'MSSQLSERVER'





use [Notice]
exec sp_replicationdboption 
@dbname = N'Notice', 
@optname = N'merge publish', 
@value = N'true'

-- Adding the merge publication
use [Notice]
exec sp_addmergepublication 
@publication = N'publMirKvartir', 
@description = N'Merge publication of database ''Notice'' from Publisher ''P1-DB-04''.', 
@sync_mode = N'native', 
@retention = 14, 
@allow_push = N'true', 
@allow_pull = N'false', 
@allow_anonymous = N'true', 
@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', 
@dynamic_filters = N'false', 
@conflict_retention = 14, 
@keep_partition_changes = N'false', 
@allow_synctoalternate = N'false', 
@max_concurrent_merge = 0, 
@max_concurrent_dynamic_snapshots = 0,
@use_partition_groups = null, 
@publication_compatibility_level = N'90RTM', 
@replicate_ddl = 1, 
@allow_subscriber_initiated_snapshot = N'false', 
@allow_web_synchronization = N'false', 
@allow_partition_realignment = N'true', 
@retention_period_unit = N'days', 
@conflict_logging = N'both', 
@automatic_reinitialization_policy = 0



exec sp_addpublication_snapshot 
@publication = N'publMirKvartir', 
@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 = 500, 
@active_end_time_of_day = 235959, 
@active_start_date = 0, 
@active_end_date = 0, 
@job_login = N'Имя доменно юзера', 
@job_password = 'Пароль этого юзера', 
@publisher_security_mode = 1


добавлю 2 статьи


exec sp_addmergearticle @publication = N'publMirKvartir',@article = N'Object',
@source_owner = N'dbo',
@source_object = N'Object',
@type = N'table',
@description = N'',
@creation_script = null,
@pre_creation_cmd = N'none',
@schema_option = 0x000000000C034FD1,
@identityrangemanagementoption = N'auto',
@identity_range = 1000000,
@pub_identity_range = 500000000,
@threshold = 80,
@destination_owner = N'dbo',
@force_reinit_subscription = 1,
@column_tracking = N'false',
@subset_filterclause = N'[ObjectParentID] in (0,1,2,2527) and [ObjectID] <> 3',
@vertical_partition = N'false',
@verify_resolver_signature = 1,
@allow_interactive_resolver = N'false',
@fast_multicol_updateproc = N'true',
@check_permissions = 0,
@subscriber_upload_options = 0,
@delete_tracking = N'true',
@compensate_for_errors = N'false',
@stream_blob_columns = N'false',
@partition_options = 0,
@processing_order = 78,
@force_invalidate_snapshot = 1

exec sp_addmergearticle @publication = N'publMirKvartir',
@article = N'Publishers',@source_owner = N'dbo',@source_object = N'Publishers',
@type = N'table',@description = N'',
@creation_script = null,
@pre_creation_cmd = N'none',
@schema_option = 0x000000000C034FD1,
@destination_owner = N'dbo',
@force_reinit_subscription = 1,
@column_tracking = N'false',
@subset_filterclause = N'',
@vertical_partition = N'false',
@verify_resolver_signature = 1,
@allow_interactive_resolver = N'false',
@fast_multicol_updateproc = N'true',
@check_permissions = 0,
@subscriber_upload_options = 2,
@delete_tracking = N'true',
@compensate_for_errors = N'false',
@stream_blob_columns = N'false',
@partition_options = 0,
@processing_order = 90,
@force_invalidate_snapshot = 1


и на конец создаю подписчик

exec sp_addmergesubscription @publication = N'publMirKvartir', 
@subscriber = N'P1-DB-02', 
@subscriber_db = N'Notice', 
@subscription_type = N'Push', 
@sync_type = N'Automatic', 
@subscriber_type = N'Global', 
@subscription_priority = 75, 
@description = null, 
@use_interactive_resolver = N'False'
exec sp_addmergepushsubscription_agent 
@publication = N'publMirKvartir', 
@subscriber = N'P1-DB-02', 
@subscriber_db = N'Notice', 
@job_login = N'Опять имя того же юзара', 
@job_password = 'Пароль ', @subscriber_security_mode = 1, 
@publisher_security_mode = 1, @frequency_type = 64, @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 = 20091125, @active_end_date = 99991231, 
@enabled_for_syncmgr = N'False'
GO

Все работает за исключением следующего

Нужно что бы изменения таблицы Publishers не передавались на издатель а они передаються в обе стороны , не знаю что с этим можно сделать.

И помогите понять эти 2 параметра
@identity_range = 1000000,
@pub_identity_range = 500000000,

при таких параметрах на подписчике identity начинаеться с 2 000 000 , если @identity_range = 100000000, то с 200 000 000 .
7 дек 09, 16:54    [8030589]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
ABV
Member

Откуда: Minsk
Сообщений: 88
Andrey1306

Все работает за исключением следующего

Нужно что бы изменения таблицы Publishers не передавались на издатель а они передаються в обе стороны , не знаю что с этим можно сделать.

И помогите понять эти 2 параметра
@identity_range = 1000000,
@pub_identity_range = 500000000,

при таких параметрах на подписчике identity начинаеться с 2 000 000 , если @identity_range = 100000000, то с 200 000 000 .

Где-то было на форуме, параметр @subscriber_upload_options работает только для pull подписки, для push данные передаются в обе стороны.
А параметры определяют диапазон identity для издателя и подписчика, насколько я помню. Вообще они обычно определяются автоматически и проблем у меня с ними не было, для каждого подписчика автоматом определяется свой диапазон, и они не пересекаются.
Можете еще почитать msdn:
http://msdn.microsoft.com/ru-ru/library/ms152543%28SQL.90%29.aspx
7 дек 09, 18:51    [8031414]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
попробую push .

По поводу идентификаторов читал эту ветку. как то мало что прояснилось (( .
8 дек 09, 11:35    [8033382]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Спасибо за подсказку pull репликация решила вопрос с запретом передачи на издатель (хотя хотели сделать принудительную подписку).

По ходу тестирования возникли еще вопросы. (Напомню репликация слиянием)

Если добавляется еще одна статья репликации необходимо пересоздать моментальный снимок. и инициализировать подписки.
Возникает ошибка при применении снимка след. плана

Violation of PRIMARY KEY constraint 'PK_Object'. Cannot insert duplicate key in object 'dbo.Object'. (Source: MSSQLServer, Error number: 2627

Потому что таблица Object уже существует на подписчике , а агент репликации пытается снова заполнить ее данными.
при создании статьи параметр @pre_creation_cmd = N'none' , неужели нужно дропать постоянно таблицы ? или удалять все данные. Возможно ли обойти эту ошибку без параметра @pre_creation_cmd = N'drop'


И еще вопрос , как отрабатывает репликация при обрыве связи между серверами , ну на сутки например ?
9 дек 09, 18:42    [8043050]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
ABV
Member

Откуда: Minsk
Сообщений: 88
автор
И еще вопрос , как отрабатывает репликация при обрыве связи между серверами , ну на сутки например ?

Нормально отработает, при первой же синхронизации после того как связь появится, все зальется.
Главное, чтобы время, на которое сервера были без связи было меньше времени жизни метаданных (задается при создании публикации, по умолчанию 14 дней).
По первому вопросу не знаю, у меня все таблицы дропаются и пересоздаются. Будем ждать, пока гуру репликаций снизойдут до ответа :)
10 дек 09, 11:45    [8045482]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Спасибо , жду гурув )))

А пока попробовал , остановить оба сервера тестовых, запустить снова ,
репликация сама не поднялась, кликнуть переинициализировать используя существующий снепшот
выдает ошибку

The replication agent has not logged a progress message in 10 minutes. This might indicate an unresponsive agent or high system activity. Verify that records are being replicated to the destination and that connections to the Subscriber, Publisher, and Distributor are still active.

Не знаю куда копать (
10 дек 09, 15:20    [8047349]     Ответить | Цитировать Сообщить модератору
 Re: sp_addmergearticle Нужны пояснения )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Andrey1306
Спасибо , жду гурув )))

А пока попробовал , остановить оба сервера тестовых, запустить снова ,
репликация сама не поднялась, кликнуть переинициализировать используя существующий снепшот
выдает ошибку

The replication agent has not logged a progress message in 10 minutes. This might indicate an unresponsive agent or high system activity. Verify that records are being replicated to the destination and that connections to the Subscriber, Publisher, and Distributor are still active.

Не знаю куда копать (



А все нету ошибки , поспешил просто некоретно поднялся sql server agent
10 дек 09, 15:31    [8047428]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить