Anweisung aus SQL-Navigator oder Developer friert ein

Bei einem Kunden trat ein merkwürdiges Verhalten in einer 10.2-Datenbank auf, bei dem SQL-Anweisungen aus dem SQL-Navigator oder dem SQL-Developer einfroren.

Hat man versucht diese Anweisungen mit ALTER SYSTEM DISCONNECT oder ALTER SYSTEM KILL SESSION zu entfernen, wurde der Status dieser Anweisungen auf KILLED gesetzt, aber nicht aus dem System entfernt. Nach Recherchen und Auswertung der einzelnen Sitzungen konnte ersehen werden, dass einige dieser Sitzungen im Hintergrund folgende Anweisungen ausgeführt haben:

SELECT COUNT (*) FROM user$ u, xdb.xdb$schema s
WHERE     u.user# = :1
AND u.name = s.xmldata.schema_owner
AND (xdb.xdb$Extname2Intname (s.xmldata.schema_url,s.xmldata.schema_owner) = :2)

Diese SQL-Anweisung wird aus dem Package mit der Funktion  xml_schema_name_present.is_schema_present ausgeführt, welche durch Aufruf von sys.all_objects verwendet wird.

Nach Neustart der Instanz konnte dieses Problem reproduziert werden, SQL-Anweisungen aus dem SQL-Developer oder Navigator blieben hängen. 

Da keine direkte Ursache für dieses Einfrieren gefunden werden konnte, entschloss ich mich Statistiken für das Datadictionary zu sammeln. Allerdings blieb nun der Sammelprozess stehen, weil er durch eine von mir abgebrochene Sitzung blockiert wurde, obwohl diese abgebrochene Sitzung keine Sperren geöffnet hatte. Also fuhr ich die Instanz erneut herunter, um die abgebrochenen Sitzungen wieder aus dem System zu entfernen und startete die Instanz erneut.

Daraufhin konnte ich nun die Dictionary-Statistiken sammeln und führte die Anweisungen wiederum aus, welche problemlos durchliefen.