2009-04-29 6 views
3

J'ai une petite table (200 lignes/400 kb) avec 4 colonnes - nvarchar (MAX), nvarchar (50) et deux ints. J'ai un problème avec une ligne particulière dans laquelle je peux sélectionner et mettre à jour les champs int, mais lorsque je tente de sélectionner ou de mettre à jour les champs nvarchar, la requête s'exécute indéfiniment (au moins 45 minutes avant d'annuler). Je suis également incapable de supprimer cette ligne, ou même tronquer la table (encore une fois, la requête s'exécute indéfiniment).Impossible d'accéder à une seule ligne dans la table SQL Server 2005

Des idées? Un des champs int possède une clé primaire, mais il n'y a pas de clé étrangère.

+0

course DBCC CHECKDB pour voir si votre base de données a des problèmes ou DBCC CHECKTABLE – DForck42

Répondre

2

On dirait que vous avez une transaction non validée verrouillage des choses vers le bas.

Vous pouvez les libérer via le Moniteur d'activité. Il se trouve dans le dossier Management de la base de données que vous consultez. Développez cela, cliquez avec le bouton droit sur Moniteur d'activité et sélectionnez Afficher les processus. Vous pouvez faire un clic droit sur les processus et les tuer là.

Ce n'est pas toujours la meilleure solution, surtout avec une base de données de production. Vous voulez généralement savoir pourquoi la transaction n'est pas validée et la restaurer manuellement ou la valider.

2

Etes-vous sûr que cette ligne n'est pas verrouillée? Ouvrez une nouvelle connexion, lancez votre requête select, notez le SPID depuis le haut de la fenêtre 2000/2005 et le studio de gestion 2008. Dans une autre fenêtre, exécutez sp_who2. Trouvez le spid de la requête exécutant l'enregistrement.

Si vous ne se soucient pas de données non validées, ou si vous voulez juste tester la ligne, faire:

select * from table with (nolock) where key = 'mykey' 
+0

Il y a un nombre entier BlkBy pour deux entrées. Que puis-je faire d'ici? –

+0

Les numéros à côté indiquent d'autres connexions à la base de données. Si vous les trouvez dans la liste, vous pouvez trouver quelle machine ou quel utilisateur il leur demande de les libérer si leur logiciel. Si vous avez mis à jour la table, il se peut que vous ayez laissé une transaction inachevée l'interroger. Vous pouvez savoir ce que chaque processus qu'ils font en exécutant DBCC OutputBuffer 65 en studio de gestion où 65 est le SPID du processus qui vous bloque. – u07ch

0

si DBCC CHECKDB doenst't aide comme Thirster42 dit

Je voudrais simplement copier des données, sauf ligne de problème dans NEWTABLE et laisser tomber le OldTable ...

aussi je vérifier la taille de votre TempDB.

Vérifiez Profiler, peut-être que le déclencheur est déclenché?

Voir plan d'exécution pour quelque chose d'inhabituel ..

Questions connexes