Résoudre les problèmes opérationnels liés à l’adaptateur Oracle Database
Techniques de résolution des problèmes pour résoudre les erreurs opérationnelles que vous pouvez rencontrer à l’aide de l’adaptateur Microsoft BizTalk pour Oracle Database.
Activer le traçage
Pour plus d’informations sur la prise en charge du suivi dans l’adaptateur Oracle Database, consultez Suivi de diagnostic et journalisation des messages pour l’adaptateur Oracle Database.
Problèmes connus
Voici les erreurs les plus courantes que vous pouvez rencontrer lors de l’utilisation de l’adaptateur Oracle Database, ainsi que leur cause et leur résolution probables.
Erreur lors du chargement des liaisons d’adaptateur
Problème
Lorsque vous essayez de démarrer le plug-in Visual Studio add adapter service ou le complément De projet BizTalk du service d’adaptateur consommer, vous obtenez l’erreur suivante :
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
Cause
Lorsque vous essayez de démarrer le plug-in Add Adapter Service Reference ou le complément Consume Adapter Service, WCF charge les liaisons d’adaptateur pour toutes les cartes installées. À leur tour, les liaisons d’adaptateur dépendent du logiciel client spécifique pour l’application d’entreprise. Vous pouvez rencontrer ce problème pour l’une ou les deux raisons suivantes :
Le logiciel client métier requis n’est pas installé sur l’ordinateur sur lequel vous avez installé l’adaptateur.
Vous avez effectué une installation standard ou complète de l’adaptateur, qui installe toutes les cartes contenues dans le pack d’adaptateurs BizTalk. Toutefois, les bibliothèques clientes métier peuvent être installées pour une seule application d’entreprise. Par conséquent, l’interface graphique graphique ne parvient pas à charger les liaisons pour les autres cartes.
Résolution :
Assurez-vous que les versions requises du client métier sont installées sur l’ordinateur sur lequel vous avez installé le pack d’adaptateurs BizTalk. Les systèmes métier et d’entreprise pris en charge répertorient les versions clientes prises en charge.
Veillez à effectuer une installation personnalisée des adaptateurs pour installer uniquement l’adaptateur dont vous avez besoin.
Notes
Pour vous assurer que votre application fonctionne avec la version la plus récente de ODP.NET, vous devez disposer des « DLL de stratégie » installées sur l’ordinateur et inscrites dans le GAC. Pour plus d’informations, consultez Fournisseur de données Oracle pour .NET sur le site web d’Oracle.
L’adaptateur de base de données Oracle ne s’affiche pas dans la liste des cartes dans BizTalk Server console Administration
Problème
L’adaptateur Oracle Database inlcuded with BizTalk Adapter Pack n’est pas répertorié dans la liste des cartes dans la console d’administration BizTalk Server.
Cause
L’adaptateur Oracle Database est une liaison personnalisée WCF. Ainsi, bien que la console d’administration BizTalk Server affiche l’adaptateur WCF-Custom, elle n’affiche pas les liaisons personnalisées WCF et, par conséquent, n’affiche pas l’adaptateur Oracle Database basé sur WCF.
Résolution :
Vous pouvez ajouter explicitement l’adaptateur Oracle Database à la console d’administration BizTalk Server en suivant les étapes mentionnées dans Ajout de l’adaptateur De base de données Oracle à BizTalk Server console d’administration.
Erreur lors de la récupération de la sortie XML avec plus de 65 536 nœuds
Problème
L’adaptateur génère l’erreur suivante lors de la récupération d’une sortie XML qui a plus de 65 536 nœuds.
Maximum number of items that can be serialized or deserialized in an object graph is '65536'.
Change the object graph or increase the MaxItemsInObjectGraph quota.
Cause
L’adaptateur ne peut pas sérialiser et désérialiser un objet contenant plus de 65 536 éléments.
Résolution :
Vous pouvez résoudre ce problème en définissant le maxItemsInObjectGraph
paramètre. Vous pouvez le définir de l’une des deux manières suivantes :
Définissez ce paramètre en modifiant le
maxItemsInObjectGraph
paramètre dans l’attributServiceBehavior
de votre classe de service.Ajoutez ce qui suit au fichier app.config de votre application.
<behaviors> <endpointBehaviors> <behavior name="NewBehavior"> <dataContractSerializer maxItemsInObjectGraph="65536000" /> </behavior> </endpointBehaviors> </behaviors>
Un exemple app.config ressemble à ceci.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="NewBehavior">
<dataContractSerializer maxItemsInObjectGraph="65536000" />
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint behaviorConfiguration="NewBehavior" binding="oracleDBBinding"
contract="IOutboundContract" name="oracle_ICalculator" />
</client>
</system.serviceModel>
</configuration>
Erreur lors de l’exécution d’opérations sur la base de données Oracle
Problème
L’adaptateur génère l’erreur suivante lors de l’exécution d’une opération sur la base de données Oracle à l’aide de BizTalk Server.
Pour BizTalk Server
System.ArgumentNullException: Value cannot be null.
Cause
L’action WCF du message n’est pas spécifiée. WCF exige qu’une action SOAP soit spécifiée pour chaque opération, ce qui informe l’adaptateur de l’opération à effectuer sur l’application métier.
Résolution :
Spécifiez l’action SOAP dans le port d’envoi ou en tant que propriété de contexte de message dans une orchestration BizTalk. Pour obtenir des instructions, consultez Configurer l’action SOAP pour Oracle Database. Consultez Messages et schémas de message pour afficher la liste des actions pour chaque opération.
XmlReaderParsingException en raison d’un nom d’opération incorrect dans l’action spécifiée
Problème
La console d’administration BizTalk Server génère l’erreur suivante lors de l’envoi de messages à une base de données Oracle :
Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Invalid argument:
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="<operation_name>" Action="<action>" />
</BtsActionMapping>
Cause
Si vous configurez un port WCF-Custom en important le fichier de liaison de port créé par le complément de projet BizTalk du service Consume Adapter, l’action dans le port est spécifiée au format suivant :
<BtsActionMapping>
<Operation Name="Op1" Action="http://MyService/Svc/Op1" />
</BtsActionMapping>
Dans le format ci-dessus, le nom de l’opération est régi par l’opération que vous avez choisie lors de la génération du schéma. Par exemple, si vous avez généré le schéma pour l’opération Insérer sur une table, le nom de l’opération dans l’action sera « Insérer ». Toutefois, le nom de l’opération dans le port logique créé dans l’orchestration BizTalk dans Visual Studio peut être différent.
Résolution :
Assurez-vous que les noms des opérations dans le port logique (dans l’orchestration BizTalk dans Visual Studio) et le port physique (dans BizTalk Server console d’administration) sont identiques.
Erreur lors de la spécification d’un URI de connexion pour un port WCF-Custom dans BizTalk
Problème
BizTalk Server génère l’erreur suivante lorsque vous spécifiez un URI de connexion pour vous connecter à la base de données Oracle.
Error saving properties.
(System.ArgumentException) The specified address is invalid.
(System.ArgumentException) Invalid address;
"<connection URI>" is not a well-formed absolute uri.
Cause
L’URI de connexion n’adhère pas au format d’encodage standard. Par exemple, la valeur d’un paramètre peut contenir un espace.
Résolution :
Assurez-vous que l’URI de connexion que vous spécifiez respecte le format d’encodage standard. Par exemple, un espace vide doit être remplacé par « %20 ».
Exception de curseur non valide lors de l’appel de procédures stockées qui prennent des paramètres REF CURSOR
Problème
Lorsque vous appelez des procédures dans la base de données Oracle qui prennent des entrées REF CURSOR, vous pouvez obtenir l’exception suivante :
Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-01001: invalid cursor ---> Oracle.DataAccess.Client.OracleException
Cause
Le bloc PL/SQL de la procédure que vous appelez peut être en cours de canalisation des REF CURSORs, c’est-à-dire que le curseur IN REF peut être affecté au CURSEUR OUT REF.
Résolution :
Le bloc PL/SQL ne doit pas diriger l’in vers les CURSORs DE REF OUT sans traitement approprié.
Erreur lors de la validation de la réponse pour l’opération ReadLOB à l’aide de BizTalk Server
Problème
Lors de l’exécution d’une opération ReadLOB à l’aide de l’adaptateur Oracle Database avec BizTalk Server, la réponse de la base de données Oracle échoue à la validation par rapport au langage WSDL (Web Services Description Language).
Cause
WSDL contient un nom de nœud StreamBody qui est défini pour l’exécution des demandes basées sur le service, mais n’est pas nécessaire pour les scénarios BizTalk. Par conséquent, lorsque le code XML de sortie, qui ne contient pas le nœud StreamBody, est comparé au WSDL, la validation échoue.
Résolution :
Supprimez le nœud StreamBody du WSDL lors de la validation par rapport à la sortie générée à l’aide de BizTalk Server. Pour ce faire, procédez comme suit :
Le WSDL contenant le nœud StreamBody ressemble à ceci.
<xs:element name="ReadLOBResponse"> <xs:annotation> <xs:documentation> <doc:action xmlns:doc="http://schemas.microsoft.com/servicemodel/adapters/metadata/documentation">http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/TBL_ALL_DATATYPES/ReadLOB/response\</doc:action> </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="ReadLOBResult" nillable="true" type="ns3:StreamBody" /> </xs:sequence> </xs:complexType> </xs:element>
Remplacez le précédent par ce qui suit.
<xs:element name="ReadLOBResponse"> <xs:annotation> <xs:documentation> <doc:action xmlns:doc="http://schemas.microsoft.com/servicemodel/adapters/metadata/documentation">http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/TBL_ALL_DATATYPES/ReadLOB/response\</doc:action> </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="ReadLOBResult" type="xs:base64Binary" /> </xs:sequence> </xs:complexType> </xs:element>
Dans cette étape, vous avez supprimé la référence à type="ns3 :StreamBody » dans le XSD d’origine et vous l’avez remplacée par type="xs :base64Binary ». En outre, vous avez supprimé la valeur nillable="true » du XSD d’origine.
Supprimez ce qui suit du WSDL.
<xs:complexType name="StreamBody"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="Stream"> <xs:simpleType> <xs:restriction base="xs:base64Binary"> <xs:minLength value="0" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> <xs:element name="StreamBody" nillable="true" type="ns3:StreamBody" />
Notes
L’opération ReadLOB n’est pas prise en charge avec BizTalk Server. Vous devez utiliser une opération de sélection de table pour lire les données métier d’une solution BizTalk Server.
La validation de schéma peut échouer dans les scénarios d’interrogation
Problème
La validation du schéma échoue dans les scénarios où l’adaptateur Oracle Database interroge les tables de base de données qui contiennent des champs de type ROWID ou UNROWID.
Cause
Au moment de la conception, lorsque l’adaptateur génère des métadonnées pour la table contenant des champs de type ROWID ou UNROWID, le schéma inclut « nillable=false », ce qui signifie que les champs de type ROWID ou UNROWID ne peuvent pas être null. Toutefois, au moment de l’exécution, lorsque l’adaptateur récupère les métadonnées, les champs de type ROWID ou UNROWID contiennent des valeurs null. Par conséquent, la validation du schéma échoue.
Résolution :
Si vous utilisez l’adaptateur Oracle Database avec BizTalk Server, vous pouvez choisir de désactiver la validation du schéma. Vous pouvez également modifier manuellement le schéma pour modifier « nillbale=true » pour les types de données ROWID et UNROWID.
Erreur « Conversion déraisonnable demandée » lors de l’exécution de procédures stockées avec des types d’enregistrements comme paramètres
Cause
Prenons l’exemple d’un scénario dans lequel une procédure stockée Oracle prend un type d’enregistrement comme paramètre. Supposons que le type d’enregistrement soit déclaré en tant que <nom> de table%ROWTYPE, où la table a une colonne de type de données LONG. Lorsque l’adaptateur Oracle Database rencontre le type de données LONG, il définit la taille du type de données égale à la valeur spécifiée pour la propriété de liaison LongDatatypeColumnSize . Toutefois, la base de données Oracle ne définit pas de taille pour le type de données LONG. Ainsi, lorsque l’adaptateur appelle la procédure stockée, il génère une erreur « Conversion déraisonnable demandée ».
Résolution :
Si un type d’enregistrement a un type de données LONG, vous devez le définir explicitement dans le cadre d’un package.
L’adaptateur ne reconnaît pas l’action sur le port physique, même si vous utilisez le fichier de liaison généré par le complément Consume Adapter Service pour créer les ports
Problème
Après avoir utilisé le complément Consume Adapter Service pour générer le schéma d’une opération spécifique sur la base de données Oracle, le complément crée également un fichier de liaison de port. Vous pouvez importer ce fichier de liaison à l’aide de la console Administration BizTalk Server pour créer des ports physiques dans BizTalk Server. Toutefois, lorsque vous envoyez des messages à la base de données Oracle à l’aide de ces ports, l’adaptateur ne comprend pas l’action spécifiée sur le port et génère une erreur similaire à la suivante :
Microsoft.ServiceModel.Channels.Common.UnsupportedOperationException: Incorrect Action
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="<op_name>" Action="<action>" />
</BtsActionMapping>. Correct the specified Action, or refer to the documentation on the allowed formats for the Actions.
Cause
Lorsque vous créez des ports logiques dans une orchestration BizTalk, vous spécifiez certains noms pour les opérations sur ces ports ou vous utilisez simplement les noms par défaut tels que Operation_1, Operation_2, etc. Toutefois, dans le fichier de liaison généré par le complément Consume Adapter Service, le nom de l’opération est identique au nom de l’opération de base de données Oracle pour laquelle vous générez des métadonnées. Par exemple, si vous générez des métadonnées pour l’opération Select sur la table ACCOUNTACTIVITY dans la base de données Oracle, l’action est définie sur ce qui suit :
<Operation Name="Select" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
Lorsque vous importez le fichier de liaison, la même action est définie sur le port physique. Ainsi, les noms d’opération sur le port logique (Operation_1, Operation_2, etc.) ne correspondent pas aux noms d’opération spécifiés dans l’action sur le port physique, ce qui entraîne une erreur.
Résolution :
Vérifiez que le nom de l’opération dans le port logique est identique au nom de l’opération spécifié dans le cadre de l’action dans le port physique. Effectuez l’une des opérations suivantes :
Remplacez le nom de l’opération dans le port logique dans l’orchestration BizTalk de Operation_1, etc. par l’opération pour laquelle vous générez des métadonnées, par exemple Sélectionner.
Remplacez le nom de l’opération dans l’action sur le port physique par le nom de l’opération dans le port logique. Par exemple, vous pouvez modifier l’action dans le port physique pour qu’elle ressemble à ce qui suit :
<Operation Name="Operation_1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
L’adaptateur lève une exception de dépassement de capacité (« System.OverflowException ») lors de l’exécution d’une opération
Problème
À l’aide de l’adaptateur, si vous essayez d’effectuer une opération contenant des types de données numériques Oracle dans des DataSets ou des CURSEURS REF faiblement typés, l’adaptateur peut lever une exception de dépassement de capacité.
Cause
Cela se produit si vous fournissez une valeur importante pour le type de données numérique Oracle dans des DataSets ou des CURSEURS REF faiblement typés qui ne peuvent pas tenir dans le type .NET respectif.
Résolution :
Si vous souhaitez transmettre des valeurs importantes pour le type de données numérique Oracle à l’intérieur de DataSets ou de CURSEURS REF faiblement typés, vous devez activer la saisie sécurisée en définissant la valeur de la propriété de liaison EnableSafeTyping sur true. L’activation de la saisie sécurisée expose le type de données numérique Oracle à l’intérieur des DataSets ou des CURSEURS REF faiblement typés en tant que chaînes.
Erreur avec RootNode TypeName dans les projets BizTalk
Problème
Dans un projet BizTalk dans Visual Studio, si les schémas générés à partir du complément Consume Adapter Service contiennent des caractères ou des mots réservés non valides pour la propriété RootNode TypeName , l’erreur suivante se produit lors de la compilation du projet :
Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).
Résolution :
Cliquez avec le bouton droit sur le nœud jubé référencé dans l’erreur, puis sélectionnez Propriétés.
Pour la propriété TypeName RootNode , supprimez les caractères non autorisés ou les mots réservés, par exemple point (.).
Avertissement de liaison non valide lors de l’utilisation de l’adaptateur dans Visual Studio
Problème
Lorsque vous utilisez l’adaptateur pour créer une application dans Visual Studio 2013 et que vous ouvrez le fichier de configuration (app.config) généré par l’adaptateur, un avertissement similaire au suivant s’affiche :
The element 'bindings' has invalid child element 'oracleDBBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
Cause
Cet avertissement s’affiche car la liaison de l’adaptateur Oracle Database, oracleDBBinding
, n’est pas une liaison standard fournie avec Windows Communication Foundation (WCF).
Résolution :
Vous pouvez ignorer cet avertissement sans problème.
BizTalk Server lève une exception si vous utilisez plusieurs schémas de notification dans la même application ou si vous utilisez le schéma de notification sur plusieurs applications sur le même hôte
Problème
BizTalk Server lève une exception XLANG ou une exception indiquant que l’application ne peut pas localiser la spécification du document, car plusieurs schémas correspondent au type de message.
Cause
Cela se produit en raison de l’une des raisons suivantes :
Vous avez généré plusieurs schémas de notification dans un projet BizTalk Server, vous l’avez déployé sur une application BizTalk Server, puis vous avez exécuté l’application pour recevoir des notifications de la base de données Oracle. Étant donné que les schémas de notification sont courants, il existe un conflit entre les schémas déployés dans l’application BizTalk Server.
Dans le cas de plusieurs projets, vous avez généré un schéma de notification pour chacun des projets BizTalk Server, déployé chaque projet sur une application BizTalk Server distincte sur le même hôte, puis exécuté une ou plusieurs applications pour recevoir des notifications de la base de données Oracle. Étant donné que les schémas et les assemblys sont accessibles dans toutes les applications dans BizTalk Server, il existe un conflit entre les schémas communs déployés sous différents BizTalk Server applications et assemblys.
Résolution :
Utilisez un fichier de schéma de notification unique pour une application BizTalk Server. Si vous devez utiliser le schéma de notification dans plusieurs applications BizTalk Server sur le même hôte, créez une application contenant un schéma de notification unique, puis utilisez le schéma de notification de toutes les autres applications dans BizTalk Server.
L’utilisation de la mémoire et le nombre de threads augmentent lors de l’utilisation de l’adaptateur dans une opération entrante transactionnée
Problème
Dans une opération entrante transactionnée, telle que l’interrogation, si aucune donnée n’est disponible dans la table en cours d’interrogation et que l’adaptateur continue à interroger, vous constatez une augmentation de l’utilisation de la mémoire et du nombre de threads sur une période donnée.
Cause
Si aucune donnée n’est disponible dans la table en cours d’interrogation, après chaque cycle de délai d’expiration de réception, Windows Communication Foundation (WCF) génère un nouveau thread pour poursuivre l’opération d’interrogation. Par conséquent, le nombre de threads et l’utilisation de la mémoire augmentent sur une période donnée. Toutefois, si la table interrogée contient des données, le même thread continue d’effectuer tous les sondages suivants.
Résolution :
Nous vous recommandons de définir ReceiveTimeout sur la valeur maximale possible, qui est 24.20 :31 :23.64700000 (24 jours) afin qu’un nouveau thread ne soit généré que tous les 24 jours. Cela garantit que l’utilisation de la mémoire et le nombre de threads ne augmentent pas trop tôt.
Notes
Si SqlAdapterInboundTransactionBehavior a été défini, assurez-vous que TransactionTimeout est également configuré pour la valeur maximale possible, qui est 24.20 :31 :23.6470000 (24 jours). Lorsque vous utilisez cette solution de contournement, nous pouvons ajouter SqlAdapterInboundTransactionBehavior uniquement si le niveau d’isolation de transaction doit être configuré. Sinon, il est recommandé de supprimer ce comportement.
Pour plus d’informations sur la propriété de liaison ReceiveTimeout , consultez En savoir plus sur les propriétés de liaison de l’adaptateur Oracle Database. Pour obtenir des instructions sur la spécification des propriétés de liaison, consultez Configurer les propriétés de liaison pour Oracle Database.
Notes
Lorsque vous utilisez l’adaptateur avec BizTalk Server, définir le délai d’expiration sur une valeur importante n’a pas d’impact sur les fonctionnalités de l’adaptateur.
Voir aussi
Résoudre les problèmes d’installation de l’adaptateur Oracle Database Résoudre lesproblèmes d’installation de l’adaptateur Oracle Database