Recepción de mensajes modificados por datos basados en sondeo en el adaptador de Oracle Database
El adaptador de Microsoft BizTalk para la 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 empaquetados y funciones.
Ejecutar un bloque de código PL/SQL posterior al sondeo opcional 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 los resultados de la consulta en 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 en PollingId
el URI de conexión, el adaptador de Oracle Database anexa la cadena especificada en el PollingId
parámetro al espacio de nombres de destino predeterminado para la operación POLLINGSTMT: http://microsoft.lobservices.oracledb/2007/03/POLLINGSTMT
. La acción de mensaje de la operación POLLINGSTMT no se modifica.
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 será http:/microsoft.lobservices.oracledb/2007/03/POLLINGSTMTAcctActivity
.
Al proporcionar un espacio de nombres único para cada operación POLLINGSTMT, puede recibir mensajes modificados por datos para varias tablas y vistas de Oracle en la aplicación.
Para obtener más información sobre el URI de conexión del adaptador de base de datos de Oracle, consulte Creación del URI de conexión de Oracle Database.
Recepción de mensajes modificados por datos mediante propiedades de enlace
Configure el adaptador de Oracle Database para recibir mensajes modificados por datos estableciendo algunas o todas las siguientes propiedades de enlace.
Binding (propiedad) | Value | Valor predeterminado | Obligatorio/opcional |
---|---|---|---|
InboundOperationType | Asegúrese de que el valor está establecido en Sondeo. | Sondeo | Necesario. 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 instrucción válida para esta propiedad de enlace será: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 | Necesario. 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 | Especifica 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 genere para la operación mediante el complemento Consumir servicio de adaptador. | null | 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 el tiempo que tarda el cliente en procesar los datos de consulta y devolver el mensaje de respuesta de sondeo. | 500 | Necesario. 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 Especificar 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. |
null | Necesario. Si se establece PollingStatement en un valor distinto de NULL, se habilita el sondeo. |
PollWhileDataFound | Especifica si el adaptador de Oracle Database 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 vuelve a ejecutar la instrucción SQL en el intervalo de sondeo especificado. | False | Necesario. 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. | null | 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 .
Escriba 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 de sondeo. 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 de sondeo y posteriores al sondeo, se agregan más registros a la tabla que cumplen la condición de la instrucción posterior al sondeo. 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 posterior al sondeo: "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 transacción y el tiempo de espera de la transacción con Oracle Database.
Las instrucciones de sondeo y posteriores al sondeo se ejecutan en una transacción si los clientes del adaptador han configurado para usar 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 simultáneos accedan a la tabla que se está sondeando, lo que provoca demasiadas contenciones 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 inmediatamente si hay bloqueos en las filas que la consulta de sondeo está intentando seleccionar. Por lo general, Oracle produce una excepción en estas condiciones. De nuevo, los clientes del adaptador pueden usar la propiedad de enlace PollingInterval para especificar el intervalo de tiempo después del cual los clientes del adaptador deben reintentar para 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án 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 sondeo puede realizar las actualizaciones necesarias en ellas para que estas filas no se vuelvan a sondear. Esto garantiza que no tiene que esperar a recibir los mensajes de sondeo hasta que se desbloquean todas las filas especificadas por la cláusula WHERE.
La palabra clave SKIP LOCKED es útil en un escenario en el que tiene clientes de adaptador en varios equipos que sondean la misma tabla en una base de datos. Puede equilibrar la carga entre los clientes del adaptador configurando la operación de sondeo de forma 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 si un cliente adaptador recibe un mensaje de cambio de datos basado en sondeo, 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
Compatibilidad con 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, puede ser fundamental que el cliente del adaptador reciba los mensajes modificados por los datos en el orden correcto.
El adaptador de Oracle Database admite la entrega ordenada o el 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 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 enrutamiento basado en contenido) consume el mensaje, el puerto de envío debe tener establecido la entrega ordenada para los mensajes procedentes del puerto de recepción del adaptador de Oracle Database.
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 entrante. 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 se establece y el estado del suscriptor del mensaje (orquestación o puerto).
Port, propiedad | Suscriptor en estado no registrado | Suscriptor en estado Inscrito pero Detenido |
---|---|---|
Suspender mensaje de solicitud en la propiedad NOT set | - El informe de errores de enrutamiento se genera como un mensaje suspendido (mensaje no reanudable) - El mensaje real no está suspendido - La consulta posterior al sondeo no se ejecuta a medida que se anula la transacción. Por lo tanto, el sondeo se repite 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 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 la entrega ordenada se establece en el suscriptor, se respetará. - Los mensajes también se pueden reanudar manualmente. |
Suspender el mensaje de solicitud en la propiedad is set | - El informe de errores de enrutamiento se genera como un mensaje suspendido (mensaje no reanudable) - El mensaje real también está suspendido. - La consulta posterior al sondeo no se ejecuta a medida que se anula la transacción. Por lo tanto, el sondeo se repite 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 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 la entrega ordenada se establece en el suscriptor, se respetará. - Los mensajes también se pueden reanudar manualmente. |
Consulte también
Desarrollar aplicaciones de base de datos de Oracle
Sondear la base de datos de Oracle mediante BizTalk Server
Recepción de mensajes modificados por datos basados en sondeo en oracle Database mediante el modelo de servicio WCF
Recepción de mensajes modificados por datos basados en sondeo en la base de datos de Oracle mediante el modelo de canal WCF