Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Técnicas de solución de problemas para resolver errores operativos que puede experimentar con el adaptador de Microsoft BizTalk para oracle Database.
Habilitar seguimiento
Para obtener información sobre el trazado en el adaptador de Base de Datos de Oracle, consulte Seguimiento de diagnóstico y registro de mensajes para el adaptador de Base de Datos de Oracle.
Problemas conocidos
A continuación se muestran los errores más comunes que pueden producirse al usar el adaptador de Base de datos de Oracle, junto con su causa y resolución probables.
Error al cargar los enlaces del adaptador
Problema
Al intentar iniciar el complemento de Visual Studio para agregar una referencia de servicio de adaptador o el complemento de BizTalk Project para consumir un servicio adaptador, recibirá el siguiente error:
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
Causa
Al intentar iniciar el complemento Agregar referencia de servicio de adaptador o el complemento Consumir servicio de adaptador, WCF carga los enlaces del adaptador para todos los adaptadores instalados. A su vez, los enlaces del adaptador dependen del software cliente específico para la aplicación empresarial. Puede enfrentar este problema por uno o ambos de los siguientes motivos:
El software cliente LOB necesario no está instalado en el equipo donde instaló el adaptador.
Ha hecho una instalación típica o completa del adaptador, que instala todos los adaptadores contenidos en el paquete de adaptadores de BizTalk. Sin embargo, es posible que las bibliotecas cliente loB se instalen solo para una aplicación empresarial. Como resultado, la GUI no puede cargar los enlaces para los otros adaptadores.
Resolución
Asegúrese de que las versiones de cliente loB necesarias están instaladas en el equipo donde instaló el paquete de adaptadores de BizTalk. Los sistemas de línea de negocio (LOB) y Enterprise admitidos enumeran las versiones de cliente admitidas.
Asegúrese de realizar una instalación personalizada de los adaptadores para instalar solo el adaptador que necesita.
Nota:
Para asegurarse de que la aplicación funciona con la versión más reciente de ODP.NET, debe tener instalados los "archivos DLL de directiva" en el equipo y registrados en la GAC. Para obtener más información, consulte Proveedor de datos de Oracle para .NET en el sitio web de Oracle.
El adaptador de base de datos de Oracle no se muestra en la lista de adaptadores en la consola de administración de BizTalk Server.
Problema
El adaptador de base de datos de Oracle incluido con el paquete de adaptadores de BizTalk no aparece en la lista de adaptadores de la consola de administración de BizTalk Server.
Causa
El adaptador de base de datos de Oracle es un enlace personalizado de WCF. Por lo tanto, aunque la consola de administración de BizTalk Server muestra el adaptador de WCF-Custom, no muestra los enlaces personalizados de WCF y, por lo tanto, no muestra el adaptador de base de datos de Oracle basado en WCF.
Resolución
Puede agregar explícitamente el adaptador de base de datos de Oracle a la consola de administración de BizTalk Server siguiendo los pasos mencionados en Agregar el adaptador de base de datos de Oracle a la consola de administración de BizTalk Server.
Error al recuperar la salida XML con más de 65 536 nodos
Problema
El adaptador proporciona el siguiente error al recuperar la salida XML que tiene más de 65 536 nodos.
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.
Causa
El adaptador no puede serializar ni deserializar un objeto con más de 65 536 elementos.
Resolución
Puede corregir este problema estableciendo el maxItemsInObjectGraph parámetro . Puede establecerlo de cualquiera de las dos maneras siguientes:
Establezca este parámetro cambiando el
maxItemsInObjectGraphparámetro en elServiceBehavioratributo de la clase de servicio.Agregue lo siguiente al archivo app.config de la aplicación.
<behaviors> <endpointBehaviors> <behavior name="NewBehavior"> <dataContractSerializer maxItemsInObjectGraph="65536000" /> </behavior> </endpointBehaviors> </behaviors>Un app.config de ejemplo tiene este aspecto.
<?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>
Error al realizar operaciones en la base de datos de Oracle
Problema
El adaptador proporciona el siguiente error al realizar cualquier operación en la base de datos de Oracle mediante BizTalk Server.
Para BizTalk Server
System.ArgumentNullException: Value cannot be null.Causa
No se especifica la acción WCF del mensaje. WCF requiere que se especifique una acción SOAP para cada operación, que informa al adaptador sobre la operación que se va a realizar en la aplicación loB.
Resolución
Especifique la acción SOAP en el puerto de envío o como una propiedad de contexto de mensaje en una orquestación de BizTalk. Para obtener instrucciones, consulte Configuración de la acción SOAP para Oracle Database. Consulte Mensajes y esquemas de mensajes para ver una lista de acciones para cada operación.
XmlReaderParsingException debido a un nombre de operación incorrecto en la acción especificada
Problema
La Consola de administración de BizTalk Server proporciona el siguiente error al enviar mensajes a una base de datos de 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>
Causa
Si configura un puerto WCF-Custom importando el archivo de enlace de puerto creado por el complemento de proyecto BizTalk para consumir el servicio adaptador, la acción del puerto se especifica en el siguiente formato:
<BtsActionMapping>
<Operation Name="Op1" Action="http://MyService/Svc/Op1" />
</BtsActionMapping>
En el formato anterior, el nombre de la operación se rige por la operación que eligió al generar el esquema. Por ejemplo, si generó el esquema para la operación Insertar en una tabla, el nombre de la operación en la acción será "Insertar". Sin embargo, el nombre de la operación en el puerto lógico creado en la orquestación de BizTalk en Visual Studio podría ser diferente.
Resolución
Asegúrese de que los nombres de las operaciones en el puerto lógico (en la orquestación de BizTalk en Visual Studio) y el puerto físico (en la consola de administración de BizTalk Server) son los mismos.
Error al especificar un URI de conexión para un puerto de WCF-Custom en BizTalk
Problema
BizTalk Server proporciona el siguiente error al especificar un URI de conexión para conectarse a la base de datos de Oracle.
Error saving properties.
(System.ArgumentException) The specified address is invalid.
(System.ArgumentException) Invalid address;
"<connection URI>" is not a well-formed absolute uri.
Causa
El URI de conexión no cumple el formato de codificación estándar. Por ejemplo, el valor de un parámetro puede contener un espacio.
Resolución
Asegúrese de que el URI de conexión especificado cumple el formato de codificación estándar. Por ejemplo, un espacio en blanco debe reemplazarse por "%20".
Excepción de cursor no válida al invocar procedimientos almacenados que toman parámetros REF CURSOR
Problema
Al invocar procedimientos en la base de datos de Oracle que toman entradas REF CURSOR, puede obtener la siguiente excepción:
Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-01001: invalid cursor ---> Oracle.DataAccess.Client.OracleException
Causa
El bloque PL/SQL para el procedimiento que está invocando podría estar canalizando los CURSOR REF, es decir, el CURSOR IN REF podría asignarse al OUT REF CURSOR.
Resolución
El bloque PL/SQL no debe canalizar el IN a los OUT REF CURSORs sin realizar el procesamiento adecuado.
Error al validar la respuesta para la operación ReadLOB mediante BizTalk Server
Problema
Al realizar una operación ReadLOB mediante el adaptador de base de datos de Oracle con BizTalk Server, la respuesta de la base de datos de Oracle produce un error de validación con el lenguaje de descripción de servicios web (WSDL).
Causa
El WSDL contiene un nombre de nodo StreamBody que se define para la ejecución de solicitudes basadas en servicios, pero no es necesario para escenarios de BizTalk. Por lo tanto, cuando el XML de salida, que no contiene el nodo StreamBody, se compara con el WSDL, se produce un error de validación.
Resolución
Quite el nodo StreamBody del WSDL al validar con la salida que se generó mediante BizTalk Server. Realice los pasos siguientes para hacerlo:
El WSDL que contiene el nodo StreamBody tiene este aspecto.
<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>Reemplace el elemento anterior por lo siguiente.
<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>En este paso, ha quitado la referencia a type="ns3:StreamBody" en el XSD original y la ha reemplazado por type="xs:base64Binary". Además, ha quitado el valor nillable="true" del XSD original.
Quite lo siguiente del 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" />Nota:
La operación ReadLOB no se admite con BizTalk Server. Debe usar una operación de selección de tabla para leer los datos LOB de una solución de BizTalk Server.
Es posible que se produzca un error en la validación del esquema en escenarios de sondeo.
Problema
Se produce un error en la validación del esquema en escenarios en los que el adaptador de base de datos de Oracle sondea las tablas de base de datos que contienen campos de tipo ROWID o UNROWID.
Causa
En tiempo de diseño, cuando el adaptador genera metadatos para la tabla que contiene campos de tipo ROWID o UNROWID, el esquema incluye "nillable=false", lo que significa que los campos de tipo ROWID o UNROWID no pueden ser NULL. Sin embargo, en tiempo de ejecución cuando el adaptador recupera los metadatos, los campos de tipo ROWID o UNROWID contienen valores NULL. Por lo tanto, se produce un error en la validación del esquema.
Resolución
Si usa el adaptador de base de datos de Oracle con BizTalk Server, puede optar por deshabilitar la validación del esquema. Como alternativa, puede editar manualmente el esquema para cambiar "nillbale=true" para los tipos de datos ROWID y UNROWID.
Error "Conversión irrazonable solicitada" al ejecutar procedimientos almacenados con Tipos de registro como parámetros
Causa
Considere un escenario en el que un procedimiento almacenado de Oracle toma un tipo de registro como parámetro. Supongamos que el tipo de registro se declara como <nombre> de tabla%ROWTYPE, donde la tabla tiene una columna del tipo de datos LONG. Cuando el adaptador de base de datos de Oracle encuentra el tipo de datos LONG, establece el tamaño del tipo de datos igual al valor especificado para la propiedad de enlace LongDatatypeColumnSize . Sin embargo, la base de datos de Oracle no define un tamaño para el tipo de datos LONG. Por lo tanto, cuando el adaptador invoca el procedimiento almacenado, produce un error de conversión no razonable solicitada.
Resolución
Si un tipo de registro tiene un tipo de datos LONG, debe definirlo explícitamente como parte de un paquete.
El adaptador no reconoce la acción en el puerto físico incluso cuando utiliza el archivo de enlace generado por el complemento de servicio de consumo del adaptador para crear los puertos.
Problema
Después de usar el complemento "Consume Adapter Service" para generar un esquema para una operación específica en la base de datos de Oracle, el complemento también crea un archivo de vinculación de puerto. Puede importar este archivo de enlace mediante la consola de administración de BizTalk Server para crear puertos físicos en BizTalk Server. Sin embargo, cuando se envían mensajes a la base de datos de Oracle mediante estos puertos, el adaptador no entiende la acción especificada en el puerto y proporciona un error similar al siguiente:
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.
Causa
Al crear puertos lógicos en una orquestación de BizTalk, se especifican determinados nombres para las operaciones en esos puertos o simplemente se usan los nombres predeterminados como Operation_1, Operation_2, etc. Sin embargo, en el archivo de enlace generado por el complemento consumir servicio de adaptador, el nombre de la operación es el mismo que el nombre de la operación de base de datos de Oracle para la que se generan metadatos. Por ejemplo, si genera metadatos para la operación Select en la tabla ACCOUNTACTIVITY de la base de datos de Oracle, la acción se establecerá en lo siguiente:
<Operation Name="Select" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
Al importar el archivo de enlace, la misma acción se establece en el puerto físico. Por lo tanto, los nombres de operación en el puerto lógico (Operation_1, Operation_2, etc.) no coinciden con los nombres de operación especificados en la acción en el puerto físico, lo que produce un error.
Resolución
Asegúrese de que el nombre de la operación en el puerto lógico sea el mismo que el nombre de la operación especificado como parte de la acción en el puerto físico. Realice una de las acciones siguientes:
Cambie el nombre de la operación en el puerto lógico de la orquestación de BizTalk de Operation_1, etc. a la operación para la que genera metadatos, por ejemplo, Select.
Cambie el nombre de la operación en la acción del puerto físico al nombre de la operación en el puerto lógico. Por ejemplo, podría cambiar la acción en el puerto físico para que sea similar a la siguiente:
<Operation Name="Operation_1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
El adaptador produce una excepción de desbordamiento ("System.OverflowException") al ejecutar una operación.
Problema
Con el adaptador, si intenta realizar una operación que contiene tipos de datos numéricos de Oracle dentro de DataSets o CURSORES REF de tipo débil, el adaptador podría producir una excepción de desbordamiento.
Causa
Esto sucede si proporciona un valor grande para el tipo de datos numérico de Oracle dentro de DataSets o de cursores REF de tipo débil que no pueden adaptarse al tipo .NET correspondiente.
Resolución
Si desea pasar valores grandes para el tipo de datos numérico de Oracle dentro de DataSets o REF CURSORS con escritura débil, debe habilitar la escritura segura estableciendo el valor de la propiedad de enlace EnableSafeTyping en true. Al activar la escritura segura, se expone el tipo de datos numérico de Oracle dentro de DataSets o REF CURSORS como cadenas.
Error con RootNode TypeName en proyectos de BizTalk
Problema
En un proyecto de BizTalk en Visual Studio, si los esquemas generados a partir del Complemento Consumir Servicio de Adaptador contienen caracteres no válidos o palabras reservadas para la propiedad RootNode TypeName, se producirá el siguiente error mientras se compila el proyecto.
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).
Resolución
Haga clic con el botón derecho en el nodo rood al que se hace referencia en el error y seleccione Propiedades.
Para la propiedad RootNode TypeName , quite los caracteres no válidos o palabras reservadas, por ejemplo, punto (.).
Advertencia de enlace no válida al usar el adaptador en Visual Studio
Problema
Cuando se usa el adaptador para crear una aplicación en Visual Studio 2013 y se abre el archivo de configuración (app.config) generado por el adaptador, verá una advertencia similar a la siguiente:
The element 'bindings' has invalid child element 'oracleDBBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
Causa
Esta advertencia aparece porque el enlace del adaptador de base de datos de Oracle, oracleDBBinding, no es un enlace estándar enviado con Windows Communication Foundation (WCF).
Resolución
Puede omitir esta advertencia de forma segura.
BizTalk Server produce una excepción si usa más de un esquema de notificación en la misma aplicación o usa el esquema de notificación en varias aplicaciones del mismo host.
Problema
BizTalk Server produce una excepción XLANG o una excepción que indica que la aplicación no puede encontrar la especificación del documento porque varios esquemas coinciden con el tipo de mensaje.
Causa
Esto sucede debido a cualquiera de las siguientes acciones:
Ha generado más de un esquema de notificación en un proyecto de BizTalk Server, lo ha implementado en una aplicación de BizTalk Server y, a continuación, ha ejecutado la aplicación para recibir notificaciones de la base de datos de Oracle. Dado que los esquemas de notificación son comunes, hay un conflicto entre los esquemas que se implementan en la aplicación de BizTalk Server.
En el caso de varios proyectos, ha generado un esquema de notificación para cada uno de los proyectos de BizTalk Server, ha implementado cada proyecto en una aplicación de BizTalk Server independiente en el mismo host y, a continuación, ha ejecutado una aplicación o aplicaciones para recibir notificaciones de la base de datos de Oracle. Dado que los esquemas y ensamblados son accesibles en las aplicaciones de BizTalk Server, hay un conflicto entre los esquemas comunes implementados en varias aplicaciones y ensamblados de BizTalk Server.
Resolución
Use un único archivo de esquema de notificación para una aplicación de BizTalk Server. Si necesita usar el esquema de notificación en varias aplicaciones de BizTalk Server en el mismo host, cree una aplicación que contenga un único esquema de notificación y, a continuación, use el esquema de notificación de todas las demás aplicaciones de BizTalk Server.
El uso de memoria y el recuento de subprocesos aumenta al usar el adaptador en una operación de entrada transaccionada
Problema
En una operación de entrada transaccionada, como Sondeo, si no hay datos disponibles en la tabla que se está sondeando y el adaptador continúa sondeando, experimentará un aumento en el uso de memoria y el recuento de subprocesos con el paso del tiempo.
Causa
Si no hay datos disponibles en la tabla que se está sondeando, después de cada ciclo de tiempo de espera de recepción, Windows Communication Foundation (WCF) genera un nuevo subproceso para continuar con la operación de sondeo. Por lo tanto, el número de subprocesos y el uso de memoria aumentan durante un período de tiempo. Sin embargo, si la tabla que se sondea tiene algunos datos, el mismo subproceso continúa realizando todos los sondeos posteriores.
Resolución
Se recomienda establecer ReceiveTimeout en el valor máximo posible, que es 24.20:31:23.6470000 (24 días) para que un nuevo subproceso se genere solo cada 24 días. Esto garantizará que el uso de memoria y el recuento de subprocesos no crezcan demasiado pronto.
Nota:
Si se ha establecido SqlAdapterInboundTransactionBehavior, asegúrese de que TransactionTimeout también está configurado para el valor máximo posible, que es 24.20:31:23.6470000 (24 días). Al usar esta solución alternativa, se puede agregar SqlAdapterInboundTransactionBehavior solo si se debe configurar el nivel de aislamiento de transacción. De lo contrario, se recomienda eliminar esa conducta.
Para obtener más información sobre la propiedad de vinculación ReceiveTimeout, vea Leer sobre las propiedades de vinculación del adaptador de base de datos de Oracle. Para obtener instrucciones sobre cómo especificar propiedades de enlace, consulte Configuración de las propiedades de enlace para Oracle Database.
Nota:
Al usar el adaptador con BizTalk Server, establecer el tiempo de espera en un valor grande no afecta a la funcionalidad del adaptador.
Véase también
Solucionar problemas del adaptador de Oracle DatabaseSolucionar problemas de instalación con el adaptador de Base de datos de Oracle