Как добавить справочник в реплицируемые компоненты, не отключая вторичный сервер?

5 0

"Как добавить справочник в реплицируемые компоненты, не отключая вторичный сервер?" - спросил меня однажды Администратор одного из клиентов. "А возможно ли такое?" - подумал я.

А дело здесь вот в чем: для того чтобы сервера могли правильно обмениваться информацией, необходимо корректно настроить доступ к изменению этой информации. А настраивается доступ в компоненте Удаленные серверы, области Реплицируемые компоненты. Все бы ничего, но для изменения списка реплицируемых компонент требуется остановить вторичный сервер. Последующее включение сервера требует выполнить полную передачу данных. Вот здесь начинаются проблемы...

При автоматизации большого числа филиалов, распространение прикладной разработки на сервера репликации становится очень трудоемким.

На помощь пришли коллеги с другого отдела. Их бесценный опыт в репликации помог быстро решить наболевший вопрос: решением явился 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

Благодарности:
  Шанюк Марине за предоставленный сценарий,
  Чурбакову Ивану за консультации в запуске сценария.

Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий