Документ создан: 30.12.2014

Связь Oracle RDBMS под linux с MS SQL Server через ODBC.

Вводные:

  • ОС — Oracle Linux Server 6.5;
  • БД — Oracle 11gR2 (11.2.0.4.0).

За основу взята статья отсюда: www.fatihacar.com. За что автору — огромное спасибо! Но ввиду того, что автор — не русскоговорящий, некоторые проблемы с локализацией пришлось решать самостоятельно. Итак, приступим:

  1. Ставим ODBC:
    yum install -y unixODBC unixODBC-devel
  2. Качаем исходники "FreeTDS" по ссылкам, которые можно получить здесь: www.freetds.org. Например, так:
    cd /tmp/
    wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
  3. Распаковываем архив, конфигурируем, собираем и устанавливаем:
    tar -zxf freetds-stable.tgz
    cd freetds-0.91/
    ./configure --prefix=/usr/local/freetds  --enable-msdblib --with-gnu-ld
    make
    make install
  4. Правим "/usr/local/freetds/etc/freetds.conf", приведя его в примерно такой вид:
    [global]
            tds version = 5.0
            text size = 64512
    
    [MSSQLSERVER]
            host = <YOUR_HOSTNAME_OR_IP_MSSQL>
            port = 1433
            tds version = 7.0
            client charset = UTF-8
  5. В секцию "default" файла "/usr/local/freetds/etc/locales.conf" добавляем:
    language = russian
  6. Приводим "/etc/odbc.ini" в примерно такой вид:
    [MSSQLDSN]
    Description = My MSSQLSERVER
    Driver = /usr/local/freetds/lib/libtdsodbc.so
    Servername = MSSQLSERVER
    Database = MYDB
    
    [ODBC Data Sources]
    SQLDSN=FreeTDS
  7. Проверить верность настройки ODBC можно с помощью команды "isql", например, так:
    isql -v MSSQLDSN MSSQL_USERNAME MSSQL_USERNAME_PASSWORD <<EOF
    select field1, field2 from table_name;
    EOF
  8. В файл "$ORACLE_HOME/hs/admin/initMRD.ora" добавляем следующие строки:
    HS_FDS_CONNECT_INFO = MSSQLDSN
    HS_FDS_TRACE_LEVEL = 0
    HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
    HS_NLS_NCHAR=UCS2
    set ODBCINI=/etc/odbc.ini
  9. В файл "$ORACLE_HOME/network/admin/listener.ora" добавляем:
    SID_LIST_LISTENER =
            (SID_LIST =
    ...
                    (SID_DESC =
                            (SID_NAME = MSSQLDSN)
                            (PROGRAM = dg4odbc)
                            (ORACLE_HOME = /opt/oracle/product/11.2.0/dbhome_1)
                            (ENVS=LD_LIBRARY_PATH=/usr/lib64:/usr/local/freetds/lib:$ORACLE_HOME/lib)
                    )
    ...
            )
  10. В файл "$ORACLE_HOME/network/admin/tnsnames.ora" добавляем соединение:
    MSSQLDSN =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =(SID = MSSQLDSN))
        (HS = OK)
      )
  11. Перезапускаем экземпляр Oracle.
  12. Создаём database link, например, так:
    CREATE DATABASE LINK MS_DBLINK CONNECT TO MSSQL_USERNAME IDENTIFIED BY MSSQL_USERNAME_PASSWORD USING 'MSSQLDSN';
  13. После всех вышеприведёных манипуляций должен отработать запрос вида:
    SELECT field1, field2 FROM table_name@MS_DBLINK;

Всё.

 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate