Ключевые слова:oracle, mssql, odbc, freetds, (найти похожие документы)
From: NBagin
Newsgroups: email
Date: Mon, 12 Oct 2008 17:02:14 +0000 (UTC)
Subject: Настройка гетерогенных служб в СУБД Oracle XE и создания связи с MS SQL Server
Оговорюсь сразу, доступ мы будем осуществлять по-средствам ODBC,
соответственно и настройка будет рассматриваться только для этого
агента.
И так, гетерогенные службы позволяют получать доступ из СУБД Oracle к
сторонним источникам данных. Для этой цели используются специальные
программы - агенты, которые выступая в качестве клиента к интересующему
стороннему источнику данных образуют некое подобие шлюза из СУБД Oracle
к сторонним данным. В случае с источниками ODBC имя агента hsodbc.
В общем случае связь с внешним источником происходит через специально
создаваемый для этой цели database link. Перед тем, как создавать эту
связь необходимо особым образом перенастроить конфигурационные файлы
прослушивателя: listener.ora и tnsnames.ora, с тем, чтобы в последствии
ссылаться на прописанные в них псевдонимы интересующих нас сторонних
источников данных.
Для настройки необходимо:
1. В файл $ORACLE_HOME/network/admin/listener.oraнеобходимо добавить
описание используемого нами источника:
SID_LIST_LISTENER =
(SID_LIST =
.
.
(SID_DESC =
(SID_NAME = <Псевдоним из tnsnames.ora>)
(ORACLE_HOME = <Соответствующий путь в каталог Oracle>)
(PROGRAM = hsodbc)
)
.
.
)
2. В файл $ORACLE_HOME/network/admin/tnsnames.ora необходимо добавить
псевдоним используемого нами источника:
<Псевдоним> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA=(SID=<Тот же Псевдоним> ))
(HS=OK)
)
Следует обратить особое внимание на тот факт, что в примерах от оракла
форматирование и расстановка скобок отличается, но работает именно так
как указано тут.
3. Создать и заполнить файл настроек источника данных:
$ORACLE_HOME/hs/admin/init<Псевдоним из tnsnames>.ora.
Например так:
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = <Наименование источника ODBC>
HS_FDS_TRACE_LEVEL = <ON|OFF>
При желании можно указать файл для выгрузки данных трассировки, если
этого не делать, то даже при включенном режиме трассировки в Linux
версии OracleXE трассировочные данные выводится не будут. Однако при
настройке оракла имеется возможность указывать каталог для
трассировочных данных, но я этого не пробовал. Замечено, что в Windows
версии достаточно такой каталог создать и данные в него будут попадать
сами без указания конкретного названия файла.
HS_FDS_TRACE_FILE_NAME = <Полный путь к файлу трассировки>
При настройке Linux версии необходимо явно указать библиотеку
используемого драйвера или менеджер ODBC, например так:
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so
В случае возникновения проблем с кодировкой получаемых от ODBC драйвера
данных, кодировку можно указать например так:
HS_LANGUAGE=RUSSIAN_RUSSIA.CL8MSWIN1251
Для Linux версии необходимо указать полный путь к используемому файлу odbc.ini
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
При необходимости можно указывать и другие параметры, заполняя их по
шаблону:
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
Вот в основном и всё, что необходимо для настройки гетерогенного агента
hsodbc OracleXE.
Для тех, кто использует Linux версию необходимо знать ещё кое что:
1. при написании всего и вся необходимо соблюдать регистр.
2. для работы с ODBC необходим пакет unixODBC
3. в случае, если предполагается получать данные из MS SQL Server,
необходим еще и пакет FreeTDS, т.к. MS не делает ODBC драйверов для Linux.
Особенности установки пакета FreeTDS:
В принципе, последовательность сборки стандартная: configure > make > install > clean.
Но для configure необходимо указать версию используемого TDS например так:
./configure --with-tdsver=7.0
Помимо этого необходимо убедиться в том, что конфигуратор нашёл и
намерен использовать iconv, в противном случае могут возникнуть проблемы
с перекодировкой.
После того, как пакет установиться необходимо провести его ещё немного
настроить, после чего настроить ODBC.
Вся настройка FreeTDS производится в файлах /usr/local/etc/freetds.conf
и /usr/local/etc/locales.conf
В файл freetds.conf прописываются псевдонимы используемых библиотекой
FreeTDS серверов например вот так:
[mySQLServer]
host = 192.168.0.3
port = 1433
client charset = cp1251
tds version = 7.0
Значения параметров очевидны и в комментариях не нуждаются, за
исключением client charset, который в стандартном буржуйском примере
отсутствует, но нам без него ни куда.
В файл locales.conf я нагло прописал отсутствующую там локаль ru_RU в
соответствии с приведенными примерами и своими предпочтениями.
После того как настройки проведены, можно пробовать подключаться к SQL
Server-у с помощью FreeTDS для чего необходимо выполнить команду вида:
/usr/local/bin/tsql -S <псевдоним из freetds.conf> -U <пользователь> -P <пароль> -D <база>
Если соединение установлено, должно появится приглашение вида " 1> ".
Теперь необходимо настроить ODBC.
Для настройки ODBC необходимы две вещи:
1. прописать драйвер (делается правкой файла /etc/odbcinst.ini)
2. прописать источник данных (будем прописывать в /etc/odbc.ini)
В случае с FreeTDS, в файле odbcinst.ini должно присутствовать запись на подобие следующей:
[FreeTDS driver]
Description = FreeTDS ODBC driver
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
FileUsage = 1
Опять же, в случае с FreeTDS, в файле odbc.ini должна присутствовать запись на подобие:
[MSSQL]
Driver= FreeTDS driver
SERVERNAME = mySQLServer
При такой форме записи считается, что ODBC источник данных MSSQL будет
использовать соответствующий драйвер, взятый из .ini и настройки
сервера, взятые из freetds.conf.
Теперь необходимо проверить связь штатными средствами пакета unixODBC,
для чего надо выполнить команду вида:
isql -v <источник данных> <пользователь> <пароль>
если появилось приглашение "SQL>" пробуйте запросить даные из небольшой
таблички, если получилось, можете считать, что я не напрасно потратил на
эту инструкцию время;-)
На этом вроде бы всё.