2009-07-31 4 views
1

Ich habe ein Problem hier. Ich habe ein DB2 v8.1, wo ich diese bestimmte Tabelle habe, die ich nicht abfragen oder öffnen kann. Wann immer ich versuchte, Daten abzufragen oder zu probieren, wird es mir nach langer Zeit ein Timeout/Deadlock-Problem mitteilen. Niemand benutzt den Tisch, so dass es sich nicht um einen Deadlock handeln kann. Kann ich diesen Tisch trotzdem wiederherstellen? Vielen Dank.DB2 hängt, wenn Abfrage oder große Tabelle öffnen

Antwort

4

Können Sie nur wählen mit einem UNCOMMITED READ Isolationsstufe, um alle eventuellen Sperren zu umgehen:

SELECT * FROM YOUR_TABLE 
FETCH FIRST 10 ROWS ONLY 
WITH UR 

diese Weise ist es 10 Zeilen aus der Tabelle abruft. Wenn es funktioniert, tun Sie es einfach wieder ohne die FETCH FIRST Klausel: Es wurde effektiv durch eine andere Verbindung gesperrt.

können Sie auch mit changing the optimisation level versuchen,

SET CURRENT QUERY OPTIMIZATION 0 

, um die Ausgabe nur aktivieren, FULL SCAN & NESTED LOOPS ohne all die effizient, aber HASH JOIN & Freunde oft teuer, dass der Täter hier sind, wenn die Statistiken sein könnte falsch berechnet.

bearbeiten:

Mit den Kommentaren, denke ich, dass Ihre beste Wette mit db2dart würde Ihre Datenbank zu überprüfen.

+0

Hallo, das ist der Fehler, den ich bei der Ausführung bekam. DBA2191E SQL-Ausführungsfehler. com.ibm.db.DataException: Ein FehlerDatenbankmanager ist aufgetreten. : [IBM] [CLI-Treiber] [DB2/NT] SQL0911N Die aktuelle Transaktion wurde zurückgesetzt, da ein Deadlock oder eine Zeitüberschreitung aufgetreten ist. Grundcode "68". SQLSTATE = 40001 –

+0

"68" bedeutet Timeout & "2" bedeutet Deadlock. (mnemonic: 68> 2 & "timeout"> "Deadlock") –

+0

Können Sie es mit einem "FOR READ ONLY" am Ende der Anfrage versuchen? –