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