Bonjour à tous,

je souhaite traiter des insertion dans une table dans une base distante oracle de manière transactionnel.

Les insertions se feront a partir de sql server 2000 vers oracle.
Je passe par une serveur lié qui utilise le provider ole db d'oracle.

Le serveur lié marche bien pour toutes les opérations simple (insert, select etc ...)

Lorsque j'execute une procédure stocké qui contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
CREATE PROCEDURE MA_PROCSTOCK
AS
BEGIN
DECLARE @ERREUR	INT
 
SET XACT_ABORT ON
 
BEGIN DISTRIBUTED TRANSACTION
 
INSERT INTO LINKED_SERVER..SCHEMA.TABLE_DISTANTE (...)
SELECT  ... FROM table_local
 
SET @ERREUR=@@ERROR
 
IF (@ERREUR=0)
BEGIN
	COMMIT TRANSACTION
	END
ELSE
BEGIN
	ROLLBACK TRANSACTION
END
 
SET XACT_ABORT OFF
 
 
END
GO
j'ai le message d'erreur suivant :

Serveur : Msg 7391, Niveau 16, État 1, Procédure MA_PROCSTOCK, Ligne 10
L'opération demandée ne peut pas être effectuée car le fournisseur OLE DB 'OraOLEDB.Oracle' n'a pas réussi à démarrer de transaction distribuée.
[OLE/DB provider returned message: La nouvelle transaction ne peut pas s'inscrire dans le coordinateur de transactions spécifié. ]
Trace de l'erreur OLE DB [OLE/DB Provider 'OraOLEDB.Oracle' ITransactionJoin::JoinTransaction returned 0x8004d00a].



si quelqun peut m'aider dans ma résolution du problème je l'en remercie d'avance.

ps : d'autres transactions distribuées sur un autre serveur liée fonctionnent parfaitement. (ce n'est donc pas a mon avis un problème de parefeu mais plus peut etre la config du serveur lié (les options a cocher))

Merci.