понедельник, 11 августа 2008 г.

DB Link from Oracle to MS SQL SERVER

В статье описывается настройка соединения из БД Oracle к SQL Server c использованием драйвера ODBC Heterogeneous Services.
На рынке СУБД кроме Oracle существует еще множество не менее популярных СУБД. В зависимости от тех или иных причин многие компании предпочитают использовать разные БД. У Oracle существует возможность подсоединяться к другим БД с использованием ODBC и SQL*Net. Ниже приводится пошаговое изложение настройки соединения к БД MS SQL Server.
Насклько я знаю (могу ошибаться) компания Oracle сама не выпускает ODBC драйвер на UNIX системы, поэтому для настройки соединения необходимо использовать драйвера третьих компаний. Причем существует бесплатные драйвера, в силу чего никто не может гарантировать их безошибочную работу. Кроме этого можно установить стандартный драйвер для UNIX с сайта www.unixodbc.org и дополнительно установить oracle instant client odbc, с помощью которого добавляются необходимые библиотеки для oracle’а.
В нашем случае использован драйвер ODBC компании International Business Machines Corporation с использованием технологии Data Direct.

Используемые платформы:
Платформа БД Oracle: Solaris 5.9 (Sun Sparc), Oracle 9.2.0.7, ODBC (Data Direct)
Платформа БД SQL Server: MS Windows 2003, MS SQL Server 2000

1. Заводим пользователя в MS SQL, даем права, и задаем пароль большими буквами - oracle нечуствителен к регистру в паролях в отличае от mssql.
2. Разархивируем файл odbc.tar (драйвер, предварительно полученный из третьих компаний) в папку /opt/oracle/odbc
3. Создаем листенер MSLISTENER

MSLISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testhost )(PORT = 1522))
)
)
)
SID_LIST_MSLISTENER =
(SID_LIST =

(SID_DESC =
(SID_NAME = ms_sqlc)
(ENVS = "LD_LIBRARY_PATH=/opt/oracle/odbc/lib /opt/oracle/9.2.0/lib32:/etc/lib")
(ORACLE_HOME = /opt/oracle/9.2.0)
(PROGRAM = hsodbc)
)
)

*** SID_NAME = ms_sqlc - это всего лишь внутреннее название службы (такого хоста нет)

4. Редактируем файл tnsnames.ora и добавляем туда следующую запись:
ms_sqс =
(DESCRIPTION =
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1522)))
(CONNECT_DATA =(SERVICE_NAME = ms_sqlс))
(HS=OK)
)

5. Настраиваем файлы конфигурации
- Создаем файл в $ORACLE_HOME/hs/admin/initms_sqlс.ora со следующим содержанием:
HS_FDS_CONNECT_INFO = ms_sqlс
HS_FDS_TRACE_LEVEL = 4 -- уровень трассировки
HS_FDS_SHAREABLE_NAME = /opt/oracle/odbc/lib/libodbc.so
HS_LANGUAGE = AMERICAN_AMERICA.CL8MSWIN1251 -- это стандартная кодировка при обращении к серверу ms sql
set ODBCINI=/opt/oracle/odbc/odbc.ini

- В файле /opt/oracle/odbc/odbc.ini добавляем секцию о нашей БД:
[ms_sqlс]
Driver=/opt/oracle/odbc/lib/ivmsss19.so -- если пути не соответствуют /opt/oracle/odbc, нужно исправить на такой
Description=DataDirect 4.21 SQL Server Wire Protocol
Address=ms_sqlс,1433 --- реальный адрес и порт хоста с mssql базой
AnsiNPW=Yes
Database=abonent -- БД MS SQL куда осуществляется соединение
LogonID=
Password=
QuotedId=No

и тут же правим пути инсталяции odbc
[ODBC]
IANAAppCodePage=4
InstallDir=/opt/oracle/odbc
Trace=0
TraceDll=/opt/oracle/odbc/lib/odbctrac.so
TraceFile=odbctrace.out
UseCursorLib=0

6. Запускаем новый листенер и проверяем

oracle@icr-eai # tnsping ms_sqlc

TNS Ping Utility for Solaris: Version 9.2.0.7.0 - Production on 21-MAR-2008 17:51:05

Copyright (c) 1997 Oracle Corporation. All rights reserved.

Used parameter files:
/opt/oracle/9.2.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST =testhost)(PORT = 1522))) (CONNECT_DATA =(SERVICE_NAME = ms_sqlc)) (HS=OK))
OK (10 msec)

7. Соединяемся к БД на сервере Solaris под пользователем SYS и запускаем скрипт $ORACLE_HOME/rdbms/admin/caths.sql
oracle@testhost # sqlplus

SQL*Plus: Release 9.2.0.7.0 - Production on Fri Mar 21 17:55:06 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Enter user-name: / as sysdba

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 – Production

SQL>@$ORACLE_HOME/rdbms/admin/caths.sql;

8. Создаем дблинк в БД Oracle:

SQL> create database link MSSQLSERVER connect to identified by using 'MS_SQLC';

Комментариев нет: