Solución de problemas operativos con el adaptador de base de datos de Oracle
Técnicas de solución de problemas para resolver errores operativos que puede experimentar con el adaptador de Microsoft BizTalk para oracle Database.
Habilitación del seguimiento
Para obtener información sobre la compatibilidad con el seguimiento 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 puede encontrar 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 Agregar referencia del servicio adaptador de Visual Studio o el complemento consumir el servicio adaptador de BizTalk Project, obtendrá 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 del servicio adaptador o el complemento consumir servicio adaptador, WCF carga los enlaces de adaptador para todos los adaptadores instalados. A su vez, los enlaces de adaptador dependen del software cliente específico de la aplicación empresarial. Es posible que se enfrente a 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 de 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 compatibles enumeran las versiones de cliente compatibles.
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 instaladas las "DLL de directiva" en el equipo y registradas en la GAC. Para 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 Adición del adaptador de base de datos de Oracle a BizTalk Server Consola de administración.
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 y 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
maxItemsInObjectGraph
parámetro del atributo en laServiceBehavior
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 ejemplo app.config 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 de WCF-Custom importando el archivo de enlace de puerto creado por el Complemento de proyecto de BizTalk del servicio de adaptador de consumo, la acción en el 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 operación en el puerto lógico (en la orquestación de BizTalk en Visual Studio) y el puerto físico (en BizTalk Server consola de administración) son iguales.
Error al especificar un URI de conexión para un puerto de WCF-Custom en BizTalk
Problema
BizTalk Server produce 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 podría contener un espacio.
Resolución
Asegúrese de que el URI de conexión que especifique se adhiere al 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, es posible que obtenga 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 canalización de los CURSOR REF, es decir, el CURSOR IN REF podría asignarse al CURSOR REF OUT.
Resolución
El bloque PL/SQL no debe canalizar el IN a los CURSOR DE REFERENCIA OUT sin 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 Oracle Database con BizTalk Server, la respuesta de la base de datos de Oracle produce un error en la 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 generada mediante BizTalk Server. Realice los pasos siguientes para ello:
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 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, quitó la referencia a type="ns3:StreamBody" en el XSD original y la reemplazó 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
No se admite la operación ReadLOB con BizTalk Server. Debe usar una operación Select de tabla para leer los datos de 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 Oracle Database 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 oracle Database 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, se produce un error de conversión irrazonable 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, aunque use el archivo de enlace generado por el complemento Consum Adapter Service para crear los puertos.
Problema
Después de usar el complemento Consumir servicio de adaptador 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 enlace 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, al enviar 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 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 es 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 siguientes acciones:
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 se generan metadatos, por ejemplo, Seleccionar.
Cambie el nombre de la operación en la acción del puerto físico por el nombre de la operación en el puerto lógico. Por ejemplo, puede 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 cursores REF con tipo débil que no caben en el tipo de .NET respectivo.
Resolución
Si desea pasar valores grandes para el tipo de datos numérico de Oracle dentro de DataSets o CURSORES REF con tipo débil, debe habilitar la escritura segura estableciendo el valor de la propiedad de enlace EnableSafeTyping en true. Al habilitar la escritura segura, se expone el tipo de datos numérico de Oracle dentro de DataSets o CURSORES REF con tipo débil 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 al compilar 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 las palabras reservadas, por ejemplo, punto (.).
Advertencia de enlace no válida al usar el adaptador en Visual Studio
Problema
Cuando use el adaptador para crear una aplicación en Visual Studio 2013 y abra 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 incluido con Windows Communication Foundation (WCF).
Resolución
Puede omitir esta advertencia sin problemas.
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 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 número de subprocesos aumenta al usar el adaptador en una operación de entrada con transacciones
Problema
En una operación de entrada de transacción, como sondear, si no hay datos disponibles en la tabla que se sondean y el adaptador continúa sondeando, durante un período de tiempo que experimenta un aumento en el uso de memoria y el recuento de subprocesos.
Causa
Si no hay datos disponibles en la tabla que se están 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 sigue 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 número 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, podemos agregar SqlAdapterInboundTransactionBehavior solo si se debe configurar el nivel de aislamiento de transacción. De lo contrario, es un procedimiento recomendado quitar ese comportamiento.
Para obtener más información sobre la propiedad de enlace ReceiveTimeout , vea Leer sobre las propiedades de enlace 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
Cuando se usa el adaptador con BizTalk Server, establecer el tiempo de espera en un valor grande no afecta a la funcionalidad del adaptador.
Consulte también
Solución de problemas de instalación del adaptador de Base de datos de Oraclecon el adaptador de Base de datos de Oracle