Contexte de transaction utilisé par une autre session
J'ai une table appelée MyTable
sur lequel j'ai défini un déclencheur, comme suit:
CREATE TRIGGER dbo.trg_Ins_MyTable
ON dbo.MyTable
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
insert SomeLinkedSrv.Catalog.dbo.OtherTable
(MyTableId, IsProcessing, ModifiedOn)
values (-1, 0, GETUTCDATE())
END
GO
Chaque fois que j'essaie d'insérer une ligne dans MyTable
j'obtiens ce message d'erreur:
Msg 3910, Niveau 16, État 2, Ligne 1
Contexte de Transaction en cours d'utilisation par une autre session.
J'ai SomeLinkedSrv
correctement défini en tant que serveur lié (par exemple, select * from SomeLinkedSrv.Catalog.dbo.OtherTable
fonctionne très bien).
Comment puis-je éviter l'erreur et de l'insérer avec succès record de+exécuter le déclencheur?
source d'informationauteur GolfWolf
Vous devez vous connecter pour publier un commentaire.
De bouclage des serveurs liés ne peuvent pas être utilisés dans une transaction distribuée si MARS est activé.
http://msdn.microsoft.com/en-us/library/ms188716(SQL.105).aspx
J'ai aussi eu la même erreur dans notre DEV environemnt, de déplacer les bases de données reliées à une autre instance sql résolu le problème. Dans notre environnement de production de ces bases de données sont déjà sur des instances distinctes
- Je le résoudre.
J'ai été en utilisant le même serveur lié à l'appel de la deuxième procédure, puis dans la procédure que j'ai été en utilisant le même serveur lié.
Il est très Facile, seulement nous avons à connaître la restricctions de serveurs liés.
Dans mon cas, j'ai été à l'aide de SQL 2005 et a obtenu "contexte de transaction en cours d'utilisation par une autre session" lors de l'exécution de l'Insertion....exec sur un serveur lié. Le correctif a été pour moi d'un patch à partir de SP2 version 3161 à SP3. SP2 cumulative 5 est censé résoudre.
https://support.microsoft.com/en-us/kb/947486
Lors de la distance de la base de données se trouve sur le même serveur,configurer le serveur lié, sans spécifier le serveur de base de données ip /nom d'hôte et le port. Juste le nom de base de données devrait être suffisant.
J'ai résolu en supprimant serveur lié utilisés dans la procédure stockée, puis appelle la procédure stockée par le même serveur lié. Il n'était pas de travail dans le DEV de l'environnement.