Oracle настройка гетерогенного сервиса

Обновлено: 04.07.2024

Oracle supports heterogeneous services to allow data in non-Oracle database to be queried using SQL. This support has been in the form of transparent gateways, which are vendor specific, or generic connectivity which uses ODBC or OLEDB to make the connections. The functionality supported by generic connectivity is typically more limited than that possible when using vendor specific gateways, but it is quick and simple to configure. The steps listed below can be used to connect Oracle to any ODBC compliant database (MS Access, SQL Server, MySQL etc.).

Setup

In the following example, "SQLSERVER1" is the ODBC Data Source Name (DSN) of the non-Oracle database.

Make sure a valid username and password are present for the non-Oracle database (MyUser/MyPassword).

Create an ODBC Data Source Name (DSN) on the Oracle database server for the non-Oracle database (SQLSERVER1). You can see how to create ODBC data source names on Linux here.

Create a file called: "$ORACLE_HOME/hs/admin/initSQLSERVER1.ora" which contains.

A big thank you to Richard Harrison who helped me get to the bottom of some of these settings.

Add the following entry to the "tnsnames.ora" file.

Add the relevant version-specific entry into the "listener.ora" file. Remember to adjust your ORACLE_HOME setting appropriately.

Reload the listener.

Create a database link as follows. Remember to follow any rules regarding username/password case for the remote server.

Query the remote table.

Troubleshooting Tip

Depending on your environment, you may have to play around with the settings in the "$ORACLE_HOME/hs/admin/initSQLSERVER1.ora" file. To make sure you are testing these changes properly, remember to use the following process.

  • Change the config.
  • Restart the listener.
  • Reconnect to the Oracle database.
  • Test the database link.

Some config changes will not be visible until you reconnect to the database, so play it safe and always use this procedure.

Настраиваю тут вторую неделю (уже как) гетерогенный сервис к БД MSSQL. Были разные косяки и проблемы, но в основном все победил. Тестировал настроенный unixODBC через tsql и isql, connect проходит успешно, удаленная БД отдает данные. Далее настраиваю гетерогенный сервис, листнер, tnsnames. проверяю tnsping. Вроде бы все хорошо (хотя пингует сам себя). Создаю DB Link, успешно. А вот далее начинаются непонятные грабли. А именно при попытке сформировать SQL запрос в удаленную БД получаю такую ошибку:

Пароль проверял, все корректно, единственное в пароле есть символ "*" и поэтому весь пароль приходится брать в кавычки при создании DB Link.

GENERATED BY ORACLE CONFIGURATION TOOLS. = Generated by Oracle configuration tools.

LISTENER_CRM =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = localhost)
(PORT = 1521)
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CRM)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
)
(SID_DESC =
(SID_NAME = MSSQL)
(PROGRAM = dg4odbc)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
)
)

tnsnames.ora
---------------
MSSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)
)
)
(CONNECT_DATA =(SID = MSSQL)
)
(HS = OK)
)

1) Скорее всего, dg4odbc не видит нужных библиотек

initMSSQL.ora

listener.ora


2) Какая разрядность драйверов odbc?
что говорят команды:

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-FEB-2017 22:37:38

Copyright (c) 1991, 2014, Oracle. All rights reserved.

TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-FEB-2017 22:38:36

Copyright (c) 1997, 2014, Oracle. All rights reserved.

Used parameter files:
/u01/app/oracle/product/12.1.0/db_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA =(SID = MSSQL)) (HS = OK))
OK (10 msec)

видимость библиотек проверил, в настройках сменил имя драйвера, получил другую ошибку:

ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from DBL

Но могу путать(у нас там еще куча других БД)

добавление UID и PWD ничего не дает. isql как работал, так и работает, при этом если убрать из запрос логин и пароль и дать просто isql -v MSSQL, то получаю ошибку:

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect

Доступ к гетерогенным БД осуществляется через ODBC. Чтобы добавить сервис для создания DBLink на какой-либо БД Oracle
требуется создать сначала источник данных(DSN) на сервере.

Пример конфигурирования DSN для MSSQL сервера.

Чтобы добавить DSN - заходим на хост с правами root(по ssh). На хосте уже установлены и сконфигурированы
UnixODBC и FreeTDS(для MSSQL). Переходим в каталог /usr/local/etc и правим файл freetds.conf,
добавляем описание сервера MSSQL (ip, port ). Выглядит это так:

[mssqlserver] <--- алиас сервера для DSN
host = <ip или dns имя>
port = 1433
tds version = 8.0
client charset = UTF-8

Установленные драйвера для БД можно посмотреть в /etc/odbcinst.ini , а DSN описываются в /etc/odbc.ini.
Чтобы добавить DSN для MSSQL следующего вида:

[sccm] <----- DSN - должно быть уникальным, проверить в /etc/odbc.ini
Driver=FreeTDS <--- имя драйвера, см /etc/odbcinst.ini
Description=mssql
TDS_Version = 8.0
Trace=No
ServerName=mssqlserver <---алиас сервера, см freetds.conf
Port=1433
Database= <DB>
UID= логин в БД
PWD= пароль

DSN добавлен - можно проверить работоспособность:

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

У нас есть рабочий DSN, теперь можем создать сервис, который смогут использовать другие сервера БД Oracle.
Сервис добавляется в listener.ora, который транслирует вызовы в HS. Логинимся пользователем oracle,
добавляем сервис(например SCCM):

Перезапускаем листенер и проверяем, что сервис запущен и слушает входящие соединения

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:14:34

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date 17-APR-2015 15:07:38
Uptime 6 days 20 hr. 6 min. 55 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/serverdb/listener/alert/log.xml
Listening Endpoints Summary.
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=serverdb)(PORT=1521)))
Services Summary.
Service "fp" has 1 instance(s).
Instance "fp", status UNKNOWN, has 1 handler(s) for this service.
Service "sccm" has 1 instance(s).
Instance "sccm", status UNKNOWN, has 1 handler(s) for this service.
The command completed successfully

Создаем сам гетерогенный сервис(под пользователем oracle)

Создаем файл init<имясервиса>.ora ( в нашем примере initsccm.ora - регистр sccm тот же, что в listener.ora) со
следующим содержимым:

HS_NLS_NCHAR=UCS2 <--- кодировка для MS SQL, чтобы у клиентов правильно отображалась кириллица
HS_LANGUAGE = AMERICAN_AMERICA.CL8MSWIN1251

SCCM =
(DESCRIPTION =
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521))
)
(CONNECT_DATA =
(SID = SCCM)
)
(HS = OK)
)

TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:30:14

Copyright (c) 1997, 2011, Oracle. All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521))) (CONNECT_DATA = (SID = SCCM)) (HS = OK))
OK (100 msec)

Создаем тестовый DBLink и проверяем работоспособность

1) Настраиваем ODBC источник (System DSN), называем его EMPXLS. В качестве Workbook указываем путь к emp.xls.

2) Выполняем скрипт если он еще не был выполнен

Проверить, был ли выполнен скрипт, можно след. образом

3) Редактируем файл listener.ora, добавляем запись о новом сервисе EMPXLS

4) Создаем и редактируем файл

Имя файла должно точно соответствовать init<SID>.ora, где <SID> это имя сервиса прописанного в listener.ora.

HS_FDS_CONNECT_INFO=EMPXLS -- имя odbc источника

5) Редактируем файл tnsnames.ora, добавляем запись о EMPXLS

Файл должен находится на сервере с базой, так как база выступает клиентом обращающимся к hs агенту.

6) Перегружаем listener и делаем проверку

7) Создаем dblink в базе

8) Запрашиваем имена таблиц и колонок

9) Запрашиваем данные. Используем двойные кавычки, чтобы сохранить регистр в именах таблиц и колонок.

10) Закрываем dblink, перед этим необходимо закончить транзакцию, даже если это был select

Особенности использования hsodbс при GLOBAL_NAMES = TRUE.

Если база в режиме GLOBAL_NAMES, то необходимы следующие дополнительные настройки.

1) Указать имя источника и домена в %ORACLE_HOME%\hs\admin\initEMPXLS.ora

2) Указать домен по умолчанию в sqlnet.ora

3) Добавить имя домена к TNS алиасу в tnsnams.ora

4) Убедиться, что GLOBAL_NAME базы включает имя домена.

если нет, то выполнить команду

5) Создаем dblink в базе

При создании к dblink автоматически должно быть добавлено имя домена.

6) Теперь dblink работает в режиме GLOBAL_NAMES

1) Если Excel документ находится на сетевом диске

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

2) Одновременная работа с документом в нескольких сессиях

При работе с Excel документом в режиме чтение/запись через ODBC драйвер, только один пользователь может работать с ним одновременно, или, иными словами, в таком случае ODBC драйвер открывает документ в монопольном режиме. Поэтому, если DB Link уже открыт в одной сессии, то при попытке обратиться к нему из другой сессии возникает ошибка:

Если для работы достаточно режима только чтение, в настройках ODBC источника следует указать опцию read only. Тогда несколько сессий смогут читать из него одновременно.

3) Извлечение данных из документа со сложной или не четко упорядоченной структурой данных

Иногда, Excel документ представляет собой настоящий "винигрет" из данных, элементов красочного оформления, пояснений, комментариев, свободного текста итп. Читать данные из такого документа в Oracle не всегда получается легко. В этом случае рекомендуется создавать дополнительный лист, где будут храниться очищенные данные в строгой табличной форме. Обновление данных в этом вспомогательном листе можно автоматизировать, задав их зависимость от исходных данных. Таким образом, с одной стороны, не накладываются дополнительные ограничения на пользователей, работающих с исходным листом, с другой, обеспечивается строгая структуризация данных для их беспроблемного извлечения в Oracle.

Стоит добавить сюда, что начиная с 11.2 (можт и 11.1 - не пробовал) вместо
PROGRAM = hsodbc
нужно писать
PROGRAM = dg4odbc

<СПРАШИВАЛ>hellhound 26 ноября 2008, 14:12 Оценка: N/A
Люди подскажите, я неопытный. Для чего комит при селекте?</СПРАШИВАЛ>

Commit -- закончить транзакцию перед закрытием DBLINKa

alter session close database link EMPXLS;--закрываем линк
commit;--ИМХО ещераз коммит чтобы отсоединить линк и использовать в других сессиях.

Протестил на примере подключения к *.DBF
Пока линк не отцепишь - не дает удалить dbf файл.

На основе селекта можно создать представления которыми можно пользоваться в других приложениях без изврата с dblinkami

Агент Гетерогенного Сервиса (шлюз, G ateway ) - это процесс который обеспечивает связь Oracle с удаленной базой. Процесс а гент состоит из двух компонентов:

  • Agent Generic Code (Общий Код Агента) - общий код для всех сервисов
  • Driver (Драйвер) - содержит информацию о родном API удаленной базы данных.

Агент предназначен для связи компонента Heterogeneous Services с драйверами удаленной базы данных, при отсутствии агента пользовательские библиотеки должны быть загружены в Oracle, что может привести распространению проблем драйверов на сервер Oracle.

При возникновении критической ошибке библиотеке драйвера, будет остановлен только процесс агента, а не всего сервера Oracle.

  • Машине локальной базы данных (там, где располагается сервер Oracle);
  • Машине удаленной базы данных (есть сторонняя СУБД и нет сервера Oracle);
  • На любой другой машине.

Процесс агента запускается при первом обращении к удаленной базе, через ссылку базы данных (database link). Соединение выполняются через Oracle Net Services - программное обеспечение удаленного доступа к данным, которое поваляет устанавливать связь типа сервер-клиент и сервер-сервер. Процесс агента будет работать до завершения пользовательской сессии или до явного закрытия ссылки базы данных.

Многопоточный агент работает иначе, он должен открываться и закрываться администратором. [ 5. Multithreaded Agents ]

2.3 Types of Heterogeneous Services Agents

2.3.1 Oracle Transparent Gateways

При использовании этого типа агентов доступ к удаленному серверу предоставляется подобно удаленному серверу Oracle. Этот тип соединения обеспечивает наибольшую функциональность.

2.3.2 Generic Connectivity Agents

Этот тип подключения обеспечивает только интерфейс взаимодействия компонента Heterogeneous Services и удаленной базы данных через программные интерфейсы, такие как ODBC, OLE DB. Этим способом могут быть подключены базы данных которые предоставляют драйвера для API ODBC или OLE DB. [ 7. Generic Connectivity ]

  • Oracle может соединяться только с локальным ODBC || OLE DB соединением. Следовательно драйвера удаленной базы должны поддерживать ОС на которой установлен сервер Oracle.

2.4 Heterogeneous Services Components

Компоненты гетерогенного сервиса работающие на стороне сервера Oracle:

  • Transaction Service.
  • SQL Service.

2.4.1 Transaction Service

  • Управление транзакциями в удаленной БД
  • Одна или несколько систем, отличных от Oracle могут участвовать в распределенной транзакции Oracle.
  • Если удаленная БД не поддерживает протокол 2PC, она все ровно может участвовать в распределенной транзакции, с некоторыми ограничениями.

2.4.2 SQL Service

  • Mapping Oracle internal SQL-related calls to the Heterogeneous Services driver application programing interface (API); this is in turn mapped by the driver to the client API of the non-Oracle system.
  • Преобразование Диалектов SQL.
  • Преобразование Словаря Данных.
  • Преобразование Типов Данных.
  • Компенсация недостающих функциональных возможностей других СУБД, преобразовывая конструкции Oracle в несколько запросов и пост обработка данных для получения необходимого результата.

2.5 Heterogeneous Services Configuration Information

Информация о конфигурации удаленной базы данных загружается на сервер Oracle.

2.5.1 Data Dictionary Translation Views

Переводит словарь данных non-Oracle к виду словаря данных Oracle.

2.5.2 Heterogeneous Services Initialization Parameters

  • Помогают оптимизировать работу шлюза.
  • Узнать параметры настройки удаленной БД.

Параметры инициализации шлюза можно просмотреть через представление V$HS_PARAMETER. И отредактировать через конфигурационные файлы, например \hs\admin\initsid.ora.

2.5.3 Capabilities

  • Хранит информацию об ограничения удаленной БД, например типы поддерживаемых операторов.
  • Данные об преобразовании типов данных и SQL операторов.

2.6 The Heterogeneous Services Data Dictionary

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

2.6.1 Classes and Instances

К одному серверу Oracle можно подключить много удаленных БД. Каждый шлюз (агент) загружает словарь данных в Oracle. Для оптимального хранения словарей данных для HS Oracle организует данные по двум уровням детализации.

Первый уровень это класс (с lass ), второй экземпляр (i nstanc ).

Класс - это определенное семейство баз данных, точнее набор параметром характерных для данного семейства.

Экземпляр - это отличная от класса информация, которая определяется для каждого конкретного сервера и имеет больший приоритет.

[ Note ] Instance level capability and data dictionary information are session-specific and hence are not stored in the Heterogeneous Services data dictionary of the Oracle database server. However, instance level initialization parameters can be stored in the database.

2.6.2 Data Dictionary Views

  • Names of instances and classes uploaded into the Oracle data dictionary
  • Capabilities, including SQL translations, defined for each class or instance
  • Data Dictionary translations defined for each class or instance
  • Initialization parameters defined for each class or instance

Можно получить доступ к информации из словаря данных через фиксированные представления. Можно выделить следующее категории представлений:

Oracle Data Integration, Cloud, Spatial and Analytics (GoldenGate, ODI, Cloud, Spatial, Exadata)

Как известно, одной из ключевых особенностей GoldenGate является его способность реплицировать данные в гетерогенной среде. Т.е. можно брать данные из СУБД Oracle и реплицировать измененные данные в СУБД MySQL (ну или MSSQL, DB2 и много еще чего) . Более того, репликация не обязательно вообще должна включать Oracle. Это может быть и MSSQL->MySQL. Гетерогенная репликация открывает огромные возможности, давая заказчику возможность продолжать использовать унаследованные системы или использовать для каждой задачи наиболее эффективную СУБД.

Очевидно, что каждая из этих баз имеет свою нишу. Так, например, Oracle – это чаще крупная корпоративная база данных, а MySQL часто используется для создания внешних сайтов. Очень ярким примером использования такой комбинации Oracle+MySQL является компания Sabre Holding – крупнейший продавец авиабилетов через интернет.

image

Подробно я не буду останавливаться на этом примере – и без того я рассказываю о нем на каждой презентации. Идея состояла в том, чтобы снять нагрузку с СУБД Oracle, которая использовалась для резервирования билетов. Эту нагрузку перенесли на ферму MySQL из 160 серверов, которые используются для поиска билетов, подбора маршрутов, поддержки личного кабинета пользователя и т.д.

Однако, эти системы, Oracle и MySQL, должны быть синхронизированы, чтобы пользователь видел консистентную картинку. Такая синхронизация обеспечивается Oracle GoldenGate.

Выигрыш очевиден – Sabre Holding очень сильно потратился, используя Oracle для Front-End систем.

Областей применения гетерогенной репликации очень много. Рынок ИТ уже достаточно долгое время находится в состоянии интеграции существующих ИТ систем и не всегда находит нужные инструменты. GoldenGate – это именно тот инструмент, который обеспечивает эффективную, скоростную интеграцию данных при относительно небольших затратах.

Конфигурация репликации Oracle->MySQL

Следующая диаграмма показывает конфигурацию GoldenGate, где источником является Oracle, а целевой базой данных – MySQL.

image

Подготовка среды

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

Подготовка источника в Oracle

2. Конфигурируем процесс Manager на источнике:

3. Создаем таблицы на источнике:

  • Используя SQL*Plus, создадим и наполним таблицы TCUSTMER и TCUSTORD:
    Shell> cd <install location>
    Shell> sqlplus <login>/<password>
    SQL> @demo_ora_create
    SQL> @demo_ora_insert
  • Проверим заполнение:
    SQL> select * from tcustmer;
    SQL> select * from tcustord;
    SQL> exit
  • С помощью SQL*Plus включим минимальное журналирование на уровне базы данных: Shell> sqlplus system /<password>
    SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  • Подключимся к источнику с помощью GGSCI и включим журналирование для таблиц TCUSTMER и TCUSTORD:
    Shell> ggsci
    GGSCI> DBLOGIN USERID system, PASSWORD <password>
    GGSCI> ADD TRANDATA <owner/schema>.TCUSTMER
    GGSCI> ADD TRANDATA <owner/schema>.TCUSTORD
  • Проверим результат:
    GGSCI> INFO TRANDATA <owner/schema>.TCUST*
Подготовка целевой базы данных в MySQL

2. Конфигурируем процесс Manager на целевой системе:

3. При настройке гетерогенной репликации есть некоторые ограничения. Одно из таких ограничений – это необходимость совпадения кодировок источника и приемника (исключением является случай, когда целевая база данных Oracle, тогда кодировки могут не совпадать). В нашем случае целевая база – MySQL, поэтому придется подстраивать ее кодировку под кодировку источника:

3. Создаем таблицы на :

  • Cоздадим (наполнять их будем с помощью GoldenGate) таблицы TCUSTMER и TCUSTORD:
    Shell> mysql -u -p < demo_mysql_create.sql
  • Проверим заполнение:
    Shell> cd
    Shell> mysql -u -p
    SQL> select * from TCUSTMER ;
    SQL> select * TCUSTORD;
    SQL> exit

Настройка репликации данных на источнике

1. Создаем процессы Extract на источнике (для некластеризованной базы instances=1):

  • Создаем процесс:
    GGSCI> ADD EXTRACT EORA<unique id>, TRANLOG, BEGIN NOW, THREADS <instances>
  • Проверяем результат:
    GGSCI> INFO EXTRACT EORA<unique id>

2. Создаем файл параметров

3. Создаем trail для данных:

  • На источнике выполняем команду:
    GGSCI> ADD RMTTRAIL ./dirdat/<trail id>, EXTRACT EORA<unique id>, MEGABYTES 50
  • Проверяем результат:
    GGSCI> INFO RMTTRAIL *

4. Запускаем захват изменений:

  • GGSCI> START EXTRACT EORA<unique id>
  • Проверяем, что запуск прошел корректно:
    GGSCI> INFO EXTRACT EORA<unique id>, DETAIL
    GGSCI> VIEW REPORT EORA<unique id>

Первоначальная загрузка данных

Первоначальная загрузка данных – это один из самых непростых вопросов при настройке репликации. Этому я уже посвящал отдельную статью. В случае гетерогенной репликации загрузка средствами GoldenGate вполне оправдана, т.к. отсутствуют эффективные средства переноса данных, применимые в случае гомогенной репликации (например, Oracle DataPump Export/Import).

Первоначальная загрузка и репликация в GoldenGate выполняется разными процессами. Первые принято называть задачами (tasks), а вторые – просто процессами. При настройке репликации это означает, что нужно иметь 2 набора конфигурационных файлов – для первоначальной заливки и для повседневной работы. Файлы параметров для первоначальной загрузки данных понадобятся только 1 раз, а для репликации будут нужны и дальше.

1. Создаем задачу для первоначальной выгрузки данных на источнике. Имя для задачи можно выбрать любое, но для просто я использую следующее соглашение в имени EINI<unique id>: E это Extract, INI – для первоначальной загрузки, <unique id> – уникальный идентификатор:

  • На источнике запускаем следующие команды:
    Shell> cd <install location>
    Shell> ggsci
    GGSCI> ADD EXTRACT EINI<unique id>, SOURCEISTABLE
  • Проверяем результат:
    GGSCI> INFO EXTRACT *, TASKS

2. Создаем конфигурационные файлы для первоначальной выгрузки:

3. Создаем задачу для первоначальной загрузки данных на приемнике:

  • На примнике запускаем следующие команды:
    Shell> cd <install location>
    Shell> ggsci
    GGSCI> ADD REPLICAT RINI<unique id>, SPECIALRUN
  • Проверяем результат:
    GGSCI> INFO REPLICAT *, TASKS

4. Создаем конфигурационные файлы для первоначальной загрузки:

5. Запустим загрузку:

  • Для этого на источнике выполним следующую команду
    GGSCI> START EXTRACT EINI<unique id>
  • Результат проверим на приемнике
    GGSCI> VIEW REPORT RINI<unique id>

Файл параметров для генерации DEF-файла у меня был следующий:

defsfile ./dirdef/source.def
setenv ( NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251 )
setenv ( ORACLE_SID = orcl )
USERID <login>, PASSWORD <password>
TABLE <owner/schema>.TCUSTMER;
TABLE <owner/schema>.TCUSTORD;

Запускать генератор DEF-файла нужно так:
defgen.exe PARAMFILE .\dirprm\defgen_mysql.prm

Настройка репликации данных на приемнике

1. Создаем checkpoint-таблицу в целевой базе данных

2. Создаем процессы Replicat на приемнике:

  • Создаем процесс (trail id – был записан нами на шаге 2):
    GGSCI> ADD REPLICAT RMSQ<unique id>, EXTTRAIL ./dirdat/<trail id>

3. Создаем файл параметров

  • На приемнике создаем файл параметров для процесса Replicat:
    GGSCI> EDIT PARAM RMSQ<unique id>

4. Запускаем процесс репликации:

  • GGSCI> START REPLICAT RMSQ<unique id>
  • Проверяем результат работы
    GGSCI> INFO REPLICAT RMSQ<unique id>
    GGSCI> VIEW REPORT RMSQ<unique id>

Особые замечания про HANDLECOLLISIONS

Особое внимание нужно обратить на параметр HANDLECOLLISIONS – мы его включаем на период перекрытия, неизбежного в случае гетерогенной системы, которую невозможно остановить во время первоначальной синхронизации. Если вернуться к началу статьи, то можно видеть, что мы запустили захват изменений на источнике в момент T, затем выполняли первоначальную загрузку до момент (T+X).

Таким образом за время X у нас накопились транзакции, которые будут повторно применены к целевой базе данных. Чтобы корректно обработать этот период, нужен параметр HANDLECOLLISION.

Загрузим дополнительные данные на источнике и отключим обработку коллизий

1. Произведем тестовую нагрузку

  • Сгенерируем операции INSERT, UPDATE и DELETE на источнике
    Shell> cd <install location>
    Shell> sqlplus <login>/<password>
    SQL> @demo_ora_misc
  • Проверим на источнике:
    SQL> select * from tcustmer;
    SQL> select * from tcustord;
    SQL> exit

2. Через некоторое время после начала репликации период перекрытия закончится и можно будет отключить обработку коллизий. Если после периода перекрытия коллизии продолжают возникать, то следует проверять настройки – это ненормально.

  • Выключаем обработку коллизий для работающего процесса
    GGSCI> SEND REPLICAT RMSQ<unique id>, NOHANDLECOLLISIONS
  • Убираем строку HANDLECOLLISIONS в файле параметров
    GGSCI> EDIT PARAMS RMSQ<unique id>

Заключение

На текущий момент GoldenGate – это единственный промышленный инструмент, позволяющий реплицировать данные из Oracle в MySQL и наоборот. Я не описывал здесь, как настроить захват изменений из MySQL, но это также возможно, начиная с MySQL 5.5 и GoldenGate 11g.

GoldenGate – это очень эффективный инструмент для репликации, обладающий непревзойденной производительностью и позволяющий унифицировать средства репликации внутри компании.

Читайте также: