Использование Oracle Streams для репликации
Государственное
учреждение образования
"Белорусский
государственный технологический университет"
Факультет
издательского дела и полиграфии
Кафедра
информационных систем и технологий
Пояснительная
записка
по курсовой
работе:
"Использование
Oracle Streams для репликации"
Выполнила:
Нешик Д.А.
курс 3 группа 9
проверил:
доц. Смелов В.В
Минск 2011
Оглавление
Введение
1. Возможности репликации в СУБД Oracle
2. Основные компоненты Oracle Streams
3. Основные шаги по настройке репликации
3.1 Настройка баз данных(Startup open)
3.2 Настроить tnsnames.ora (на обоих серверах)
3.3 Табличное пространство и пользователь Streams
3.4 Dblink (между исходной и целевой базами данных)
4. Методы настройки репликации при помощи Oracle Streams
4.1 PL/SQL API
4.2 Упрощенное PL/SQL API
4.3 EM интерфейс
5. Пример использования PL/SQL API для настройки репликации
6. Пример использования упрощенного PL/SQL API
6.1 Репликация схемы пользователя при помощи MAINTAIN_SCHEMAS
6.2 Репликация таблиц при помощи MAINTAIN_TABLES
Заключение
Библиографический список
Введение
Streams - это средство СУБД, позволяющее переносить данные, транзакции и
события в потоке данных внутри одной или между базами данных. Это более
поздняя, чем "обычная" репликация (репликация на основе материализованных
представлений) ), модель организации непрерывного переноса данных как внутри,
так и между базами данных.Streams появились в Oracle версии 9, а в версии 10
получили свое развитие в возможностях и в организации.
Oracle Streams предоставляет набор элементов, которые
позволяют пользователю управлять:
· тем какую информацию помещать в поток
· как должен "течь" поток
· как он должен маршрутизироваться с
одно сервера на другой
· что должно происходить, когда поток
приходит на сервер
· где он должен прерываться.
Oracle Streams
применяется в качестве решения для различных областей :
· Репликация
· Очереди сообщений
· Загрузка хранилищ данных
Технически потоки Oracle Streams опираются на созданный независимо и
ранее аппарат организации очередей передачи сообщений, известный под названием
Oracle Advanced Queuing ,а также используют Dblink для передачи информации между исходной и целевой
базами данных.
В отличие от "обычной" репликации Oracle Streams не требует
заведения особых структур в БД (журналов таблиц, materialized views).
Репликация в Oracle Streams основана на обработке информации из журнала БД.
1. Возможности
репликации в СУБД Oracle
Существует два вида репликации в СУБД Oracle:
· Репликация на основе Oracle Streams
· Репликация на основе материализованных представлений
Репликация на основе Oracle Streams обладает следующими преимуществами:
· Работает быстрее (данные находятся в памяти: Streams pool)
· Репликация на уровне отдельных таблиц, схем, табличных
пространств
· Репликация между разными версиями базы данных и даже между
разными платформами
· Возможность фильтрации данных на основе правил
· Поддерживает как одностороннюю, так и двухстороннюю
репликацию
· Поддерживает синхронную (начиная с версии 11g) или
асинхронную репликацию
Репликации доступна во всех редакциях, однако для редакций Standard
Edition One и Standard Edition существуют ограничения:
· Не используется Buffered queue
· Не поддерживается Capture from redo
Не поддерживается Asynchronous change data
capture
Существует два вида репликации, основанных на материализованных
представлениях: Basic и Advanced.
Особенности Basic репликации:
· Доступна во всех редакциях Oracle
· Реплицируются только данные
· Репликация производится только в одну сторону
· В исходной базе данных обычные таблицы
· В базе, в которую реплицируют, находятся не таблицы, а
доступные только на чтение Snapshots (Read Only Materialized Views)
· Работает на основе триггеров
· После 16 неудачных попыток передачи данных подряд процесс
останавливается и требует вручную перезапустить JOBрепликация поддерживает
различные конфигурации: репликация в обе стороны, репликация со многими
первичными серверами и т. д. Она позволяет реплицировать не только данные, но и
другие объекты базы данных. Доступна только в Enterprise Edition.репликация,
начиная с Enterprise Edition 11g, позволяет передавать изменение структуры
реплицируемых объектов в автоматическом режиме без остановки БД.
2. Основные
компоненты Oracle
Streams
Три основных компонента Oracle Streams:
1. Capture - процесс сбора данных на источнике
3. Apply - процесс применения изменений в целевой базе данных
Capture(фоновый
процесс)
Сбор осуществляется двумя способами:
· Неявный сбор. Серверный процесс сбора
собирает DML и DDL события в исходной базе данных непосредственно из журналов
(redo log), либо с помощью горячего "раскапывания" (hot mining),
либо, при необходимости, из архивных журналов (archive log). После извлечения
данных процесс сбора форматирует их в Logical Change Record (LCR) и помещает в
область распространения для дальнейшей обработки. Процесс сбора может
фильтровать LCRы по заданным правилам. Таким образом буду собираться изменения
только заданных объектов.
· Явный сбор. Позволяет приложению
явным образом сгенерировать сообщение и поместить его в область хранения. Эти
сообщения могут быть отформатированы как LCR (дает возможность автоматически
применить их процессом применения (apply process), либо как пользовательские
сообщения, предназначенные для потребления другим пользовательским приложением.
Capture:
. Работает на стороне исходной БД
. Работают на основе правил;
. Просматривает средствами LogMiner журналы повтора и архив;
.Выбирает из журналов изменения в исходной БД ;
. Формирует логическую запись об изменении, Logical Change Record (LCR);
. Помещает LCR в качестве события в очередь Streams Advanced Queuing
(SAQ).(фоновый процесс)
1. Находится на стороне исходной БД
2. Работает на основе правил
. Выбирает события из очереди SAQ, сформированной Capture
. Помещает их в очереди на целевой БД через Oracle Net.
Apply (фоновый
процесс)
1. Находится на стороне целевой БД
2. Работает на основе правил
. Выбирает изменения(LCR) из очереди на целевой базе данных.
. Применяет изменения на целевой БД.
Правила(rules)
. Capture: определяют перечень данных, которые
собираются capture и очередь для записи изменений(LCR) в исходной базе данных.
.Propagation: определяет очередь в исходной базе
данных с изменениями и очередь в целевой базе данных для применения изменений
.Apply: определяют входную очередь и
перечень объектов, подлежащих изменению с изменениями(LCR)
Технология Oracle Streams
Рис.1. - Технология Oracle Streams
3. Основные
шаги по настройке репликации
Для работы с репликацией необходимо осуществить предварительные
настройки:
• Настроить параметры баз данных
• Настроить tnsnames.ora
• Создать табличное пространство и
пользователя Streams.
• Назначить права администратора
пользователю Streams
• Создать dblink (между исходной и целевой базами данных)
3.1
Настройка баз данных(Startup open)
• COMPATIBLE (минимум 9.2.0): для
использование Streams, Compatible должен быть минимум 9.2.0.
• GLOBAL_NAMES (TRUE): параметр должен
быть установлен в TRUE на всех базах. После включения Streams этот параметр
изменяться нельзя.
• GLOBAL_NAME используется для
идентификации базы, в которой произошли изменения. Все сообщения в репликации
будут содержать эти имена.
• JOB_QUEUE_PROCESSES (минимум 2): этот
параметр указывает количество процессов, которые может задействовать DBMS_JOB.
• AQ_TM_PROCESSES (лучше не прописывать
в файле параметров вообще): количество процессов для мониторинга очередей.
o Сбросить в значение по-умолчанию можно командой alter system
reset AQ_TM_PROCESSES scope=spfile;
• LOGMNR_MAX_PERSISTENT_SESSIONS(минимум
1, должен быть равен или больше количества процессов сбора; для 11g не
требуется): количество постоянных сессий, используемых LOGMINER.
• LOG_PARALLELISM(должен быть 1 на всех
базах, осуществляющих сбор изменений): устарел, начиная с версии 10.1.
• PARALLEL_MAX_SERVERS(минимум 2):
каждый процесс сбора и применений изменений может использовать несколько
параллельных серверных процессов. Процесс применения по-умолчанию требует 2
параллельных серверных процесса.
• SHARED_POOL_SIZE (минимум 100 Мб):
каждый процесс сбора требует 10 Мб в shared pool, но Streams ограниченые
использования 10% shared pool.
• JAVA_POOL_SIZE (минимум 50 Мб, лучше
100): по опыту необходимо также выделить минимум 50 мб под JAVA VM.
• OPEN_LINKS (минимум 4): задает
максимальное количество одновременно открытых в одной сессии соединений с
удаленной базой.
• Базы данных должны быть в
(ARCHIVELOG).
В данном случае было необходимо произвести такие настройки:
• alter system set
GLOBAL_NAMES=TRUE scope=both;
• alter system set
JOB_QUEUE_PROCESSES=8 scope=both;
• alter system set
LOGMNR_MAX_PERSISTENT_SESSIONS=8 scope=spfile;
• alter system set
PARALLEL_MAX_SERVERS=8 scope=both;
• alter system set
SHARED_POOL_SIZE=200m scope=both;
• alter system set
STREAMS_POOL_SIZE=200m scope=both;
• alter system set
JAVA_POOL_SIZE=50m scope=both;
• alter system set
OPEN_LINKS=8 scope=spfile;
• alter system set
AQ_TM_PROCESSES=3 scope=both;
На исходной базе данных необходимо перевести базу данных в режим archivelog, для того чтобы сервер Oracle мог сохранять данные файла журнала
повторного выполнения, перед тем как файл будет перезаписан. Тогда сервер будет
архивировать журналы и данные не будут утеряны.
Для перевода базы данных в режим ARCHIVELOG необходимо:
• остановить экземпляр Oracle - shutdown immediate;
• запустить экземпляр Oracle в режиме mount;
• перевести базу данных в режим
ARCHIVELOG
• открыть базу данных. immediate;
startup mount;database archivelog;database open;
3.2
Настроить tnsnames.ora (на обоих серверах)
.local - исходная база данных
dest.local - целевая база данных
.local = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
src_server)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME
=orcl11) )).local = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
dest_server)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
orcl22 ))
3.3
Табличное пространство и
пользователь Streams
· Создать или использовать существующее табличное пространство
· Создать пользователя Oracle Streams
· Выдать пользователю привилегии DBA. Роль DBA необходима, когда пользователь создает или
изменяет процессы сбора и применений. Когда пользователь не делает этого -
можно забрать роль DBA.
Рис.2. - Табличное пространство и пользователь Streams
3.4
Dblink (между исходной и
целевой базами данных)
Необходимо подключиться как администратор Oracle Streams и создать database links
Рис.3. Создание Dblink
(между исходной и целевой базами данных)
4. Методы
настройки репликации при помощи Oracle Streams
Для настройки репликации применяются следующие методы (рис. 4) :
• PL/SQL API
• Упрощенное PL/SQL API (макрокоманды,
начинающиеся на MAINTAIN)
• Enterprise Manager интерфейс (GUI)
Рис.4. Методы для настройки репликации при помощи Oracle Streams
4.1
PL/SQL API
Позволяет использовать все процедуры, находящиеся в перечисленных ранее
пакетах, за счет чего обеспечивает самый гибкий способ настройки.
4.2
Упрощенное PL/SQL API
Начиная с 11-ой версии СУБД Oracle поддерживает специальные макрокоманды
для настройки репликации. Теперь нет необходимости вручную создавать очереди,
процессы сбора, передачи и применения. Достаточно запустить одну процедуру, которая
сгенерирует скрипт и запустит его. В случае неудачи этот скрипт выдаст ошибку и
позволит в будущем продолжить выполнение, либо откатить изменения.
Для упрощения конфигурации Oracle ввел в базе данных ряд простых
процедур, осуществляющих детальную конфигурацию. Это такие процедуры как MAINTAIN_GLOBAL, MAINTAIN_SCHEMAS, MAINTAIN_SIMPLE_TTS,
MAINTAIN_TTS, MAINTAIN_TABLES(рис.5 )
Рис.5. - Процедуры упрощенного PL/SQL API
Возможные параметры при использовании данных процедур:
репликация пользователь база данный
DBMS_STREAMS_ADM.MAINTAIN_GLOBAL(_directory_object IN
VARCHAR2,_directory_object IN VARCHAR2,_database IN VARCHAR2,_database IN
VARCHAR2,_actions IN BOOLEAN DEFAULT TRUE,_name IN VARCHAR2 DEFAULT
NULL,_directory_object IN VARCHAR2 DEFAULT NULL,_file_name IN VARCHAR2 DEFAULT
NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table IN VARCHAR2 DEFAULT
NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN VARCHAR2 DEFAULT
NULL,_name IN VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table
IN VARCHAR2 DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN
VARCHAR2 DEFAULT NULL,_file IN VARCHAR2 DEFAULT NULL,_directional IN BOOLEAN
DEFAULT FALSE,_ddl IN BOOLEAN DEFAULT FALSE,IN INTEGER DEFAULT_STREAMS_ADM.INSTANTIATION_FULL);_STREAMS_ADM.MAINTAIN_TTS(_names
IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,_directory_object IN
VARCHAR2,_directory_object IN VARCHAR2,_database IN VARCHAR2,_database IN
VARCHAR2,_actions IN BOOLEAN DEFAULT TRUE,_name IN VARCHAR2 DEFAULT
NULL,_directory_object IN VARCHAR2 DEFAULT NULL,_file_name IN VARCHAR2 DEFAULT
NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table IN VARCHAR2 DEFAULT
NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN VARCHAR2 DEFAULT
NULL,_name IN VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table
IN VARCHAR2 DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN
VARCHAR2 DEFAULT NULL,_file IN VARCHAR2 DEFAULT NULL,_directional IN BOOLEAN
DEFAULT FALSE,_ddl IN BOOLEAN DEFAULT FALSE);_STREAMS_ADM.MAINTAIN_SIMPLE_TTS(_name
IN VARCHAR2,_directory_object IN VARCHAR2,_directory_object IN
VARCHAR2,_database IN VARCHAR2,_database IN VARCHAR2,_actions IN BOOLEAN
DEFAULT TRUE,_name IN VARCHAR2 DEFAULT NULL,_directory_object IN VARCHAR2 DEFAULT
NULL,_directional IN BOOLEAN DEFAULT FALSE);
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(_names IN
VARCHAR2,_directory_object IN VARCHAR2,_directory_object IN VARCHAR2,_database
IN VARCHAR2,_database IN VARCHAR2,_actions IN BOOLEAN DEFAULT TRUE,_name IN
VARCHAR2 DEFAULT NULL,_directory_object IN VARCHAR2 DEFAULT NULL,_file_name IN
VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table IN VARCHAR2
DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN VARCHAR2
DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT
NULL,_queue_table IN VARCHAR2 DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT
NULL,_queue_user IN VARCHAR2 DEFAULT NULL,_file IN VARCHAR2 DEFAULT
NULL,_directional IN BOOLEAN DEFAULT FALSE,_ddl IN BOOLEAN DEFAULT FALSE,IN INTEGER
DEFAULT_STREAMS_ADM.INSTANTIATION_SCHEMA);
DBMS_STREAMS_ADM.MAINTAIN_TABLES(_names IN
VARCHAR2,_directory_object IN VARCHAR2,_directory_object IN VARCHAR2,_database
IN VARCHAR2,_database IN VARCHAR2,_actions IN BOOLEAN DEFAULT TRUE,_name IN
VARCHAR2 DEFAULT NULL,_directory_object IN VARCHAR2 DEFAULT NULL,_file_name IN
VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_queue_table IN VARCHAR2
DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT NULL,_queue_user IN VARCHAR2
DEFAULT NULL,_name IN VARCHAR2 DEFAULT NULL,_name IN VARCHAR2 DEFAULT
NULL,_queue_table IN VARCHAR2 DEFAULT NULL,_queue_name IN VARCHAR2 DEFAULT
NULL,_queue_user IN VARCHAR2 DEFAULT NULL,_file IN VARCHAR2 DEFAULT
NULL,_directional IN BOOLEAN DEFAULT FALSE,_ddl IN BOOLEAN DEFAULT FALSE,IN INTEGER
DEFAULT_STREAMS_ADM.INSTANTIATION_TABLE);
4.3
EM интерфейс
интерфейс позволяет осуществить репликацию при помощи двух помощников
(рис.6 ). Для репликации целого табличного
пространства необходимо выбрать помощник "Streams Tablespace Replication
Wizard". Для репликации отдельных таблиц, схем
и всей базы данных необходимо выбрать "Streams Global, Schema,
Table and Subset Replication Wizard".
Рис.6. EM интерфейс позволяет осуществить репликацию при помощи двух
помощников
5. Пример
использования PL/SQL API для настройки репликации
Репликация таблицы (действия на исходной базе данных)
Создадим таблицу, которую в дальнейшем будем реплицировать.
Установим для нее дополнительное журналирование баз данных.logging - это
процесс записи дополнительной информации в журнал во время выполнения операций
изменения (например, изменения строки).
Рис.7. - Создание таблицы для репликации и дополнительное журналирование.
Создадим очередь для передачи событий в базе данных источнике.
В БД-источнике создадим процесс захвата изменений(capture), одновременно указав правила отбора
изменений в очередь, а также создадим процесс переноса изменений(propagation)(рис. 8).
Рис.8. - Процесс захвата изменений(capture), процесс переноса изменений(propagation).
Теперь для правильного воспроизведения изменений в принимающей
БД требуется передать ей в качестве "точки отсчета" номер изменений в
БД-источнике.
Теперь необходимо запустить процесс захвата изменений(рис.9).
Рис.9. - Процесс захвата изменений
Репликация таблицы (действия на целевой базе данных)
В целевой базе данных создадим процесс применения изменений(apply), одновременно указав правила отбора
изменений в очередь.
Для удобства отключим реакцию на ошибки, иначе процесс
применения изменений может самопроизвольно прекращаться.
Теперь необходимо запустить процесс применения изменений.
Рис.10. - Действия на целевой базе данных
6. Пример
использования упрощенного PL/SQL API
Процедуры упрощенного PL/SQL API используют директории для записей файлов дампа и
хранения временных файлов, используемых в репликации, которые необходимо
заранее создать и дать на них права администратору Streams(рис.11).
Рис.11. - Создание директорий и права на чтение и запись для администратора
Streams.
.1 Репликация
схемы пользователя при помощи MAINTAIN_SCHEMAS
Рис.12. - Репликация схемы пользователя при помощи MAINTAIN_SCHEMAS
schema_names - имя реплицируемой схемы
source_directory_object - имя директории на БД источнике_directory_object - имя директории на целевой БД_database
- имя БД источника_database - имя целевой БД_actions - применение изменений_file_name - имя файла DUMP
capture_name - имя
процесса захвата изменений (capture)
capture_queue_name - имя очереди
для capture
capture_queue_user - пользователь, создающий очередь для capture
propagation_name - имя процесса передачи изменений (propagation)_name - имя процесса применения изменений (apply)
apply_queue_name - имя очереди для apply
apply_queue_user - пользователь, создающий очередь для apply
log_file - файл для файла log_directional - двусторонняя
репликация,_ddl включение ddl-изменений
6.2
Репликация таблиц при
помощи MAINTAIN_TABLES
table_names - имя
реплицируемой тадлицы
source_directory_object - имя директории на БД источнике_directory_object - имя директории на целевой БД_database
- имя БД источника_database - имя целевой БД_actions - применение изменений_name - имя процесса передачи изменений (propagation)_file - файл для файла log_directional - двусторонняя
репликация,_ddl включение ddl-изменений
Заключение
Технология Oracle Streams позволяет настраивать репликацию при
помощи нескольких методов, что позволяет выбрать необходимый механизм для
конкретного случая в зависимости от сложности задачи.
Oracle Streams начинает
устойчиво работать с версии 10.2.0 и продолжает развиваться в следующих
версиях.
Методы упрощенного PL/SQL API, появившиеся в Oracle 11g
позволяют выполнить всю настройку репликации при помощи одной команды, а также
сгенерировать скрипт репликации, который можно изменять при необходимости и
запускать отдельными блоками, что существенно упрощает работу с репликацией на
основе Oracle Streams.
Репликации при помощи Oracle Streams позволяет
использовать практически мгновенную передачу данных, однако и требует
существенных затрат оперативной памяти компьютера.
Библиографический
список:
1. Документация Oracle® Database PL/SQL Packages and Types Reference
11g Release 1 (11.1)
Интернет ресурсы:
. http://www.oraclegis.com/blog/?p=417 - статья про
использование репликации при помощи Oracel Streams
. http://www.citforum.ru/database/oracle/streams_simple - общие сведения о Oracle Streams