Применение 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 функция Advanced Queuing (AQ) позволяет ставить сообщения в очередь, передавать их очередям-подписчикам (subscribing queues), уведомлять приложения пользователей о том, что сообщения уже готовы к эксплуатации, и удалять сообщения из очередей в пункте их назначения.
  • Управление событиями и уведомление о них. Возможность перехватывать события и передавать их на основании соблюдения определенных правил позволяет применять Oracle Streams и для уведомления о событиях. События, находящиеся в очереди, могут удаляться из нее явным образом клиентским приложением для обмена сообщениями или другой программой и сопровождаться выполнением на их основании каких-нибудь действий, отправки соответствующего уведомления на адрес электронной почты или мобильный телефон в том числе.
  • Загрузка хранилища данных. Oracle Streams может перехватывать изменения, вносимые в производственную базу данных, и затем отправлять их в хранилище данных. В ходе процесса применения этих изменений к данным, перед выполнением их загрузки в целевую базу данных, могут применяться различные операции преобразования.
  • Защита данных. Технологию 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.

  • Проверить, чтобы в параметре COMPATIBLE была указана версия 10.2.0 или выше в обеих базах данных (на самом деле в нем можно даже указывать версию 9.2 или выше).
  • Проверить, чтобы для параметра JOB_QUEUE_PROCESSES в исходной базе данных было установлено, как минимум, значение 2.
  • Проверить, чтобы для параметра GLOBAL_NAMES как в исходной, так и в целевой базе данных было установлено значение true.
  • Установить параметр LOG_ARCHIVE_DEST_n. Нужно, чтобы на сайте, отвечающего за основной процесс захвата, присутствовало хотя бы одно место для размещения архива журналов.
  • Проверить, чтобы под компонент памяти STREAMS_POOL_SIZE в SGA было выделено хотя бы 200 Мбайт.
  • Удостовериться в том, что табличное пространство является достаточно большим для того, чтобы удовлетворять требования параметра UNDO_RETENTION.
  • Удостовериться в том, что исходная база данных функционирует в режиме архивирования журналов (ARCHIVELOG).

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 34399 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Копирование файлов между базам...
Копирование файлов между базам... 2961 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Клонирование базы Oracle
Клонирование базы Oracle 8374 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:05
Индексы Oracle
Индексы Oracle 27474 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать