Heterogeneous Services e Generic Agents

Tanto tempo fa mi venne fatta la richiesta di poter accedere ad un database MS Access da Oracle (9iR2). Dopo un po’ di ricerche e di prove scoprii che ciò era fattibile con una compente di Oracle chiamata Heterogeneus Services. Si tratta di una componente studiata appunto per integrare un database Oracle con altri database, questa componente è una base comune che lavora insieme a componenti specifiche del sistema al quale ci si vuole collegare, nel mio caso esiste una compenente chiamata appunto “Generic Agents” che permette di accedere a qualunque database fornisca un driver ODBC, compreso quindi MS Access. Nel mio caso il database server stava (e sta ancora) su una macchina Winzoz, quindi la procedura di configurazione è abbastanza semplice.

In realtà nei giorni scorsi mi è capitato di dover ripetere la configurazione, in quanto era andata persa a causa di un crash del server e non era stata ripristinata, fino a quando non mi è stato richiesto di ripristinarla. Siccome mi capita ogni due/tre anni di doverla rifare ed ogni volta me la dimentico ho pensato bene di fare un post su questo blog su questo argomento.

Ecco quindi in sintesi i passi per configurare Heterogeneous Services (HS) con Generic Agents per poter accedere direttamente da Oracle a un database MS Access:

  1. Configurare la fonte ODBC, dal mitico pannello di controllo di Winzoz, si va sui Tool di amministrazione (“Administrative tools”) e li si configura al fonte ODBC in modo abbastanza semplice, l’unico accorgimento, nella mia situazione almeno, è quello di fare una fonte di sistema e non di utente (System DNS). Non ho approfondito, ma siccome l’utente con cui ero collegato in RDP sulla macchina non era l’utente con cui gira il servizio Oracle, Oracle non vedeva la fonte.
  2. Configurare HS, sotto $ORACLE_HOME c’è una directory hs, li dentro ci sono gia dei template, quello per ODBC è inithsodbc.ora, dentro quel file si inserisce la riga HS_FDS_CONNECT_INFO = nomefonteodbc
  3. Configurare il Listener. Si, Oracle si avvale del listener per gestire gli HS. In sostanza nel file listener.ora va aggiunta una sezione sotto SID_LIST_<LISTENER_NAME>:
  4. SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC=
               (SID_NAME=hsodbc)
               (ORACLE_HOME=C:\ORACLE\)
               (PROGRAM=hsodbc)
        )
      )

    Non sono sicuro, ma il SID_NAME credo debba essere uguale alla parte del nome del file sotto $ORACLE_HOME/hs/init<sid_name>.ora

  5. Configurare il tnsnames, aggiungento al file tnsnames.ora una cosa tipo:
    hsodbc  =
      (DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=myhost)(PORT=1521))
        (CONNECT_DATA=(SID=hsodbc))
        (HS=OK)
      )
  6. Creare un database link, ad esempio CREATE PUBLIC DATABASE LINK HSODBC USING ‘HSODBC’
  7. A questo punto, è possibile accedere alle tabelle del database access con la sintassi analoga a quella dei database link:
    SQL> select count(*) from tabella1@hsodbc;
    
      COUNT(*)
    ----------
         17728

P.S.

Causa confusione nel mio ambiente di test avevo scordato, pensando non servisse, il passo relativo alla crezione del database link.

2 pensieri su “Heterogeneous Services e Generic Agents

Lascia un commento