Tradueix

jueves, 21 de mayo de 2009

Connectar ORACLE i SQL Server

Objectiu final: Accedir mitjançant un DBLINK d'Oracle a una altra bbdd SQLServer.

Material:

  • Fedora Core 5 o superior
  • Oracle 10g (10.2.0) per a Linux
  • SQL Server 2000
Necessitarem:
Instal·lar el unixODBC
  1. Baixar el unixODBC d'aquesta adreça
  2. copiar el fitxer unixODBC*.tar.gz a un directori de treball /home/oracle per exemple
  3. # gunzip unixODBC*.tar.gz
  4. # tar xvf unixODBC*.tar
  5. # cd unixODBC*
  6. # ./configure –prefix=/usr/local –enable-gui=no
  7. # make
  8. # make install
Instal·lar el driver FreeTDS
  1. Baixar el driver de www.freetds.org. download
  2. copiar el fitxer a un directori de treball
  3. # tar -xvzf freetds-stable.tgz
  4. # ./configure –with-tdsver=8.0 –with-unixODBC=/usr/local
  5. # make
  6. # make install
Configurar el TDS
  1. Afegir al fitxer freetds.conf que es trobarà segurament a /usr/local/etc:
[test] --> nom de la connexió
host =
port = (1433 sòl ser el de SQL Server>
tds version = 8.0 (SQL Server 2000 és el 8.0 http://www.freetds.org/userguide/choosingtdsprotocol.htm)

Configurar el unixODBC

  1. Obrir el fitxer obdcinst.ini que hauria d'estar a /usr/local/etc i modificar-lo:
    [TDS]
    Description = FreeTDS driver
    Driver = /usr/local/lib/libtdsodbc.so
    Setup = /usr/local/lib/libtdsodbc.so
    Trace = Yes
    TraceFile = /tmp/freetds.log
    FileUsage = 1
  2. Obrir el fitxer odbc.ini que també hauria d'estar a /usr/local/etc i modificar-lo:
    [test]
    Driver = TDS
    Description = MS SQL Test
    Trace = Yes
    TraceFile = /tmp/mstest.log
    Servername = test
    Database =
    Port = 1433

Provar la connexió a la bbdd
  1. Executar al shell la següent comanda:
    # isql -v   
  2. +---------------------------------------+
    | Connected! |
    | |
    | sql-statement |
    | help [tablename] |
    | quit |
    | |
    +---------------------------------------+
    SQL> select * from "sysObjects";
    Si això funciona vol dir que ens hem connectat correctament
Configurar Oracle per a connectar amb MS SQLServer
  1. Crear un fitxer init.ora al directori $ORACLE_HOME/hs/admin on seria el nom de la connexió nova. Afegim en aquest fitxer les dades que apunten a la nostra connexió:
    • HS_FDS_CONNECT_INFO = el nom de la font de dades odbc (en el nostre cas test). Ha de coincidir amb el DSN
    • HS_FDS_SHAREABLE_NAME = el nom i la ruta del driver manager o driver
    • ODBCINI = el nom i ruta del fitxer de configuració del ODBC
    # This is a sample agent init file that contains the HS parameters that are
    # needed for an ODBC Agent.

    #
    # HS init parameters
    #
    HS_FDS_CONNECT_INFO = test
    HS_FDS_TRACE_LEVEL = 4
    HS_FDS_TRACE_FILE_NAME = /tmp/freetds.trc
    HS_FDS_SHAREABLE_NAME = /usr/local/lib/libodbc.so

    #
    # ODBC specific environment variables
    #
    set ODBCINI=/usr/local/etc/odbc.ini


    #
    # Environment variables required for the non-Oracle system
    #
Modificar el fitxer listener.ora
  1. Afegir un listener al fitxer de configuració listener.ora que trobem al directori $ORACLE_HOME/network/admin:
    SID_LIST_test =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = test)
    (ORACLE_HOME =)
    (PROGRAM = hsodbc)
    (ENVS=LD_LIBRARY_PATH=/lib:)
    )
    )

    test =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))
    )
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
    )
    )
    )
  2. Desprès de modificar el fitxer. Engenguem el nou listener amb la comanda:
    # lsnrctl start test
Modificar el tnsnames.ora
  1. Afegir la entrada nova també al tnsnames.ora:
    test =
    (DESCRIPTION=
    (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT=1522))
    (CONNECT_DATA=
    (SERVICE_NAME=test)
    )
    (HS=OK)
    )
  2. Proveu la nova connexió amb la comanda:
    # tnsping test
Crear el nou database link
  1. Connectar-se a Oracle amb un usuari
    # sqlplus system@
  2. SQL> create database link sqlserverdb connect to user identified by password using 'test';
  3. I per a comprovar que ha funcionat:
    SQL> select * from sysobjects@sqlserverdb;
  4. Si la select retorna resultats és que ho hem fet correctament, evidentment.

Oracle Wars © 2008. Template by Dicas Blogger.

TOPO