2008-12-01 4 views
1

Mon application (C++ utilisant SQL Native Client avec SQL Server 2000) trouve systématiquement son chemin dans un état suspendu. Je crois que c'est parce qu'une transaction est laissée non engagée quelque part sur une table et une requête SELECT sur cette table, à la suite de la transaction ouverte, bloque. Malheureusement, j'ai vraiment du mal à déterminer où la transaction de suspension pourrait être dans mon code. Est-il possible d'obtenir SQL Server pour indiquer quelles requêtes ont été exécutées sur une transaction non validée?Est-il possible de voir quelles requêtes ont été exécutées dans une transaction non validée?

Répondre

4

si vous avez administrateur (sa) proviliges, vous pouvez exécuter Sp_who, ou sp_who2 pour montrer toute l'activité du serveur, par Spid, Exécuter

Exec sp_Who2 [SpidNumber] 

pour voir juste une séance qui vous intéresse .. .

Pour voir directement les transactions ouvertes, exécutez

DBCC OPENTRAN (T-SQL) Affiche des informations sur la plus ancienne transaction active et la plus ancienne distribués et les transactions répliquées non distribuée, le cas échéant, dans la base de données spécifiée. Les résultats sont affichés uniquement s'il existe une transaction active ou si la base de données contient des informations de réplication. Un message d'information est affiché s'il n'y a pas de transactions actives. Sql Server devrait toutefois annuler automatiquement toute transaction ouverte lorsqu'une session utilisateur est terminée.

+0

Ça m'a permis de faire la moitié du chemin. J'ai un SPID qui est susceptible de blâmer maintenant. Y at-il de toute façon à creuser un peu plus loin pour voir quelles requêtes ont été exécutées dans le SPID? – antik

+0

Vous pouvez essayer d'exécuter l'outil "profileur", c'est l'un des outils client SQL Server installés sur votre poste de travail. Il surveille en permanence/rapports sur tout fonctionne sur le serveur, et a filtre SPID (entre autres) –

+2

DBCC INPUTBUFFER ou déclarent binaire @handle (20) select = @handle sql_handle de master.dbo.sysprocesses où SPID = 84 select * from :: fn_get_sql (@handle) – gbn

Questions connexes