Transparent Gateway problem: Oracle NUMBER -> MS SQL DECIMAL

Friday, 16.10.2009 – Dejan

Ovih dana smo imali jedan neo─Źekivan problem┬áprilikom┬áprebacivanja podataka iz Oracle baze preko Transparent Gateway-a u jednu MS SQL Server bazu. Pojavljivala se nejasna gre┼íka:

ORA-28500: connection from ORACLE to a non-Oracle system returned this message

Po┼íto je sam tekst gre┼íke uop┼íten i ne prikazuje njen stvarni uzrok, izgubio sam nekoliko sati dok nisam otkrio u ─Źemu je problem… A otkrio sam sasvim slu─Źajno ┼íta je uzrokovalo tu gre┼íku, posmatraju─çi u debugging re┼żimu podatke, koji se ┼íalju MS SQL Serveru…

Naime, jedna od na┼íih aplikacija se vrti na Windows platformi, gdje su lokalna pode┼íavanja na┼ítimana za njema─Źki jezik (GERMAN_AUSTRIA.WE8MSWIN1252). Ta aplikacija se spaja na Oracle bazu sa pode┼íavanjem AMERICAN_AMERICA.AL32UTF8, uzima odre─Ĺene podatke i preko TG4MSQL (Transparent Gateway for MS SQL)┬áprebacuje ih u MS SQL Server bazu. Sve je radilo savr┼íeno dok u igru nisu do┼íli brojevi sa decimalama (npr. 104,589). Kada se po┼íalje cijeli broj (npr. 104), onda je sve u redu… MS SQL Server je bio pode┼íen na AMERICAN_AMERICA.WE8MSWIN1252.

Posumnjao sam da┬áMS SQL Server, tj. Transparent Gateway, ne prepoznaje decimalni separator kako treba… Poku┼íao sam simulirati druga─Źiji decimalni separator sa
TO_NUMBER(kolona,’999999999999999D999999′,’NLS_NUMERIC_CHARACTERS=”.,”’)
i sa
EXECUTE IMMEDIATE ‘alter session set NLS_NUMERIC_CHARACTERS=”.,”’;
, ali nije donijelo pozitivan rezultat…

Nakon googleanja i metalinkovanja uspio sam pronaći putokaz, koji me doveo do rješenja.

Klju─Źni parametar, koji se mora podesiti u konfiguracijskoj init.ora datoteci (%ORACLE_HOME%\tg4msql\admin\initExampleMSSQL_SID.ora) je HS_LANGUAGE !

Nakon što sam taj parametar podesio na:

HS_LANGUAGE=AMERICAN_AMERICA.WE8MSWIN1252

mogli su se prebaciti i decimalni brojevi, a gre┼íka se vi┼íe nije pojavljivala…

  1. 5 Responses to “Transparent Gateway problem: Oracle NUMBER -> MS SQL DECIMAL”

  2. Zanimljivo, susre─çem se trenutno sa istim problemom, ali mi se ─Źini u suprotnom smeru.
    Iz Oracle baze (10.2) pokušavam pozvati funkcije SQL Servera 2008 putem Transparent Gateway, problemi su sledeći:
    – decimalni brojevi su odse─Źeni
    – kada funkcija vra─ça text, char, varchar, javlja se gre┼íka: “ORA-28500: connection from ORACLE to a non-Oracle system returned this message: [Transparent gateway for MSSQL][Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (SQL State: 00000; SQL Code: 0)”

    Probala sam postaviti HS_LANGUAGE na sve na─Źine koji su mi do sada pali na pamet, d┼żaba. Imate li bilo kakvih ideja ┼íta bih jo┼í mogla poku┼íati?

    By Jelena on Nov 9, 2009

  3. Jesi li provjerila, da se mozda negdje ne pokusava string konvertovati u broj?

    Koja teritorijalna podesavanja (regional settings) imas na MS SQL Serveru? Te vrijednosti moras staviti u HS_LANGUAGE kako treba…

    By Dejan on Nov 10, 2009

  4. Kako da proverim da li se string pokušava konvertovati u broj?

    Collation na SQL serveru je SQL_Latin1_General_CP1_CI_AS, Regional settings na ra─Źunaru gde je SQL server su English (United States). Oracle baza ima pode┼íavanja AMERICAN_AMERICA.EE8MSWIN1250

    By Jelena on Nov 10, 2009

  5. @Jelena: Sta ti stoji definisano pod HS_LANGUAGE? De ukljuci tracing:
    HS_FDS_TRACE_LEVEL=ON
    pa vidi, sta ti izbacuje u trace datoteci (%ORACLE_HOME%\tg4msql\trace\xxxxxx.trc) …
    Licno tu gresku nisam nikad dobijao, tako da ti ne mogu iz svog iskustva dati konkretno rjesenje…

    By Dejan on Nov 13, 2009

  6. Dobar savjet zlata vrijedi. Evo imao sam sli─Źan problem – iz MS SQL baze sam preko ODBC-a (HS4ODBC) dovla─Źio odre─Ĺene vrijednosti, i imao sam problema s prikazom na┼íih znakova. Sad sam postavio HS_LANGUAGE parametar u hs datotekama, i stvar radi…

    By MIhael Radovan on Feb 15, 2013

Post a Comment