Применение Oracle Streams для репликации и обмена информацией

Oracle Streams: репликация и обмен информациейС разрастанием компаний появляется потребность в наличии возможности совместного использования информации между несколькими базами данных и приложениями. Применение разнородных технологий для совместного использования информации лишь усложняет эффективную репликацию. Технология Oracle Streams (Потоки Oracle) представляет собой единое универсальное решение для осуществления обмена информацией по всему предприятию.

В контексте Oracle Streams каждая единица информации называется событием (event), и обмен всеми такими событиями осуществляется в потоке. Поток передает указываемую информацию в указываемые пункты назначения. Oracle Streams захватывает происходящие в базе данных изменения за счет использования как активных, так и архивных журналов повторного выполнения. Он перехватывает их и сохраняет в очередях после выполнения надлежащего форматирования, а затем передает в другие базы данных и, если нужно, применяет их там. С его помощью информацию можно захватывать (собирать), передавать и применять и в пределах одной и той же базы данных Oracle, и между двумя базами данных Oracle, и между несколькими базами данных Oracle и даже между базой данных Oracle и базой данных другого типа (не Oracle).

При применении Oracle Streams также можно выполнять преобразование потоков данных на любом из трех следующих этапов: на этапе захвата данных, на этапе их передачи в целевое место и на этапе их применения в целевом месте. В состав событий могут входить сообщения, помещаемые в очередь базы данных приложениями, а также DML- и DDL-изменения. В частности, Oracle Streams можно применять для решения следующий задач.


На заметку! Oracle Streams может применяться на нескольких уровнях: на уровне базы данных, на уровне схемы и даже на уровне отдельных таблиц, и использовать для осуществления перехвата изменений на этих уровнях различные правила.


 

Архитектура Oracle Streams

Тремя базовыми элементами технологии Oracle Streams являются этап захвата, этап подготовки и этап потребления событий внутри базы данных Oracle.

На этапе захвата (capture) осуществляется сбор информации об изменениях из исходной базы данных на уровне таблицы, схемы или всей базы данных. В Oracle Streams события могут захватывать двумя способами: явным и неявным. Явным захватом называется процесс, когда пользователи и приложения вручную помещают события в очередь. Помещаемыми в очередь подобным образом событиями могут быть либо записи об изменениях, содержащиеся в журналах повторного выполнения, либо сообщения определяемого пользователем типа, называемые пользовательскими сообщениями. Неявным захватом называется процесс, когда сервер перехватывает DML- и DDL-изменения из исходной базы данных за счет исследования содержимого активных и архивных журналов повторного выполнения. Процесс неявного захвата выполняется в фоновом режиме и предусматривает участие следующих компонентов.

Далее процесс захвата преобразует объединенные записи данных повторного выполнения в логические записи изменений (Logical Change Records — LCR) и передает их на этап подготовки для дальнейшей обработки. Каждая LCR-запись описывает изменения, внесенные в одну строку оператором DML. Один оператор DML может приводить к генерации нескольких LCR-записей. LCR-запись, которая представляет собой набор захваченных изменений, также называется событием (event). LCR-записи, содержащие информацию о данных таблицы, называются логическими записями изменений строк (row LCR), а те, что содержат информацию о DDL-изменениях — логическими записями изменений DDL (DDL LCR). Правила, используемые в процессе захвата, зависят от того, какие изменения захватываются. Обратите внимание, что Oracle Streams можно настраивать так, чтобы база данных могла извлекать изменения из потока данных повторного выполнения в исходном месте и затем передавать в целевое место либо отдельно только LCR-записи, либо весь поток данных повторного выполнения с последующим извлечением необходимых LCR-записей непосредственно в самом целевом месте.

На этапе подготовки (staging) процесс Oracle Streams сохраняет события в очереди. В число этих событий могут входить изменения, захваченные как явным, так и не явным образом.

На последнем этапе, этапе потребления (consumption), находящиеся в очереди события начинают использоваться в целевой базе данных. Перед использованием событие должно удаляться из очереди. Пользователи и приложения могут удалять события из очереди явным образом. Однако по большей части их удаление из очереди происходит все-таки в рамках неявного процесса применения (apply process). Удаление из очереди и обработка захваченных данных осуществляется в соответствии с правилами. В ходе процесса применения захваченные данные могут как применяться напрямую, так предварительно преобразовываться с использованием кода PL/SQL.

 

Настройка Oracle Streams

Ниже перечислены шаги, которые необходимо выполнить для настройки механизма Oracle Streams и администрирования осуществляемых с его помощью операций по передаче изменений между несколькими базами данных. Следует иметь в виду, что тут предлагается лишь очень краткий обзор процесса настройки Oracle Stream, чтобы у вас могло сложиться общее впечатление о том, что он собой представляет. Для настоящей настройки Oracle Streams следует обязательно использовать соответствующие инструкции, предлагаемые в руководствах по Oracle.

1. Сначала нужно внести необходимые изменения в файл init.ora или SPFILE.

2. Затем необходимо создать нового пользователя для управления Oracle Streams. Перед его созданием может потребоваться создать для него новое табличное пространство: 

SQL> CREATE TABLESPACE streams_tbs
DATAFILE '/u01/app/oracle/oradata/
streams_tbs.dbf' SIZE 100M;

Теперь можно создать в базе данных самого пользователя, ответственного за администрирование Oracle Streams, как показано ниже: 

SQL> CREATE USER strmadmin
IDENTIFIED BY strmadmin
DEFAULT TABLESPACE streams_tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON streams_tbs;

3. Далее нужно выдать пользователю–администратору Oracle Streams (strmadmin) привилегии CONNECT, RESOURCE и DBA

SQL> GRANT DBA TO strmadmin;

4. Для предоставления необходимых привилегий администратору Oracle Streams следует использовать процедуру GRANT_ADMIN_PRIVILEGE из пакета DBMS_STREAMS_AUTH

SQL> BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
GRANTEE => 'strmadmin',
GRANT_PRIVILEGES => true);
END;

5. Затем необходимо создавать канал связи между исходной и целевой базой данных, как показано ниже:

SQL> CREATE DATABASE LINK целевая_база_данных
CONNECT TO strmadmin
IDENTIFIED BY strmadmin
USING 'target.db.world'; 

6. Oracle Streams осуществляет перемещение данных между исходной и целевой базой данных с помощью очередей. Поэтому далее необходимо создать очередь как в исходной, так и в целевой базе данных. Для этого потребуется выполнить в той и другой следующую процедуру, которая подразумевает создание обеих очередей с принятыми по умолчанию именами. 

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

7. Далее нужно включить дополнительную журнализацию для всех тех таблиц в исходной базе данных, для которых планируется перехватывать изменения. Делается это следующим образом:

SQL> ALTER TABLE emp ADD SUPPLEMENTAL LOG DATA
(PRIMARY KEY, UNIQUE) COLUMNS;

8. И, наконец, напоследок необходимо сконфигурировать процесс захвата в исходной базе данных с использованием процедуры ADD_TABLE_RULES из пакета DBMS_STREAMS_ADM

SQL> BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name          => 'scott.emp',
streams_type        => 'capture',
streams_name        => 'capture_stream',
queue_name          => 'strmadmin.streams_queue',
include_dml         => true,
include_ddl         => true,
inclusion_rule      => true);
END;
/

После настройки Oracle Streams в соответствие с перечисленными выше шагами можно тестировать настроенную конфигурацию, запустив процесс захвата и применив процесс применения для репликации данных таблицы (в данном примере — emp) из исходной базы данных в аналогичную таблицу в целевой базе данных. Для захвата изменений используется следующая процедура: 

SQL> BEGIN
DBMS_CAPTURE_ADM.START_CAPTURE(
capture_name => 'capture_stream');
END;
/

Для переноса захваченных изменений в целевую базу данных служит такая процедура:

SQL> BEGIN
DBMS_APPLY_ADM.START_APPLY(
apply_name => 'apply_stream');
END;
/ 

Технология Oracle Streams была рассмотрена в этой статье моего блога очень кратко. Тем не менее, она представляет собой очень мощное и полезное средство для выполнения в базах данных операций по репликации, переносу и обновлению данных. Главным интерфейсом к Oracle Streams служит соответствующая коллекция поставляемых Oracle пакетов PL/SQL. Здесь было показано, как применять некоторые из этих пакетов для настройки и управления механизмом Oracle Streams, чтобы вы могли посмотреть, что конкретно происходит на этапе захвата и передачи изменений. Для оказания помощи пользователям в настройке, администрировании и мониторинге сред Oracle Streams компания Oracle поставляет специальный инструмент Streams в составе интерфейса OEM Console. Для удобства работы с Oracle Streams рекомендуется использовать именно его.

Вас заинтересует / Intresting for you:

Создание базы данных Oracle
Создание базы данных Oracle 34400 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Копирование файлов между базам...
Копирование файлов между базам... 2961 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Клонирование базы Oracle
Клонирование базы Oracle 8375 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:05
Индексы Oracle
Индексы Oracle 27475 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Печать
Войдите чтобы комментировать