web-dev-qa-db-fra.com

Comment résoudre l'erreur SQL Server 1222 i.e Déverrouiller une table SQL Server

Je travaille dans une base de données où je charge des données dans une table brute par un chargeur de données. Mais aujourd'hui, le chargeur de données est resté bloqué pour des raisons inconnues. Ensuite, j'ai arrêté le chargeur de données à partir du gestionnaire de tâches Windows. Mais ensuite, j'ai de nouveau essayé de charger des données dans la table brute, mais j'ai trouvé celles-ci verrouillées et je ne peux effectuer aucune opération dessus. J'ai essayé de redémarrer le service SQL Server mais cela n'a pas été résolu. Et je n'ai pas la permission de tuer les processus sur ce serveur.

Ci-dessous, le message affiché par SQL Server.

Une exception s'est produite lors de l'exécution d'une instruction ou d'un traitement Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

Lieu du programme:

sur Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery (String sqlCommand, ExecutionTypes executionType)
sur Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery (StringCollection sqlCommands, ExecutionTypes executionType)
sur Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery (requêtes StringCollection)
at Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery (requêtes StringCollection, booléen includeDbContext)
à l'adresse Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImplWorker (String newName)
à l'adresse Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImpl (String newName)

===================================

Délai d'expiration de la demande de verrouillage dépassé. Le paramètre @objname est ambigu ou le @objtype (OBJECT) revendiqué est incorrect. (Fournisseur de données .Net SqlClient)


Nom du serveur: 162.44.25.59 Numéro d'erreur: 1222
Gravité: 16 État: 56
Procédure à suivre: sp_rename Numéro de ligne: 282

Ma version de SQL Server est 2008 R2.

69
user960340

Dans SQL Server Management Studio, pour connaître les détails de la transaction active, exécutez la commande suivante.

DBCC opentran()

Vous obtiendrez les détails de la transaction active, puis, à partir du SPID de la transaction active, vous obtiendrez des détails sur le SPID à l'aide des commandes suivantes

exec sp_who2 <SPID>
exec sp_lock <SPID>

Par exemple, si le SPID vaut 69, exécutez la commande en tant que

exec sp_who2 69
exec sp_lock 69

Maintenant, vous pouvez tuer ce processus en utilisant la commande suivante

KILL 69

J'espère que ça aide :)

163
AbdulRahman Ansari

Cela faisait longtemps, mais la dernière fois, j'avais quelque chose de similaire:

ROLLBACK TRAN

ou essayer de

COMMIT

tout ce qui avait déjà été fait gratuitement a été mis en place, ce qui m'a permis de tout clarifier et de tout recommencer.

19
shawty

Pour éviter cela, assurez-vous que chaque BEGIN TRANSACTION a COMMIT

Ce qui suit dira succès mais laissera des transactions non validées:

BEGIN TRANSACTION
BEGIN TRANSACTION
<SQL_CODE?
COMMIT

La fermeture des fenêtres de requête avec des transactions non validées vous invitera à valider vos transactions. Cela résoudra généralement le message d'erreur 1222.

3
Paul Totzke

J'avais activé ces paramètres de comportement SQL lors de l'exécution de la requête d'options: ANSI SET IMPLICIT_TRANSACTIONS cochée. Lors de l’exécution de votre requête, par exemple créer, modifier une table ou une procédure stockée, vous devez la COMMITER.

Il suffit de taper COMMIT et de l'exécuter F5

0
Jerry Iriri