Описание репликации между подстанциями — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Полезные запросы)
 
(не показано 14 промежуточных версий 2 участников)
Строка 27: Строка 27:
 
|передача оперативных данных на подстанции (вызовы)
 
|передача оперативных данных на подстанции (вызовы)
 
|MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER(<STATION_ID>)
 
|MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER(<STATION_ID>)
 +
|один раз в 20 секунд
 +
|-
 +
|MIS.JOB_PROPAGATE
 +
|передача оперативных данных c подстанции на ЦДС (вызовы). Работает только на ПС
 +
|MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER
 
|один раз в 20 секунд
 
|один раз в 20 секунд
 
|-
 
|-
Строка 43: Строка 48:
 
|MIS.PKG_STATION_LINK.CONTROL_JOB_RUNNING();
 
|MIS.PKG_STATION_LINK.CONTROL_JOB_RUNNING();
 
|Один раз в минуту
 
|Один раз в минуту
 +
|-
 +
|MIS.DEL_SYS_AUD
 +
|Чистит таблицу sys.aud$
 +
| begin  delete from sys.aud$;  commit;  end;
 +
|Один раз в месяц
 
|}
 
|}
  
Строка 53: Строка 63:
 
* MIS.JOB_PROPAGATE_CALL_INFO - передача дозаполненных вызовов (раз в пять минут)
 
* MIS.JOB_PROPAGATE_CALL_INFO - передача дозаполненных вызовов (раз в пять минут)
 
* MIS.CONTROL_JOB_RUNNING следит за подвисшими джобами (один раз в минуту)
 
* MIS.CONTROL_JOB_RUNNING следит за подвисшими джобами (один раз в минуту)
 +
* MIS.DEL_SYS_AUD2 удаляет все данные из sys.aud$ (один раз в месяц)
  
 
При поднятии дампа станции из бекапа центральной следует использовать скрипт ER/DB_ER/CreateRostovStantion.bat.  
 
При поднятии дампа станции из бекапа центральной следует использовать скрипт ER/DB_ER/CreateRostovStantion.bat.  
Строка 58: Строка 69:
  
 
== Полезные запросы ==
 
== Полезные запросы ==
<source lang="sql">
+
<source>
 
-- Анализ сбоев работы заданий по репликации
 
-- Анализ сбоев работы заданий по репликации
 
select TRUNC("CURRENT_DATE"), JOB_NAME, count(*)
 
select TRUNC("CURRENT_DATE"), JOB_NAME, count(*)
Строка 65: Строка 76:
 
  order by 1 desc
 
  order by 1 desc
 
</source>
 
</source>
 +
 +
<source>
 +
-- просмотр логов JOB
 +
SELECT *
 +
  FROM sys.dba_scheduler_job_log
 +
WHERE job_name = '%%'
 +
</source>
 +
 +
<source>
 +
-- Состояние заданий репликации
 +
SELECT job_name,
 +
      state,
 +
      last_start_date,
 +
      last_run_duration,
 +
      next_run_date,
 +
      enabled
 +
  FROM dba_scheduler_jobs
 +
WHERE owner = 'MIS'
 +
</source>
 +
 +
 +
<source>
 +
-- более детальный просмотр логов
 +
SELECT *
 +
  FROM sys.dba_scheduler_jobs
 +
WHERE job_name LIKE '%JOB_PROPAGATE_CALL_INFO%'
 +
</source>
 +
 +
=== Отключение репликации ===
 +
<source>
 +
-- отключает все триггера репликации
 +
prompt ***  06-replication_disable.sql ****************************************
 +
 +
DECLARE
 +
    CURSOR cur_trig
 +
    IS
 +
        SELECT owner, trigger_name
 +
          FROM dba_triggers
 +
        WHERE trigger_name LIKE '%REPLICATION%' AND owner IN ('MIS', 'MED');
 +
BEGIN
 +
    FOR v_cur_trig IN cur_trig
 +
    LOOP
 +
        DBMS_OUTPUT.put_line (
 +
            v_cur_trig.owner || '-- ' || TO_CHAR (v_cur_trig.trigger_name));
 +
 +
        EXECUTE IMMEDIATE  'ALTER TRIGGER '
 +
                        || v_cur_trig.owner
 +
                        || '.'
 +
                        || v_cur_trig.trigger_name
 +
                        || ' DISABLE';
 +
    END LOOP;
 +
END;
 +
/
 +
</source>
 +
 +
=== Перезапуск репликации на подстанции ===
 +
* [[Перезапуск репликации на подстанции]]
 +
 +
=== Отключение репликации через пакет ===
 +
 +
MIS.PKG_REPLICATION.IS_REPL  - перекомпилить пакет со значение по умолчанию TRUE
 +
 +
=== Решение проблем ===
 +
==== MIS.BUFFER_TRANSFER_LOG накапливаются записи MIS.FK_PEOPLE_ADDR$ADDR, MIS.FK_PEOPLE_ADDR$PEOPLE ====
 +
* В таблице MIS.BUFFER_TRANSFER_LOG накапливаются записи
 +
** -2291:ORA-02291: integrity constraint (MIS.FK_PEOPLE_ADDR$ADDR) violated - parent key not found
 +
** -2291:ORA-02291: integrity constraint (MIS.FK_PEOPLE_ADDR$PEOPLE) violated - parent key not found
 +
 +
Решение см. [[Репликация. Проблемы с PEOPLE_ADDR]]
 +
 +
==== В MIS.BUFFER_TRANSFER  накапливаются записи и никогда не отсылаются на подстанции. LAST_TRY_DATE  NULL ====
 +
Причина - запись не отправляется на подстанцию пока не назначена какая либо подстанция. Обычно связано с дубликатами вызовов, в таблице
  
  
[[Прокопьевск. Станция скорой помощи]]
+
Смотри также:
[[Ростов-на-Дону. Станция скорой помощи]]
+
* [[Прокопьевск. Станция скорой помощи]]
 +
* [[Ростов-на-Дону. Станция скорой помощи]]
  
 
[[Категория:Скорая помощь]]
 
[[Категория:Скорая помощь]]

Текущая версия на 20:10, 26 ноября 2017

Введение

В данной статье описана схема реализации репликации в Ростове-На-Дону. Репликация основана на работе JOB, которые через DBLINK передают данные. Все данные, которые будут участвовать в репликации, через срабатывание триггеров, попадают в таблицу MIS.BUFFER_TRANSFER. Далее из этой таблицы с помощью JOB данные рассылаются на подстанции. Ошибки возникшие во время передачи попадают в таблицу MIS.BUFFER_TRANSFER_LOG. Логика работы с репликацией собрана в пакете MIS.PKG_REPLICATION.

Описание потоков данных, участвующих в репликации

Здесь должно быть описание того какие данные попадают от станции на подчтанции

ЦДС

На ЦДС работают четыре вида JOB:

Общее кол-во JOB на ЦДС составляет 20 штук

JOB Описание Тело периодичность
MIS.UPDATE_STATION_LINK_ID_ Проверка связи с подстанциями. Результат храниться в таблице MIS.STATION_LINK MIS.PKG_STATION_LINK.UPDATE_LINK_STATE(10); один раз в минуту
MIS.JOB_PROPAGATE_STATION_ID_(<STATION_ID>) передача оперативных данных на подстанции (вызовы) MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER(<STATION_ID>) один раз в 20 секунд
MIS.JOB_PROPAGATE передача оперативных данных c подстанции на ЦДС (вызовы). Работает только на ПС MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER один раз в 20 секунд
MIS.JOB_PROPAGATE_DICT Передача справочников на подстанции MIS.PKG_REPLICATION.PROPAGATE_BT_DICTIONARY_INFO Один раз в 5 минут
MIS.JOB_PROPAGATE_CALL_INFO (disabled) Передает дозаполненную информацию о вызов.Работает только на подстации MIS.PKG_REPLICATION.PROPAGATE_BT_CALL_INFO Один раз в пять минут
MIS.CONTROL_JOB_RUNNING Следит за состоянием джобов по репликации, если джоб выполняется дольше чем должен, то его перезапускает, логи хранятся в таблице MIS.JOB_RESTART_LOG MIS.PKG_STATION_LINK.CONTROL_JOB_RUNNING(); Один раз в минуту
MIS.DEL_SYS_AUD Чистит таблицу sys.aud$ begin delete from sys.aud$; commit; end; Один раз в месяц

Подстанция

Работают четыре вида JOB:

  • MIS.UPDATE_STATION_LINK_ID_1 - проверка связи с главной станцией. (раз в минуту)
  • MIS.JOB_PROPAGATE - Передача оперативных данных на ЦДС (раз в двадцать секунд). Вызов MIS.PKG_REPLICATION.PROPAGATE_BUFFER_TRANSFER
  • MIS.JOB_PROPAGATE_CALL_INFO - передача дозаполненных вызовов (раз в пять минут)
  • MIS.CONTROL_JOB_RUNNING следит за подвисшими джобами (один раз в минуту)
  • MIS.DEL_SYS_AUD2 удаляет все данные из sys.aud$ (один раз в месяц)

При поднятии дампа станции из бекапа центральной следует использовать скрипт ER/DB_ER/CreateRostovStantion.bat. Создание JOB подстанции можно найти ER/DB_ER/Expa/cr_stjob.sql

Полезные запросы

-- Анализ сбоев работы заданий по репликации
select TRUNC("CURRENT_DATE"), JOB_NAME, count(*)
  from MIS.JOB_RESTART_LOG
 group by TRUNC("CURRENT_DATE"), JOB_NAME
 order by 1 desc
-- просмотр логов JOB
SELECT *
  FROM sys.dba_scheduler_job_log
 WHERE job_name = '%%'
-- Состояние заданий репликации
SELECT job_name,
       state,
       last_start_date,
       last_run_duration,
       next_run_date,
       enabled
  FROM dba_scheduler_jobs
 WHERE owner = 'MIS'


-- более детальный просмотр логов
SELECT *
  FROM sys.dba_scheduler_jobs
 WHERE job_name LIKE '%JOB_PROPAGATE_CALL_INFO%'

Отключение репликации

-- отключает все триггера репликации
prompt ***  06-replication_disable.sql ****************************************

DECLARE
    CURSOR cur_trig
    IS
        SELECT owner, trigger_name
          FROM dba_triggers
         WHERE trigger_name LIKE '%REPLICATION%' AND owner IN ('MIS', 'MED');
BEGIN
    FOR v_cur_trig IN cur_trig
    LOOP
        DBMS_OUTPUT.put_line (
            v_cur_trig.owner || '-- ' || TO_CHAR (v_cur_trig.trigger_name));

        EXECUTE IMMEDIATE   'ALTER TRIGGER '
                         || v_cur_trig.owner
                         || '.'
                         || v_cur_trig.trigger_name
                         || ' DISABLE';
    END LOOP;
END;
/

Перезапуск репликации на подстанции

Отключение репликации через пакет

MIS.PKG_REPLICATION.IS_REPL  - перекомпилить пакет со значение по умолчанию TRUE

Решение проблем

MIS.BUFFER_TRANSFER_LOG накапливаются записи MIS.FK_PEOPLE_ADDR$ADDR, MIS.FK_PEOPLE_ADDR$PEOPLE

  • В таблице MIS.BUFFER_TRANSFER_LOG накапливаются записи
    • -2291:ORA-02291: integrity constraint (MIS.FK_PEOPLE_ADDR$ADDR) violated - parent key not found
    • -2291:ORA-02291: integrity constraint (MIS.FK_PEOPLE_ADDR$PEOPLE) violated - parent key not found

Решение см. Репликация. Проблемы с PEOPLE_ADDR

В MIS.BUFFER_TRANSFER накапливаются записи и никогда не отсылаются на подстанции. LAST_TRY_DATE NULL

Причина - запись не отправляется на подстанцию пока не назначена какая либо подстанция. Обычно связано с дубликатами вызовов, в таблице


Смотри также: