Provjera Oracle db linka

Thursday, 19.07.2012 – mradovan

Baza podataka ─Źesto ima potrebu komunicirati sa drugim bazama podataka, po┼żeljno je da su to tako─Ĺer Oracle baze podataka kojima pristupamo direktno, ali mogu biti i bilo koje druge, na koje se spajamo Heterogeneous Services tj. Database Gateway tehnologijama kao ┼íto su DG4ODBC, DG4MSQL isl.

U svakom slu─Źaju, nakon instalacije konektora na kojeg ─çemo spojiti Oracle bazu podataka, potrebno je deklarirati Connection string-ove koji definiraju poslu┼żitelja i servis baze podataka, naj─Źe┼í─çe putem aliasa u TNSNAMES.ORA datoteci.┬áZatim kreiramo database link, uz kori┼ítenje aliasa ili punog connection stringa, i mogu─çnost pristupa udaljenoj bazi je ostvarena.

Naravno, uvijek postoji mogu─çnost da udaljena baza u odre─Ĺenom momentu postane nedostupna, iz raznih razloga, npr: server udaljene baze podataka je spu┼íten ili se sru┼íio, izmijenjene postavke konekcije (npr. IP adresa ili naziv servisa), prekinuta fizi─Źka komunikacija (gre┼íka na komunikacijskoj opremi ili je teta dok je usisavala slu─Źajno iskop─Źala strujni ili UTP kabel) isl.

Uglavnom, u datom momentu udaljena baza nam postane nedostupna, a baš u tom trenutku se okinuo job koji pokreće pakiranu proceduru za sinkronizaciju podataka u tabllicama. I onda dolazi do havarije koju ćemo primijetiti tek naknadno: db link ne prolazi, i dolazi do invalidiranja paketa i drugih dijelova koda koje zatim treba rekompajlirati.

Da bi se to izbjeglo, napisao sam funkciju CHECK_DBLINK(name_in), koja za ulazni parametar ima ime db linka koji ┼żelimo testirati, a kao rezultat vra─ça broj: 1 za uspje┼íno testiranje konekcije, -2019 ako je definicija dblinka pogre┼ína ili db link ne postoji te -12514 ako je udaljena baza nedostupna (radi se o ORA kodovima gre┼íaka, pa ih nisam htio mijenjati, iako se rezultat funkcije mo┼że proizvoljno promijeniti).

Ispravnost db linka se naravno iz komandnog prompta mo┼że testirati naredbom TNSPING alias.

Funkcija CHECK_DBLINK:

CREATE OR REPLACE FUNCTION ARCHDB.check_dblink(name_in varchar2) RETURN NUMBER
AS
/********************************************************************
Opis: Provjerava raspolo┼żivost i dostupnost udaljene baze putem db linka,
─Źije ime je ulazni parametar.
Ako je udaljena baza raspolo┼żiva, funkcija vra─ça 1, u suprotnom vra─ça kod iznimke:
-2019   => alias udaljene baze nije definiran, tj. proziva se nepostojeci alias
-20514 => baza nije dostupna: dblink je invalidan, baza je spuštena ili je 
                   neka druga greška u komunikaciji
Autor: Mihael Radovan
Datum izrade: 18.07.2012
Zadnja izmjena: 18.07.2012
Verzija: 1.001
*********************************************************************/
BEGIN
execute immediate 'SELECT * FROM dual@' || name_in;

RETURN 1;

EXCEPTION
WHEN others THEN RETURN SQLCODE;
END check_dblink;
/
  1. 2 Responses to “Provjera Oracle db linka”

  2. Veoma korisno!
    Ja bih jos ugradio DBMS_ASSERT.qualified_sql_name(name_in) radi provjere input parametra …

    By Dejan on Jul 19, 2012

  3. Pa u pravilu mozes i to ugraditi, ali cak nema potrebe jer ako je input parametar pogresan, dobit ces -2019 kao rezultat, sto oznacava nepostojeci alias…

    Inace, DBMS_ASSERT je paket koji sadrzi nekoliko zaista korisnih funkcija ciju funkcionalnost sam do sada programirao, a sad cu koristiti gotovi paket ­čÖé

    By mradovan on Jul 20, 2012

Post a Comment