MSDTC sur le serveur " server n'est pas disponible
J'obtiens cette erreur bizarre sur SQL Server. Et je ne trouve pas de solution dans les messages plus anciens.
J'ai cette procédure:
create proc _upJM_SyncAll_test
as
begin
DECLARE @SQLString nvarchar(max)
set @SQLString = N'
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setitemprices'') where acSubject not in (select acSubject from _uvJM_SetSubj)
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setsubj'') where acSubject not in (select acSubject from _uvJM_SetSubj)
update a
set acName2 = b.acName2,
acName3 = b.acName3,
acAddress = b.acAddress,
acPost = b.acPost,
acPostName = b.acPostName,
acCountry = b.acCountry,
acVATCodePrefix = b.acVATCodePrefix,
acCode = b.acCode,
anDaysForPayment = b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where 1=1
and ( isnull(a.acName2,'''') <> isnull(b.acName2,'''') OR
isnull(a.acName3,'''') <> isnull(b.acName3,'''') OR
isnull(a.acAddress,'''') <> isnull(b.acAddress,'''') OR
isnull(a.acPost,'''') <> isnull(b.acPost,'''') OR
isnull(a.acPostName,'''') <> isnull(b.acPostName,'''') OR
isnull(a.acCountry,'''') <> isnull(b.acCountry,'''') OR
isnull(a.acVATCodePrefix,'''') <> isnull(b.acVATCodePrefix,'''') OR
isnull(a.acCode,'''') <> isnull(b.acCode,'''') OR
isnull(a.anDaysForPayment,'''') <> isnull(b.anDaysForPayment,'''')
)
insert into OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') (acSubject, acName2, acName3, acAddress, acPost, acPostName, acCountry, acVATCodePrefix, acCode, anDaysForPayment)
select b.acSubject, b.acName2, b.acName3, b.acAddress, b.acPost, b.acPostName, b.acCountry, b.acVATCodePrefix, b.acCode, b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a right join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where a.acSubject is null '
EXECUTE sp_executesql @SQLString;
end
Quand je lance la procédure de gestion de studio comme ceci:
exec dbo._upJM_SyncAll_test
tout est OK. Je n'obtiens pas d'erreur, la synchronisation fonctionne correctement.
Mais quand j'ai mis exécuter dans le déclencheur comme ceci:
create trigger _utrJM_SetSubj on tHE_SetSubj after insert, update, delete
as
begin
exec dbo._upJM_SyncAll_test
end
J'obtiens cette erreur:
Msg 8501, Niveau 16, État 3, Procédure _upJM_SyncAll_test, la Ligne 54
MSDTC sur le serveur "serveur" n'est pas disponible.
Procédure _upJM_SyncAll_test a seulement 39 lignes...
- Pourquoi êtes-vous à l'aide de SQL dynamique en premier lieu?, il ne me semble pas nécessaire
- eh bien, c'est comme ça.. serveur lié [LOCAL_MYSQL] est en place et en cours d'exécution, mais il pourrait se passer qui est inaccessible. Dans ce cas, si sp_executesql renvoie l'erreur je fais autre chose.. s'il vous Plaît noter que _upJM_SyncAll_test est juste la procédure d'essai pour ce post, _upJM_SyncAll est plus complexe.
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, le service a été arrêté. solution: il faut activer le service MSDTC sur
CLIC DROIT dessus et sélectionnez) > Commencer.
Déclencheurs sont inclus dans la transaction implicite nécessaire pour les commandes insert, update et delete. Parce que vous vous connectez à un serveur lié dans une transaction, SQL Server, il favorise une Transaction Distribuée.
Vous aurez besoin pour configurer le service MSDTC, vous pouvez ouvrir la console MMC et charger le MSDTC plugin ou utiliser le script suivant pour ouvrir entrants et sortants des transactions.
https://technet.microsoft.com/en-us/library/cc731495.aspx
open inbound and outbound transactions
veux dire et pourquoi est-il nécessaire?J'ai couru dans la même erreur, cependant, il n'était pas aussi simple que le Coordinateur de Transactions Distribuées service de pas en cours d'exécution. J'ai reçu une mise à jour du pilote automatiquement par windows qui a été à l'origine de problèmes avec COM+ et ne permet pas de MSDTC à communiquer correctement, même si le service ms DTC a été en cours d'exécution. Dans mon cas, c'était un problème avec HP hotkey pilotes mais en recherchant j'ai trouvé d'autres rapports de problèmes avec les pilotes audio provenant d'autres fabricants, à l'origine de ce que bien.
De vérifier pour voir si vous avez un problème similaire, de lancer des Services de Composants (dcomcnfg.exe), puis développez Services de Composants > Ordinateur > Mon Ordinateur, à partir de là, cliquez sur "Applications COM+" pour voir si un message d'erreur pop-up avec "COM+ incapable de parler à Microsoft Distributed Transaction Coordinator" ou il y aura une erreur rouge sur l'icône Mon Ordinateur dans la barre de navigation.
Le correctif pour moi a été de désactiver le "HP Hotkey Service" et "HotKeyServiceUWP" des services. Une fois ceux-ci ont été désactiver, MSDTC immédiatement commencé à travailler.
LenovoSmartStandby
service qui a besoin d'être désactivé comme une solution de contournement temporaire. Voir ce lien pour plus d'information'Distributed Transaction Coordinator service n'était pas en cours d'exécution, Ainsi a commencé le service et changé de type de service automatique de trop.