Compartir vía


Recibir mensajes de cambio de datos basados en sondeos en el adaptador de base de datos de Oracle

El adaptador de Microsoft BizTalk para base de datos de Oracle admite la recepción de mensajes modificados por datos basados en sondeos mediante el sondeo de la base de datos de Oracle. El adaptador entrega los mensajes a la aplicación mediante:

  • Ejecutar una consulta SELECT de SQL para determinar si los datos están disponibles para el sondeo. Puede configurar el adaptador para ejecutar la consulta SELECT de SQL periódica o continuamente.

  • Ejecutar una consulta SELECT de SQL en una tabla o vista de Oracle o ejecutar procedimientos almacenados, funciones o procedimientos y funciones empaquetadas.

  • Ejecución de un bloque de código PL/SQL opcional posterior al sondeo en la base de datos de Oracle. Este bloque de código se usa a menudo para actualizar un campo de los registros consultados en el destino o para mover los registros consultados a otra tabla o vista.

  • Devolver la consulta da como resultado un conjunto de resultados invocando la operación POLLINGSTMT o los procedimientos almacenados, funciones o procedimientos empaquetados y funciones que se exponen como operaciones de sondeo.

    El adaptador ejecuta todas estas operaciones dentro de una transacción de Oracle.

    El adaptador también le permite recibir mensajes de cambios de datos para varios artefactos de Oracle en la misma aplicación mediante la exposición de un PollingId parámetro en el URI de conexión. Este parámetro modifica el espacio de nombres de destino de la operación POLLINGSTMT.

Cambiar el espacio de nombres de destino de POLLINGSTMT

Puede modificar el espacio de nombres de destino de la operación POLLINGSTMT estableciendo el PollingId parámetro de cadena de consulta en el URI de conexión. Si se especifica un PollingId en el URI de conexión, el adaptador de Oracle de la base de datos anexa la cadena especificada en el parámetro PollingId, al espacio de nombres de destino predeterminado para la operación POLLINGSTMT: http://microsoft.lobservices.oracledb/2007/03/POLLINGSTMT. No se modifica la acción de mensaje de la operación POLLINGSTMT.

Por ejemplo, si se especifica el siguiente URI de conexión:

OracleDb://User=SCOTT;Password=TIGER@Adapter?PollingId=AcctActivity

El espacio de nombres de destino es el siguiente:

http:/microsoft.lobservices.oracledb/2007/03/POLLINGSTMTAcctActivity.

Precaución

En este ejemplo o guía se hace referencia a información confidencial, como una cadena de conexión o un nombre de usuario y una contraseña. Nunca codifique de forma rígida estos valores en el código y asegúrese de proteger los datos confidenciales mediante la autenticación más segura disponible. Para más información, consulte la siguiente documentación:

Al proporcionar un espacio de nombres único para cada operación POLLINGSTMT, puede recibir mensajes de cambios de datos para varias tablas y vistas de Oracle en su aplicación.

Para obtener más información sobre el URI de conexión del adaptador de Oracle Database, consulte Creación del URI de conexión de Oracle Database.

Recepción de mensajes de datos cambiados utilizando propiedades de enlace

Configure el adaptador de base de datos de Oracle para recibir mensajes de cambios en los datos configurando algunas o todas las siguientes propiedades de vinculación.

Propiedad de enlace Importancia Predeterminado Obligatorio/opcional
InboundOperationType Asegúrese de que el valor está establecido en Sondeo. Encuesta Obligatorio. Si no se establece explícitamente, se aplicará el valor predeterminado.
PolledDataAvailableStatement Especifique la instrucción SELECT ejecutada para determinar si hay datos disponibles para sondear una tabla específica. La instrucción especificada debe devolver un conjunto de resultados que consta de filas y columnas. El valor de la primera celda del conjunto de resultados indica si el adaptador ejecuta el valor especificado para la propiedad de enlace PollingStatement . Si la primera celda del resultado contiene un valor positivo, el adaptador ejecuta la instrucción de sondeo. Por ejemplo, una declaración válida para esta propiedad de enlace es:

Select * from <table_name>

Nota: No debe especificar procedimientos almacenados para esta propiedad de enlace. Además, esta instrucción no debe modificar la base de datos de Oracle subyacente.
SELECT 1 FROM DUAL Obligatorio. Si no se establece explícitamente, se aplicará el valor predeterminado, lo que implica que el adaptador debe continuar sondeando independientemente de si la tabla que se sondea tiene datos o no.
PollingAction Define la acción para la operación de sondeo. Puede determinar la acción de sondeo de una operación específica a partir de los metadatos que genera para la operación mediante el complemento Consumir Servicio del Adaptador. nulo Opcional para las operaciones de sondeo en tablas y vistas mediante la instrucción SELECT.
PollingInterval Establezca en el intervalo, en segundos, en el que desea que el adaptador consulte la base de datos de Oracle. Esta propiedad especifica el intervalo de sondeo y el tiempo de espera de la transacción de sondeo. El valor debe ser mayor que la cantidad de tiempo que se tarda en ejecutar la consulta y la instrucción posterior al sondeo (si se especifica una) en la base de datos de Oracle más la cantidad de tiempo que tarda el cliente en procesar los datos de consulta y devolver el mensaje de respuesta de sondeo. 500 Obligatorio. Si no se establece explícitamente, se aplicará el valor predeterminado.
PollingStatement Especifique cualquiera de las siguientes opciones:

- Instrucción SELECT de SQL que se debe ejecutar en la base de datos de Oracle. Esta instrucción debe incluir una cláusula FOR UPDATE. Para obtener información sobre la cláusula FOR UPDATE, vea Especificación de una cláusula FOR UPDATE en la instrucción de sondeo más adelante en este tema.

- Solicitar un mensaje para un procedimiento almacenado, una función o una función dentro de un paquete que desea sondear.
nulo Obligatorio. Al establecer PollingStatement en un valor no nulo, se habilita el sondeo.
SondearMientrasSeEncuentraDatos Especifica si el adaptador de base de datos de Oracle omite el intervalo de sondeo y sondea continuamente la base de datos de Oracle, si los datos están disponibles en la tabla que se está sondeando. Si no hay datos disponibles en la tabla, el adaptador revierte para ejecutar la instrucción SQL en el intervalo de sondeo especificado. Falso Obligatorio. Si no se establece explícitamente, se aplicará el valor predeterminado.
PostPollStatement Establézcalo en un bloque de código PL/SQL opcional ejecutado por el adaptador después de realizar la consulta, pero antes de que se devuelvan los datos de consulta al cliente. nulo Opcional. Si no se especifica ningún valor, no se ejecuta una instrucción post poll.

Nota:

Si usa el modelo de servicio WCF o el modelo de canal WCF, también debe establecer la propiedad de enlace AcceptCredentialsInUri .

Introduzca FOR UPDATE en la instrucción de sondeo.

Si usa una instrucción SELECT como instrucción de sondeo y ejecuta una instrucción posterior al sondeo que afecta a las filas especificadas en la instrucción SELECT, debe usar la cláusula FOR UPDATE en la instrucción polling. Especificar una cláusula FOR UPDATE garantiza que los registros seleccionados por la instrucción de sondeo estén bloqueados durante la transacción y que la instrucción posterior al sondeo pueda realizar las actualizaciones necesarias en ellas.

Precaución

Puede tener escenarios en los que, en el período de tiempo entre las instrucciones polling y post-poll, se agregan más registros a la tabla que cumplen la condición de la instrucción post-poll. En tales situaciones, la instrucción posterior al sondeo actualizaría todos los registros que cumplen la condición y no solo los registros seleccionados como parte de la instrucción de sondeo.

Si se especifica una instrucción posterior al sondeo y la instrucción de sondeo no contiene una cláusula FOR UPDATE, experimentará una de las dos condiciones siguientes:

  • Si TransactionIsolationLevel está establecido en ReadCommitted, la consulta posterior al sondeo no actualizará las filas seleccionadas.

  • Si TransactionIsolationLevel se establece en Serializable, se producirá la siguiente excepción del sistema de destino (Microsoft.ServiceModel.Channels.Common.TargetSystemException) cuando se ejecute la instrucción post-poll: "ORA-08177 no puede serializar el acceso para esta transacción". En tal caso, debe establecer la propiedad de enlace PollingRetryCount para definir el número de veces que desea que el adaptador vuelva a intentar la misma transacción.

    Para obtener instrucciones sobre cómo establecer el nivel de aislamiento de transacción, consulte Configuración del nivel de aislamiento de transacciones y el tiempo de espera de transacción con Oracle Database.

    Las instrucciones de sondeo y post-sondeo se ejecutan en una transacción si los clientes del adaptador han configurado el uso de transacciones y el valor de la propiedad de enlace UseAmbientTransaction se establece en True en el adaptador.

    Un ejemplo de una consulta de sondeo con la opción FOR UPDATE es:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE  

Escriba una cláusula NOWAIT en la instrucción de sondeo.

Es posible que tenga escenarios en los que los subprocesos concurrentes accedan a la tabla que está siendo sondeada, lo que lleva a demasiados conflictos en la tabla. Esto puede hacer que la consulta de sondeo se bloquee para obtener un bloqueo en las filas de la tabla. Si usa una instrucción SELECT como instrucción de sondeo, puede especificar una palabra clave NOWAIT junto con la palabra clave FOR UPDATE en la instrucción SELECT. Esto hará que la ejecución de la consulta de sondeo dentro del adaptador devuelva de inmediato si existen bloqueos en filas que la consulta de sondeo intenta seleccionar. Normalmente, Oracle produce una excepción en estas condiciones. De nuevo, los clientes del adaptador pueden utilizar la propiedad de enlace PollingInterval para especificar el intervalo de tiempo tras el cual deben volver a intentar sondear los datos.

Un ejemplo de una consulta de sondeo con la opción NOWAIT es:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE NOWAIT  

Escriba una cláusula SKIP LOCKED en la instrucción de sondeo.

Es posible que tenga escenarios en los que, debido a subprocesos simultáneos que acceden a la tabla que se está sondeando, algunas filas del conjunto de resultados de la cláusula WHERE especificada en la consulta de sondeo están bloqueadas. Por ejemplo, la consulta de sondeo devuelve 6 filas de una tabla; 4 de estas 6 filas ya están bloqueadas debido a alguna otra transacción. En este caso, es posible que desee especificar una palabra clave SKIP LOCKED junto con la palabra clave FOR UPDATE que indica a la base de datos que intente bloquear las filas especificadas por la cláusula WHERE y omitir las filas que se encuentran que ya están bloqueadas. Las filas desbloqueadas de la cláusula WHERE se bloquean durante la transacción, y la instrucción posterior al proceso de sondeo puede realizar las actualizaciones necesarias en ellas para que estas filas no se sondeen nuevamente. Esto garantiza que no tiene que esperar a recibir los mensajes de sondeo hasta que se desbloqueen todas las filas especificadas por la cláusula WHERE.

La palabra clave SKIP LOCKED es útil en un escenario donde hay clientes de adaptadores en varios equipos que interrogan la misma tabla en una base de datos. Puede equilibrar la carga entre los clientes del adaptador mediante la configuración de la operación de sondeo de tal manera que reciba mensajes de cambio de datos basados en sondeo para las filas especificadas por la cláusula WHERE que se desbloquean en ese momento y, a continuación, actualice la fila para asegurarse de que un mensaje de cambio de datos basado en sondeo recibe un cliente del adaptador, los demás clientes no reciben el mismo mensaje.

Un ejemplo de una consulta de sondeo con la opción SKIP LOCKED es:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE SKIP LOCKED  

Soporte para la entrega ordenada (FIFO)

En un entorno de producción, el sondeo se puede usar para supervisar los cambios de datos en la base de datos de Oracle. El cliente del adaptador recibe estos mensajes modificados por datos mediante el adaptador de Oracle Database. En función de los escenarios empresariales, es fundamental que el cliente del adaptador reciba los mensajes de cambios de datos en el orden correcto.

El adaptador de Base de Datos de Oracle admite la entrega ordenada o primero en entrar, primero en salir (FIFO) para mantener el orden en el que se reciben los mensajes de la base de datos de Oracle. Estas son algunas consideraciones relacionadas con la compatibilidad con escenarios de entrada de FIFO para el adaptador de base de datos de Oracle.

  • Si una orquestación consume el mensaje, la orquestación debe tener establecida la entrega ordenada para los mensajes procedentes del puerto de recepción del adaptador de Oracle Database.

  • Si un puerto de envío en un escenario de enrutamiento basado en contenido consume el mensaje, el puerto de envío debe tener establecida la entrega ordenada para los mensajes procedentes del puerto de recepción del adaptador de base de datos Oracle.

    El adaptador de WCF-Custom o WCF-OracleDB tiene una propiedad Suspender mensaje de solicitud en caso de error que especifica si se debe suspender el mensaje de solicitud que produce un error en el procesamiento de entrada. Esta propiedad se puede establecer en la pestaña Mensajes del WCF-Custom o WCF-OracleDB puerto de recepción en la sección Control de errores . En la tabla siguiente se enumeran los escenarios que describen cómo se procesan los mensajes entrantes en función de si esta propiedad está establecida y el estado del suscriptor del mensaje (orquestación o puerto).

Propiedad del puerto Suscriptor en estado no enlistado Suscriptor en estado alistado pero detenido
Suspender mensaje de solicitud en caso de fallo propiedad NO configurada - El informe de errores de enrutamiento se genera como un mensaje suspendido (mensaje no reanudable)

- El mensaje actual no está suspendido

- La consulta posterior a la encuesta no se ejecuta porque la transacción se anula. Por lo tanto, el sondeo se repite y vuelve a obtener las filas.

- Errores notificados en el registro de eventos para describir lo que ha ocurrido.
- No se considera un "Error". No hay ningún mensaje de error en el registro de eventos.

- El mensaje real se coloca en la cola suspendida (reanudable).

- Cuando se inicia el puerto de suscripción o la orquestación, los mensajes se reanudan automáticamente. Si se ha configurado una entrega programada para el suscriptor, se respetará.

- Los mensajes también se pueden reanudar manualmente.
La propiedad de suspender el mensaje de solicitud en caso de fallo está activada - El informe de errores de enrutamiento se genera como un mensaje suspendido (mensaje no reanudable)

- El mensaje actual también está suspendido

- La consulta posterior al sondeo no se ejecuta cuando se anula la transacción. Por lo tanto, el sondeo repite el proceso y recupera las filas de nuevo.

- Errores notificados en el registro de eventos para describir lo que ha ocurrido.
- No se considera un "Error". No hay ningún mensaje de error en el registro de eventos.

- El mensaje actual se coloca en la cola suspendida (reanudable).

- Cuando se inicia el puerto de suscripción o la orquestación, los mensajes se reanudan automáticamente. Si se establece la entrega programada en el suscriptor, se respetará.

- Los mensajes también se pueden reanudar manualmente.

Consulte también

Desarrollo de aplicaciones de Oracle Database
Sondear base de datos de Oracle mediante BizTalk Server
Recibir mensajes de cambios de datos basados en sondeo en la base de datos Oracle mediante el modelo de servicio WCF
Recibir mensajes de cambios de datos basados en sondeo en la base de datos de Oracle mediante el modelo de canal de WCF