Sziasztok,
oracle 10 express-ből próbálok postgresql-hez kapcsolódni odbc-n keresztül. (unicode-os oracle és unicode-os postgres adatbázis) Ehhez az oracle heterogeneous services-t kéne használnom, de bárhogy állítom be, benne marad egy bosszantó hiba a rendszerben.
Kétféle ODBC-s postgres driver létezik: unicode és ansi. Mindkét driverrel létrejön a kapcsolat, de ha az ansi drivert használom, akkor az ékezetes karakterek nem mennek át, és valami egzotikus ORA-xxxx hibával elszállnak az sql utasítások. (Ez végül is logikus.) A unicode driver esetében meg egyszerűen kihagyja a lekérdezések eredményeiből a szöveges mezőket, mintha ott sem lennének.
Nem a postgres odbc driverrel van gond, mert külső odbc nézegetővel látom a kimaradó oszlopokat is.
Miután az odbc kapcsolatot a postgreshez windows alatt létrehoztam (és külső nézegetővel leteszteltem, hogy jól működik-e), a következőeket állítottam be oracle alatt:
$ORACLE_HOME\hs\admin\initPG.ora
HS_FDS_CONNECT_INFO = PG # az odbc kapcsolat neve
#HS_NLS_NCHAR = HUNGARIAN_HUNGARY.AL32UTF8
#HS_LANGUAGE = HUNGARIAN_HUNGARY.AL32UTF8
HS_FDS_TRACE_LEVEL = ON
#HS_FDS_REPORT_REAL_AS_DOUBLE = TRUE
$ORACLE_HOME\NETWORK\ADMIN\listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PG)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = hsodbc)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
# (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY))
(ADDRESS = (PROTOCOL = TCP)(HOST = freelancer)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
$ORACLE_HOME\NETWORK\ADMIN\tnsnames.ora (részlet)
PG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = freelancer)(PORT = 1521))
(CONNECT_DATA =
(SID = PG)
)
(HS = OK)
)
Ezek után az oracle-ben futtatva:
CREATE PUBLIC DATABASE LINK "PG"
CONNECT TO "postgresuser" IDENTIFIED BY "postgrespassword" USING 'PG';
...
SELECT * FROM "postgres_test_table"@pg;
Mindezt ez alapján a tutorial alapján.
Tudna valaki segíteni?
Üdv,
kl223