DBRE - Руководство пользователя


/ Английский / Русский /

Оглавление:

1. Описание применения
2. Принцип работы
3. Опции коммандной строки
4. Файл конфигурации
5. Расширения БД источнка

Описание применения

Система DBRE предназначена для репликации баз данных типа точка во временн. Систему можно применять как для разнесённых в пространстве, находящихся на разных хостах баз данных, так и для БД находящихся в пределах одного хоста. Классический пример применения системы - распределенная сеть филиалов. Раз в сутки филиалы "сливают" свои данные в головной офис. Офис может отсылать филиалам новые справочники и сервисную информацию.

Принцип работы

Система читает конфигурационный файл XML в котором указаны все необходимые данные для работы. Затем производится подключение к БД и открытие файлов данных. В соответствии с конфигом, из БД-источника или файла выбираются записи, которые затем передаются в БД-приёмник или файл.
Запись осуществляется в одной транзакции, таким образом, обеспечивается гарантия того, что она будет выполнена целиком или не выполнена вовсе.
Система позволяет осуществлять контроль за выгруженными записями для исключения их повторной выгрузки. Для этого, в выгружаемую таблицу должно быть добавлено сервисное поле - unloaded и триггер на событие update, обнуляющий его.
Имеется возможность задать разные имена полей для источника и приёмника, ввести индексное поле (для осуществления обновления записи), а так же указать что поле в приёмнике является автоинкрементным для исключения записи повторяющегося ключа. Кроме того, можно выгружать информацию об удаленных записях в источнике, с последующим удалением в приёмнике.

Опции коммандной строки

-p или --params - путь к файлу конфигурации (например: /etc/dbre/enterprise_database.xml), вы обязательно должны задать этот параметр
-l или --log - путь к файлу журнала (логу) (например: /var/log/dbre.log), если параметр опущен, информация (при включенном режиме verbose) будет выводиться в стандартный поток вывода
-v или --verbose - уровень вывода дополнительной информации. Может принимать значения 1 или 2. Предназначен для подробного вывода процесса репликации. Полезно для отладки.
-h или --help - вывод краткой подсказки и выход

Файл конфигурации

Конфигурационный файл имеет формат XML и содержит следующие секции:
<replication> - основная секция

<input> - секция входного источника данных. На весь файл конфигурации должна быть в единственном числе.
Имеет параметр type могущий примать значения file или db
В зависимости от значения параметра секция <input> должна содержать следующие подсекции:
Для file:
<name> - путь к файлу. Например /var/dbre/exchange/enterprise_database.lre
Для db:
b><type> - тип СУБД. Может принимать значения: fb, mysql, oracle, odbc, postgre, sqlite
<server> - IP адрес или dns имя сервера БД
<database> - Имя базы данных
<user> - Пользователь БД
<password> - Пароль пользователя
<role> - Роль пользователя. Поддерживается только СУБД fb
<charset> - Кодировка. В соответствии с принятым для выбранной СУБД именованием

<output> - секция выходного источника данных. Аналогично <input>

<deleted> - секция - ключ. Может содержать 1 или 0, а так же отсутствовать. Предназначена для включения выгрузки/загрузки информации об удалённых данных. При включении параметра, БД-источник должна содержать таблицу deletedfields (Подробнее см.
расширения БД)

<table> - секция содержашая параметры выгружаемой таблицы. Может присутствовать в любом количестве (по числу необходимых для репликации таблиц). Должна содержать следующие секции:
<input_name> - имя таблицы в источнике данных
<output_name> - имя таблицы в приёмнике данных
<unloaded> - секция - ключ. Может содержать 1 или 0, а так же отсутствовать. Включает режим контроля выгрузки. При включенном режиме, в таблице БД-источника должно присутствовать поле unloaded (Подробнее см. расширения БД). Выгружаются только записи со значением NULL в этом поле. После выгрузки, в них проставляется 1.

<field> - секция содержащая параметры полей таблицы. Может присутствовать в секции <table> в любом количестве.
<input_name> - имя поля в таблице источника данных
<output_name> - имя поля в таблице приёмника данных
<type> - тип поля. Может принимать следующие значения:
int
float
double
string - по умолчанию
date
time
timestamp
blob
<index> - указатель что поле является ключевым. Может принимать значения 1, 0 или отсутствовать. Служит для идентификации записи в БД-приёмнике для её обновления.
<autoinc> - указатель что поле является автоинкрементным. Может принимать значения 1, 0 или отсутствовать. Во включенном режиме поле не заносится в таблицу приёмник.

Пример конфигурационного файла

<?xml version="1.0" ?>
<replication>
    <input type="file">
	<name>/var/dbre/exchange/test.lre</name>
    </input>
    <output type="db">
        <type>fb</type>
        <server>localhost</server>
        <database>testdb</database>
        <user>SYSDBA</user>
        <password>masterke</password>
    </output>
    <deleted>1</deleted>
    <table>
        <input_name>table1</input_name>
        <output_name>table1</output_name>
        <unloaded>1</unloaded>
	<field>
	    <input_name>id</input_name>
	    <output_name>id</output_name>
	    <type>int</type>
	    <index>1</index>
	    <autoinc>1</autoinc>
	</field>
        <field>
            <input_name>field11</input_name>
            <output_name>field11</output_name>
            <type>string</type>
        </field>
        <field>
	    <input_name>field12</input_name>
	    <output_name>field12</output_name>
	    <type>timestamp</type>
	</field>
	<field>
            <input_name>field13</input_name>
            <output_name>field13</output_name>
	    <type>int</type>
        </field>
    </table>
    <table>
        <input_name>table2</input_name>
	<output_name>table2</output_name>
	<field>
	    <input_name>id1</input_name>
	    <output_name>id1</output_name>
	    <type>int</type>
	    <index>1</index>
	</field>
	<field>
	    <input_name>id2</input_name>
	    <output_name>id2</output_name>
	    <type>int</type>
	    <index>1</index>
	    <autoinc>1</autoinc>
	</field>
	<field>
	    <input_name>field21</input_name>
	    <output_name>field21</output_name>
	    <type>int</type>
	</field>
	<field>
            <input_name>field22</input_name>
            <output_name>field22</output_name>
            <type>string</type>
        </field>
        <field>
            <input_name>field23</input_name>
            <output_name>field23</output_name>
            <type>int</type>
        </field>
    </table>
</replication>

Расширения БД источника

Для работы дополнительных функций таких как контроль выгруженных и удаленных записей в БД-источник должны быть внесены следующие дополнения:
1. Во все таблицы записи которых должны контролироваться на выгрузку, должно быть добавлено поле unloaded:
alter table TABLE1 add UNLOADED char(1);
Для обнуления этого поля в момент изменения записи в таблицу нужно добавить триггер на событие update:
create trigger TABLE1_BU0 for TABLE1
active before update position 0
as
begin
    if (new.UNLOADED = old.UNLOADED) then
	new.UNLOADED = null;
end
2. Для выгрузки информации об удалённых записях, в БД нужно добавить таблицу deletedfields:
create table DELETEDFIELDS (TEXT varchar(255));
Для занесения в неё данных в каждую контролируемую таблицу нужно добавить триггер на событие before delete:
create trigger TABLE1_BD0 for TABLE1
active before delete position 0
as
begin
    insert into DELETEDFIELDS (TEXT) values ('TABLE1;ID:'||cast(old.ID as varchar(10))||';');
end
Триггер должен заносить строку следующего содержания: ИМЯ_ТАБЛИЦЫ;ИМЯ_КЛЮЧЕВОГО_ПОЛЯ1:ЗНАЧЕНИЕ;ИМЯ_КЛЮЧЕВОГО_ПОЛЯN:ЗНАЧЕНИЕ;