четверг, 24 мая 2012 г.

Установка Oracle® Database Gateway 11g Release 2 (11.2) для MSSQL на Linux x86-64

Используем документацию http://docs.oracle.com/cd/E11882_01/...e12013/toc.htm
Версии:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
MSSQL 2000
[oracle@oebs admin]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
[oracle@oebs admin]$ cat /etc/oracle-release
Oracle Linux Server release 5.5

  1. Для указанной версии Oracle БД ставим софт из p10098816_112020_Linux-x86-64_5of7.zip стандартным образом, через runInstaller. Выбираем среди предлагаемых продуктов MSSQL. Установка должна завершится без ошибок.
  2. Прописываем в $ORACLE_HOME/dg4msql/admin/initdg4msql.ora (тут прописываются данные удалённого mssql-сервера):
    HS_FDS_CONNECT_INFO=[<доменное имя или адрес севера mssql>]:<порт сервера mssql>//<база данных mssql>
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
  3. Прописываем дополнительный лисенер в $ORACLE_HOME/network/admin/listener.ora (тут прописываются данные локального лисенера. <название лисенера> должно совпадать с названием того лисенера, который уже есть!!!):
    SID_LIST_<название листенера>=
        (SID_LIST=
            (SID_DESC=
                (SID_NAME=dg4msql)
                (ORACLE_HOME=/home/oracle/product/db11202)
                (PROGRAM=dg4msql)
            )
        )
  4. Прописываем новый инстанс в $ORACLE_HOME/network/admin/tnsnames.ora (тут прописываются данные, где инсталлирован агент - в нашем случае - сам хост, где установлена база данных ORACLE):
    dg4msql =
        (DESCRIPTION =
            (ADDRESS =
                (PROTOCOL = TCP)
                (HOST = <доменное имя хоста, где установлен агент. В нашем случае - текущий локальный хост с базой>)
                (PORT = <порт, по которому слушает лисенер. Должен совпадать с портом, указанным в listener.ora>)
            )
        (CONNECT_DATA =
            (SID = dg4msql)
        )
        (HS=OK)
        )
  5. В $ORACLE_HOME/network/admin/sqlnet.ora должно быть написано
    NAMES.DIRECTORY_PATH= (TNSNAMES)
  6. Рестуртуем listener:
    lsnrctl stop <название лисенера>
    lsnrctl start <название лисенера>
    lsnrctl status <название лисенера>
    В информации о статусе должно присутствовать:
    Service "dg4msql" has 1 instance(s).
      Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
  7. Создаём dblink:
    sqlplus "/as sysdba":
    SQL> create public database link mssql connect to "<имя пользователя mssql>" IDENTIFIED BY "<пароль пользователя mssql>" USING 'dg4msql';
    пример:
  8. Удаление dblinkа при необходимости делается следующей командой:
    SQL> drop public database link mssql;
  9. Селекты делаются следующей командой:
    SQL> select * from user.table@mssql
  10. Синтаксис для использования алиасов своеобразный:
    SQL> select "t"."column_name" from "user"."table"@mssql "t";
  11. При работе с полями mssql типа datetime выдаёт то правильные значения, то бинарный мусор. Помогает явное приведение типа:
    SQL> select to_date("t"."column_with_date") from "user"."table"@mssql "t";

Ярлыки