"Как добавить справочник в реплицируемые компоненты, не отключая вторичный сервер?" - спросил меня однажды Администратор одного из клиентов. "А возможно ли такое?" - подумал я.
А дело здесь вот в чем: для того чтобы сервера могли правильно обмениваться информацией, необходимо корректно настроить доступ к изменению этой информации. А настраивается доступ в компоненте Удаленные серверы, области Реплицируемые компоненты. Все бы ничего, но для изменения списка реплицируемых компонент требуется остановить вторичный сервер. Последующее включение сервера требует выполнить полную передачу данных. Вот здесь начинаются проблемы...
При автоматизации большого числа филиалов, распространение прикладной разработки на сервера репликации становится очень трудоемким.
На помощь пришли коллеги с другого отдела. Их бесценный опыт в репликации помог быстро решить наболевший вопрос: решением явился SQL-скрипт, приведенный ниже.
Скрипт:
1. Выполнить SQL-сценарий, предварительно заменив Заголовок типа справочника на заголовок справочника, который требуется добавить в реплицируемые компоненты:
update MBComponent
set IDSPS = IDSPS+1000000
where Name in ('Заголовок типа справочника')
2. Добавить тип справочника в реплицируемые компоненты (Утилиты администрации->Репликация->Удаленные серверы)
3. Выполнить SQL-сценарий, предварительно заменив Заголовок типа справочника на заголовок справочника, который требуется добавить в реплицируемые компоненты:
update MBComponent
set IDSPS = IDSPS-1000000
where Name in ('Заголовок типа справочника')
4. Выполнить SQL-сценарий, предварительно заменив ReferenceName на имя типа справочника, который требуется добавить в реплицируемые компоненты:
-- ===============================================================
-- Передать записи справочника по репликации на вторич. сервер
-- ===============================================================
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET ANSI_NULLS OFF
SET ANSI_NULL_DFLT_ON ON
SET CONCAT_NULL_YIELDS_NULL OFF
SET DATEFORMAT DMY
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
declare @Vid int, @Analit int, @Query varchar (2096), @NumAction numeric(38,0), @CommonResourceBlocked int
declare Crs scroll cursor for
select va.Vid, a.Analit
from MBAnalit a, MBVidAn va
where va.Vid = a.Vid
and va.Kod in ('ReferenceName')
order by 1
open Crs
fetch first from Crs into @Vid, @Analit
while @@fetch_status <> -1
begin
if @@fetch_status<>-2
begin
print convert(varchar(4), @Vid) + ' ' + convert(varchar(10), @Analit)
begin tran
SET @NumAction = NULL
EXECUTE MBFixedActionSP @FixedServer = NULL,
@From = NULL,
@Sost = 'С',
@TableName = 'MBAnalit',
@Where = NULL,
@NumAction = @NumAction OUTPUT,
@TypeAction = 'I',
@DevLevel = 0,
@SrcRecID = @Analit,
@SrcCompIDSPS = @Vid,
@CommonResourceBlocked = @CommonResourceBlocked OUTPUT
EXECUTE MBFixedActionSP @FixedServer = NULL,
@From = NULL,
@Sost = 'Н',
@TableName = 'MBAnalit',
@Where = NULL,
@NumAction = @NumAction OUTPUT,
@TypeAction = 'I',
@DevLevel = 0,
@SrcRecID = @Analit,
@SrcCompIDSPS = @Vid,
@CommonResourceBlocked = @CommonResourceBlocked OUTPUT
commit
end
fetch next from Crs into @Vid, @Analit
end
close Crs
deallocate Crs
После выполнения сценария можно выполнить сеанс репликации в штатном режиме. Данные добавленного справочника полетят на вторичный сервер в режиме "Создание записи".
И конечно же P.S.: SQL-сценарий успешно "обкатан" на версии Directum 4.5.1
Благодарности:
Шанюк Марине за предоставленный сценарий,
Чурбакову Ивану за консультации в запуске сценария.
Авторизуйтесь, чтобы написать комментарий