2009-07-31 3 views
1

J'ai un problème ici. J'ai un DB2 v8.1 où j'ai cette table particulière que je ne peux pas demander ou ouvrir. Chaque fois que j'ai essayé d'interroger ou d'échantillonner des données, il me dira que c'est un problème de délai d'attente/blocage après une longue période. Personne n'utilise la table de sorte qu'il ne peut pas être impasse. Y at-il de toute façon je peux récupérer cette table? Merci.DB2 se bloque lors de l'interrogation ou de l'ouverture d'une grande table

Répondre

4

Pouvez-vous faire juste une sélection avec un niveau d'isolement UNCOMMITED READ afin de contourner tous les verrous éventuels:

SELECT * FROM YOUR_TABLE 
FETCH FIRST 10 ROWS ONLY 
WITH UR 

De cette façon, il récupérera 10 lignes de la table. Si cela fonctionne, faites-le à nouveau sans la clause FETCH FIRST: il a été effectivement verrouillé par une autre connexion.

Vous pouvez également essayer avec changing the optimisation level en émettant

SET CURRENT QUERY OPTIMIZATION 0 

pour activer tout , FULL SCAN & NESTED LOOPS sans tous ces efficaces, mais souvent coûteux HASH JOIN & amis qui pourraient être le coupable ici si les statistiques sont mal calculé.

Modifier:

Avec les commentaires, je pense que votre meilleur pari serait avec db2dart pour vérifier votre base de données.

+0

Bonjour, c'est l'erreur que j'ai eu lors de l'exécution. DBA2191E Erreur d'exécution SQL. com.ibm.db.DataException: Une erreur de gestionnaire de base de données s'est produite. : [IBM] [Pilote CLI] [DB2/NT] SQL0911N La transaction en cours a été annulée en raison d'un blocage ou d'un dépassement de délai de . Code de motif "68". "SQLSTATE = 40001 –

+0

" 68 "signifie expiration et" 2 "signifie blocage. (mnemonic: 68> 2 & "timeout"> "deadlock") –

+0

Pourriez-vous essayer avec un "POUR LIRE SEULEMENT" à la fin de la demande? –