Задача — настроить гетерогенный сервис из БД Oracle 11g в MSSQL под Win2003.

С сайта http://www.oss4aix.org/download/latest/aix61/ скачиваем и устанавливаем в следующей последовательности пакеты:

1. info-4.13a-2.aix5.1.ppc.rpm
2. readline-6.2-2.aix5.1.ppc.rpm
3. unixODBC-2.3.0-1.aix5.1.ppc.rpm
4. unixODBC-devel-2.3.0-1.aix5.1.ppc.rpm
5. libgpg-error-1.10-1.aix5.1.ppc.rpm
6. libgcrypt-1.4.6-1.aix5.1.ppc.rpm
7. libtasn1-2.9-1.aix5.1.ppc.rpm
8. lzo-2.05-1.aix5.1.ppc.rpm
9. gmp-5.0.2-1.aix5.1.ppc.rpm
10. nettle-2.1-2.aix5.1.ppc.rpm
11. gnutls-2.12.5-1.aix5.1.ppc.rpm
12. freetds-0.82-2.aix5.1.ppc.rpm
13. freetds-devel-0.82-2.aix5.1.ppc.rpm
14. freetds-doc-0.82-2.aix5.1.ppc.rpm
В файл /opt/freeware/etc/freetds.conf добавляем  секцию:
[172.16.0.1]
host = 172.16.0.1
port = 1433
tds version = 8.0
client charset = cp1251

Создаем темплейт freetds.driver.template со следующим содержимым:
—freetds.driver.template—
[FreeTDS]
Description=FreeTDS unixODBC Driver
Driver=/opt/freeware/lib64/libtdsodbc.so
Setup=/opt/freeware/lib64/libodbc.so
UsageCount=1
—freetds.driver.template—
и из шелла регистрируем его: odbcinst -i -d -f freetds.driver.template

Создаем темплейт  mssql.datasource.template на базу данных со следующим содержимым:
— mssql.datasource.template—
[testsql]
Driver=FreeTDS
Description=testsql
TDS_Version = 8.0
Trace=No
Server=172.16.0.1
ServerName=172.16.0.1
Port=1433
Database=testbase
UID=user
PWD=password
— mssql.datasource.template—
и регистрируем его: odbcinst -i -s -f mssql.datasource.template –l

В /home/oracle/.bash_rc вставляем строки:
export ODBCINI=/opt/freeware/etc/odbcinst.ini
export ODBCSYSINI=/opt/freeware/etc/

В $ORACLE_HOME/network/admin/tnsnames.ora вставляем:
TESTSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
)
(CONNECT_DATA =
(SID= testsql)
)
(HS=OK)
)

В $ORACLE_HOME/network/admin/listener.ora вставляем:
SID_LIST_LISTENER =
(SID_DESC =
(PROGRAM = dg4odbc)
(ORACLE_HOME = /u7/oracle/base/db)
(SID_NAME = tests1l)
(ENVS=»LD_LIBRARY_PATH = /opt/freeware/lib:$ORACLE_BASE/db/lib»)
)
)

В $ORACLE_HOME/hs/admin создаем файл inittestsql.ora и вставляем:
HS_FDS_CONNECT_INFO = testsql
HS_FDS_TRACE_LEVEL = on
HS_FDS_SHAREABLE_NAME = /opt/freeware/lib64/libodbc.so
HS_FDS_SQLLEN_INTERPRETATION=64
HS_FDS_SUPPORT_STATISTICS = FALSE
HS_LANGUAGE = AMERICAN_AMERICA.CL8MSWIN1251
set ODBCINI=/opt/freeware/etc/odbc.ini

параметр HS_FDS_SQLLEN_INTERPRETATION зависит от разрядности, если 32-битная система – меняем параметр на 32

Рестартуем листенер:
$lsnrctrl stop
$lsnrctrl start

$sqlplus /nolog
SQL>conn / as sysdba
SQL>create public database link testsql connect to user identified by password using ‘testsql’;
SQL>select count(*) from dh20943@testsql;
COUNT(*)
———-
2471566
SQL>quit

Готово!