Mittwoch, Januar 11, 2012

Löschung eines verwendeten DB-Links

Was passiert, wenn man einen DB-Link löscht, der gerade in einer anderen Session verwendet wird? Die Antwort lautet: der Link wird gelöscht, ohne dass die zweite Session sich daran stört.

-- Session 1
-- Anlage eines DB-Links 
-- (in diesem Fall ein loopback Link auf die gleiche Instanz,
-- was aber wohl keine Rolle spielt)
create database link loopback using 'TestDB';

-- Session 2
select count(*) from t_remote@loopback;

-- Session 1
drop database link loopback;

-- Session 2
--> liefert das Ergebnis der Abfrage

  COUNT(*)
----------
  24800000

-- erneute Ausführung
select count(*) from t_remote@loopback
                              *
FEHLER in Zeile 1:
ORA-02019: Verbindungsbeschreibung für Fern-Datenbank nicht gefunden

Somit bleibt die Verbindung also für die Dauer der Query bestehen. Wenn ich darüber nachdenke, ist das Verhalten auch ganz plausibel: selbst die Löschung einer Tabelle führt ja nicht (notwendigerweise) zum Abbruch einer Query.

Nachtrag 30.04.2012: in manchen Fällen führt das Löschen eines verwendeten DB-Links aber offenbar auch zum Fehler "ORA-02018: Datenbank-Link desselben Namens hat eine offene Verbindung", aber die genauen Bedingungen für das Auftreten des Fehlers sind mir noch unklar. Grundsätzlich halte ich DB-Links aber für statische Objekte, die man nicht nach Lust und Laune löschen oder umdefinieren sollte.

Keine Kommentare:

Kommentar veröffentlichen