Инсталляция

Инсталлируем Oracle Data Integrator 10.1.3.5

Решил написать одну большую страницу с описанием, как инсталлировать Oracle Data Integrator. Я не задумывал инсталлировать ODI для промышленного использования или разработки реальных ETL процедур. Скорее, эта среда будет использована для экспериментов и исследований ODI.
Для развертывания ODI я создал виртуальную машину с Windows XP, а в качестве СУБД для репозитория я выбрал MS SQL SERVER 2008 R2 Express Edition, который доступен для скачивания с сайта Майкрософт.

Итак, для начала, примерная конфигурация виртуальной машины и ПО:
  1. Объем памяти для виртуальной машины 512Mb, размер жесткого диска - 12Gb. Windows XP SP3.
  2. Инсталлятор ODI 10.1.3.5.
  3. Инсталлятор SQL Server 2008R2 Express Edition.
  4. Инсталлятор Windows Power Shell.
  5. Джава машина последней версии.
  6. Драйвера JDBC для MS SQL сервера.

Другое сервисное ПО, которое необходимо SQL Серверу для работы, будет указано при проверке во время подготовки инсталляции СУБД.

После скачивания архива ODI и его распаковки запускаем файл index.htm, в нем есть ссылка на документацию по установке ODI.


Я загрузил пдф файл и дальше уже смотрел при инсталляции в него.
Требования, которые указаны в файле snps_setup.pdf, мне не пригодились, даже Джава машину инсталлятор ODI устанавливает свою.

Инсталлируем ODI.
В случае Windows - необходимо запустить setup\Windows\setup.bat. Выбираем папку C:\OraHome, полный вариант инсталляции (клиент и сервер), и инсталлируем только Oracle Data Integrator.


После окончания инсталляции я перенес папку с ярлыками для ODI из папки Oracle в папку Программы.

Инсталлируем MS SQL Server.
Перед началом инсталляции рекомендую загрузить Windows Power Shell и проинсталлировать его. Далее уже запускаем инсталляцию SQL сервера и в SQL Server Installation Center выбираем инсталляцию нового SQL сервера.


Я инсталлировал неименованный экземпляр SQL сервера, при инсталляции был выбран режим смешанной аутентификации пользователей. После инсталляции также необходимо включить использование TCP/IP протокола для сервера:


Хочу так же обратить внимание на такой глюк. SQL сервер потребует загрузить и установить .Net версии 3.5, если не ошибаюсь. Так вот, после этого, Windows Update настойчиво предлагает мне установить ряд обновлений, касающихся в том числе, .Net версии 2.0. Ну, и, естественно, установить их не может, ввиду отсутствия этой версии у меня в системе. Версия 2.0 так же не устанавливается, потому что уже установлена более новая версия.

Инсталлируем JRE и меняем переменную среды ODI_JAVA_HOME так, чтобы она указывала на папку со свежеустановленной джава машиной:


Ту JRE, которая поставляется вместе с ODI я из папки c:\OraHome удалил.

Из загруженного файла sqljdbc_3.0.1301.101_enu.exe с драйверами JDBC для SQL сервера распаковываем и копируем в папку C:\OraHome\oracledi\drivers\ файл sqljdbc4.jar. Если в этой папке по какой-то причине есть файл sqljdbc.jar - удаляем его.

Подключаем ODI к Microsoft SQL Server.
Для начала создаем две БД и два логина пользователя. Я создал две БД db_snpm - для мастер репозитория и db_snpw для рабочего репозитория (в этом случае это репозиторий разработки) с рекомендуемыми размерами в 40Mb для данных и 20 Mb для лога для каждой из БД.
Два логина snpm и snpw для подключения ODI к БД.

Очень важно установить для этих логинов правильные БД по умолчанию, иначе при попытке создания мастер репозитория будет получена следующая ошибка:
com.sunopsis.tools.core.exception.snps.RuntimeCoreException: com.microsoft.sqlserver.jdbc.SQLServerDriver: CREATE TABLE permission denied in database 'master'


Соответственно, делаем для snpm БД по умолчанию db_snpm, для второго логина - db_snpw.

Следующий шаг - создание мастер репозитория.
Этот шаг оказался самым сложным. ODI не подключался к СУБД MS SQL Server, либо, если и подключался, то выдавал ошибку о том, что сервер не принимает соединения. После долгих поисков выяснилось три основные проблемы, которые не давали ODI подключиться к СУБД:
  1. Неверная строка описания драйвера, которая задана в файле конфигурации ODI.(Строка по умолчанию - com.microsoft.jdbc.sqlserver.SQLServerDriver неверна)
  2. При установке MS SQL Server первый раз я делал именованный экземпляр сервера и он прослушивал не стандартный TCP/IP порт, а некий другой порт, который динамически выбрал в процессе установки.
  3. Проблема была в том, что сам сервис SQL сервера по каким-то причинам был остановлен.

Итак, правильные строки для подключения ODI к серверу таковы:
JDBC Driver : com.microsoft.sqlserver.jdbc.SQLServerDriver
JDBC Url : jdbc:sqlserver://localhost:1433; selectMethod=cursor; Integratedsecurity=false


Если вы все же установили именованный вариант, найдите файл логов SQL сервера в папке \MSSQL\Log\errorlog, и найдите в этом файле строку примерно такого вида: 2010-10-19 10:03:30.68 Server Server is listening on [ 'any' 51578]. Именно этот порт необходимо будет указывать при подключении ODI. Во время поиска решения проблемы подключения ODI к SQL серверу я опирался на описанный здесь подход.

Создание мастер репозитория.
Итак, запускаем утилиту создания мастер репозитория ODI.
Пуск - Программы - Oracle Data Integrator - Repository Management - Master Repository Creation. Вводим строку драйвера, строку коннекта, пользователя snpm и его пароль, а также выбираем технологию Microsoft SQL Server.

Важный момент - идентификатор мастер репозитория. Можно выбрать любое положительное число, больше 0 и меньше 998. Хотя в документации ничего по поводу верхней границы номера мастер репозитория и не написано, я думаю что лучше не делать этот номер слишком большим. От этого значения зависят все внутренние идентификаторы компонентов ETL проекта, что, в том числе, влияет в дальнейшем на операции импорта-экспорта между разными репозиториями.


Теоретически, возможно создание мастер репозитория и репозитория разработки в одной схеме БД, но лучше все же сделать их в разных, в том числе с точки зрения разделения прав доступа.

Проверяем возможность соединения ODI и СУБД с помощью кнопки Test Connection и, если тест проходит успешно - запускаем создание мастер репозитория:


Через некоторое время мастер репозиторий будет создан.

Создание рабочего репозитория.
Для создания репозитария разработки нам необходимо подсоединиться к ранее созданному мастер репозиторию через Менеджер Топологий. Пуск - Программы - Oracle Data Integrator - Topology Manager.
Создаем новую запись для подключения к репозиторию с такими параметрами:


Oracle Data Integrator Connection:

  • Login name: Имя коннекта (Например SQL)
  • User: SUPERVISOR (в верхнем регистре)
  • Password: SUNOPSIS (в верхнем регистре)

DBMS Connection (Master Repository):

  • User: snpm
  • Password: Пароль для snpm
  • Drivers List: User defined, так как поставляемое название драйвера ошибочно.
  • Drivers Name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  • URL: jdbc:sqlserver://localhost:1433; selectMethod=cursor; Integratedsecurity=false

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


Тестируем подключение к СУБД, если все в порядке - закрываем окно редактирования свойств подключения кнопкой OK и запускаем Менеджер топологий.

Создание нового репозитория разработки начинается с задания параметров дата сервера. Переходим на вкладку Репозитории (Repositories) и правой кнопкой мыши нажимаем на элементе Work Repositories. Выбираем команду добавления нового репозитория:


Появляется окно создания нового дата сервера, где необходимо определить следующие параметры:

  • Name: Имя для дата сервера
  • Technology: Выбираем Microsoft SQL Server
  • User: snpw
  • Password: Пароль для snpw

Переходим на вкладку JDBC:

  • JDBC Driver: Повторяем наименование драйвера.
  • URL JDBC: Повторяем строку коннекта.

Проверяем настройки через команду Test. Не закрываем окно командой OK, пока тест не покажет, что все нормально.
Нажимаем ОК и попадаем в окно определения свойств репозитория:


Здесь необходимо выбрать:

  • ID: Уникальный номер репозитория, с 1 до 998 включительно.
  • Name: Уникальное имя репозитория (например: WorkRep).
  • Type: Необходимо выбрать "Development" в списке.

Нажимаем ОК и рабочий репозиторий начнет создаваться. В документации сказано, что будет виден этот процесс, в виде эха от выполнения команд создания таблиц и их начального заполнения, но я этот момент как-то не заметил, видимо, сервер СУБД отработал достаточно быстро.

Подключаемся к рабочему репозиторию.
Для полноценного первого запуска клиентской программы Дизайнер остался всего один шаг, который заключается в создании логина для подключения к рабочему репозиторию.
Запускаем Дизайнер: Пуск - Программы - Oracle Data Integrator - Designer.
Нажимаем на кнопку создания нового логина и вводим параметры:


Окно Work Repository Connection почти такое же, как и описанное выше окно редактирования Oracle Data Integrator Connection. Единственное отличие - необходимость указания имени рабочего репозитория. После ввода параметров соединения список доступных репозиториев можно получить из мастер репозитория или ввести наименование вручную.

Устанавливаем чек бокс "подключение по умолчанию" и запускаем Дизайнер. Мы попадаем в пустой репозиторий разработки, в котором пока нет ни одного проекта или модели данных.

Продолжаем настройку установленного ODI.

Изменяем пароль супервизора.
Для начала, изменим пароль для супервизора, как строго рекомендуется в документации. Запускаем Менеджер Безопасности (Security Manager), далее - на закладку Пользователи (Users). Открываем свойства пользователя SUPERVISOR для редактирования и меняем пароль:


После этого, пока этот пароль не забыли, сразу же редактируем свойства подключения к репозитарию. Если, конечно, вы устанавливали пароль для пользовательского логина. Итак, запускаем Дизайнер и меняем пароль на новый, проверяем, что Дизайнер успешно запустился. Мы изменили пароль на подключение к рабочему репозиторию.

Закроем Дизайнер и запустим через Пуск - Программы приложение Менеджер Топологий. Попытка войти в него с сохранненым паролем приведет к ошибке:


Произойдет так потому, что для запуска Дизайнера мы редактировали свойства подключения к рабочему репозиторию, а здесь подключение осуществляется к мастер репозиторию. Изменяем пароль и для этого подключения так же. Если не менять пароль, то попасть в Менеджер Безопасности, так же как и в Менеджер Топологий, можно будет только путем вызова этих клиентских оболочек из Дизайнера или Оператора.


На рисунке в желтом квадратике - вызов Менеджера Безопасности, в синем - Менеджера Топологий. Для того, чтобы что-то быстро посмотреть, вызов другой клиентской оболочки через эти пиктограммы - хороший и быстрый способ. Однако, в нем есть такой недостаток, как работа в один поток. Т.е. если, например, в Дизайнере запустить генерирование группы сценариев, а потом попытаться в Операторе просмотреть интересующую вас сессию выполнения какого-то пакета, и Оператор, при этом, запущен из Дизайнера, то этого сделать не удастся до тех пор, пока не закончится генерация сценариев.

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

Создаем проект ODI.
По правой кнопке мыши на закладке Project выбираем команду Insert Project. Заполняем, в появившемся окне, наименование и код проекта:


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

Новосозданный проект абсолютно пустой, за исключением трех групп маркеров, ни модулей знаний, ни, тем более интерфейсов, пакетов или переменных в нем нет:


Добавляем модули знаний в наш проект
Выбрав в дереве проекта раздел загрузочных модулей знаний вызываем, правой кнопкой мыши, команду импорта сценариев. В появившемся диалоговом окне выберем папку C:\OraHome\oracledi\impexp, и получим все модули знаний, которые поставляются вместе с Oracle Data Integrator:


Диалог импорта модулей знаний, так же как и при импорте сценариев, позволяет выбрать несколько файлов для проведения операции. Я выбрал следующие 3 модуля знаний интеграции и 10 модулей знаний загрузки:

IKM MSSQL Incremental Update
IKM MSSQL Slowly Changing Dimension
IKM SQL to SQL Append

LKM File to MSSQL (BULK)
LKM MSSQL to MSSQL (BCP)
LKM MSSQL to MSSQL (LINKED SERVERS)
LKM MSSQL to SQL (ESB XREF)
LKM SQL to MSSQL (BULK)
LKM SQL to MSSQL
LKM SQL to SQL (ESB XREF)
LKM SQL to SQL (JYTHON)
LKM SQL to SQL (row by row)
LKM SQL to SQL


Я выбирал те модули знаний, которые могут мне пригодиться для работы с MS SQL Server. Для облегчения процедуры импорта рекомендую скопировать необходимые модули знаний в отдельную папку, а затем уже из этой папки провести их импорт в проект.

Несмотря на то, что импорт модулей знаний происходил для раздела загрузочных модулей (IKM), все выбранные для загрузки модули успешно импортированы в проект, и размещаются в нужных разделах:


Создаем новый контекст
На закладке Контексты создадим новый контекст, который назовем DEV:


Кроме имени и кода, других данных указывать не нужно.

Настраиваем агента.
Для настройки агента запустим Менеджер Топологий, и перейдем на закладку Физической Архитектуры (Physical Architecture). Выберем список агентов, и, правой кнопкой мыши вызовем диалог добавления нового агента. Здесь необходимо выбрать имя агента, указать, на каком сервере он будет выполняться:


Далее необходимо отредактировать параметры запуска агента. Эти параметры задаются в файле C:\OraHome\oracledi\bin\odiparams.bat. Находим раздел Repository Connection Information и в нем устанавливаем правильные значения для драйвера и строки коннекта к нашему мастер репозиторию, имя и пароль пользователя СУБД, наименование репозитория разработки, имя и пароль пользователя ODI, под которым агент будет в этом репозитории считывать и записывать информацию.

set ODI_SECU_DRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver
set ODI_SECU_URL=jdbc:sqlserver://localhost:1433; selectMethod=cursor; Integratedsecurity=false
set ODI_SECU_USER=snpm
set ODI_SECU_ENCODED_PASS=абракадабрапаролькмастеррепу
set ODI_SECU_WORK_REP=WORKREP
set ODI_USER=SUPERVISOR
set ODI_ENCODED_PASS=абракадабрапарольсупервизора


Чтобы получить правильно зашифрованный пароль, необходимо воспользоваться командой agent.bat ENCODE пароль_в_открытом_виде.

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


Чтобы агента остановить, необходимо выполнить файл agentstop.bat. Для более удобного вызова этого агента, я решил изменить ярлык для программы Пуск - Программы - Oracle Data Integrator - Agent. и добавить туда имя агента. Также, я добавил вызов команды остановки агента в главное меню:


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


Подключаем сервер данных (Data Server)
Запускаем Менеджер Топологий, идем на закладку Физической архитектуры. Выбираем в списке технологий Misrosoft SQL Server и по правой кнопке мыши запускаем команду добавления нового сервера данных:


Необходимо ввести наименование сервера, имя и пароль пользователя, который будет использоваться для чтения или записи данных с этого сервера, а также, на вкладке JDBC, вводим уже знакомые нам строки для драйвера и строки подключения:


После этого можно проверить работает ли подключение к серверу. Для проверки можно указать агента, от имени которого будет производиться подключение, или оставить значение Local (No Agent), которое используется по-умолчанию. Если коннект произошел успешно, продолжаем и сохраняем настройки нашего сервера данных.

При добавлении нового сервера данных, ODI сам создаст новую физическую схему данных. Эта физическая схема данных станет схемой по-умолчанию для данного сервера данных. В окне редактирования свойств необходимо выбрать конкретную БД, имя пользователя, под которым необходимо работать в этой БД, далее необходимо выбрать БД для временных таблиц, которая будет использоваться при загрузке данных в эту физическую схему и, также, имя пользователя для этой БД:


Создаем логическую схему данных
Перейдем на закладку логической архитектуры, и, для технологии Microsoft SQL Server, добавим новую логическую схему данных:


Если в списке технологий нет нужной технологии, включаем, через меню, показ всех технологий (Windows - Hide Unused Technologies).


Свяжем, для этой логической схемы, контекст DEV с физической схемой SQL.db_snpm.dbo. Таким образом, в контексте DEV, логическая схема данных MASTER-REP будет указывать на конкретную БД db_snpm.

Создаем модель данных
После того, как мы выполнили все подготовительные действия, создали физическую и логическую схемы данных, логического и физического агентов, контекст, все готово для того, чтобы создать модель данных нашего мастер репозитория, и выполнить реверс таблиц для этой модели.
Запускаем Дизайнер, затем переходим на закладку Модели (Models).

Создадим папку для всех моделей, которые используют одну и ту же технологию, то есть, в нашем случае, это будет MS-SQL. Далее добавим, для этой папки, новую модель данных. В открывшемся окне редактирования свойств модели введем наименование и код модели, а затем выберем технологию. После этого для модели автоматически установится единственная логическая схема данных, определенная для выбранной технологии:


Вторая вкладка - Реверс. Выбираем созданный ранее контекст DEV, оставляем все другие параметры без изменений:


Третья вкладка - Выборочный реверс. Устанавливаем значение чек бокса выборочного реверса, а затем, устанавливаем значение для чек бокса Объекты для реверса:


Через некоторое время Oracle Data Integrator выберет все таблицы из физической БД с мастер репозиторием ODI, и отобразит их список. Я хочу все описания таблиц получить в созданную модель, поэтому нажимаю кнопку ОК, и ожидаю окончания процесса реверса данных:


После того, как реверс завершится, модель данных для мастер репозитория будет выглядеть вот так:


На этом инсталляцию и начальную настройку Oracle Data Integrator можно считать законченной.

Настройка СУБД для работы ODI.

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

В реальной работе принцип организации доступа к БД должен быть несколько иным. Желательно таким образом настраивать права доступа, чтобы, в общем случае, одна физическая СУБД имела одного пользователя, под которым будет выполнять свои команды Oracle Data Integrator.

В этом случае при сценарии, когда в БД есть схема STAGE для копий систем источников, схема DWH для детальных данных хранилища и схема DATAMARTS для отчетов, использование одного дата сервера (один логин и пароль) с разными физическими схемами поможет строить преобразования из одной схемы в другую с использованием только интеграционных модулей знаний.

Попробую объяснить на примере. Для использования репозитория в качестве источника данных для разработки тестовых ETL интерфейсов мне понадобилось проделать следующие шаги.
  1. Создать новый логин в СУБД, так называемого технологического пользователя, от имени которого будут выполняться запросы из ODI.

  2. Создать новую БД (схему) в СУБД для использования в качестве целевой БД. База данных - db_test
  3. Настроить права доступа для нового логина. Из баз db_snpw и db_snpm (рабочий и мастер репозитории соответственно) он может читать данные, а в базу db_test - записывать.

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


В результате физическая схема для сервера данных SQL будет выглядеть так: