Sondear la base de datos de Oracle mediante procedimientos almacenados, funciones o procedimientos empaquetados y funciones
Puede configurar el adaptador de Oracle Database para recibir mensajes periódicos de cambio de datos mediante procedimientos almacenados, funciones o procedimientos empaquetados y funciones para sondear periódicamente la base de datos de Oracle. Puede especificar un procedimiento almacenado, una función o un procedimiento empaquetado y funcionar como una instrucción de sondeo que el adaptador ejecuta periódicamente para sondear la base de datos de Oracle.
Para habilitarlo, debe especificar determinadas propiedades de enlace en el adaptador de Oracle Database. También puede modificar el espacio de nombres de destino para la operación POLLINGSTMT estableciendo la propiedad PollingId en el URI de conexión. Para obtener más información, consulte Compatibilidad con la recepción de mensajes modificados por datos basados en sondeos en oracle Database y Recepción de mensajes modificados por datos basados en sondeo en el adaptador de base de datos de Oracle. Para obtener información sobre la estructura del mensaje SOAP para las operaciones de sondeo, vea Esquemas de mensaje para las operaciones de sondeo.
Configuración de una operación de sondeo con propiedades de enlace del adaptador de base de datos de Oracle
El adaptador de Oracle Database ejecuta la consulta de sondeo y cualquier bloque de código PL/SQL posterior al sondeo dentro de una transacción. En la tabla siguiente se resumen las propiedades de enlace del adaptador de Oracle Database que se usan para configurar el adaptador para recibir mensajes de cambio de datos. Debe especificar estas propiedades de enlace al configurar el puerto de recepción WCF-Custom o WCF-OracleDB en la consola de administración de BizTalk Server.
Binding (propiedad) | Descripción |
---|---|
InboundOperationType | Especifica si desea realizar la operación de sondeo o de entrada de notificación. El valor predeterminado es Sondeo. |
PolledDataAvailableStatement | Especifica la instrucción SQL que ejecuta el adaptador para determinar si hay datos disponibles para el sondeo. Solo si hay un registro disponible, se ejecutará el procedimiento almacenado especificado para la propiedad de enlace PollingStatement . |
PollingInterval | Especifica el intervalo, en segundos, en el que el adaptador de base de datos de Oracle ejecuta la instrucción especificada para la propiedad de enlace PolledDataAvailableStatement . El valor predeterminado es 500 segundos. El intervalo de sondeo determina el intervalo de tiempo entre sondeos sucesivos. Si la instrucción se ejecuta dentro del intervalo especificado, el adaptador se suspende durante el tiempo restante del intervalo. El valor predeterminado es SELECT 1 FROM DUAL , lo que implica que el adaptador debe continuar sondeando independientemente de si la tabla que se sondea tiene datos o no. |
PollingStatement | Especifica la instrucción de sondeo. Para sondear mediante un procedimiento almacenado, una función o una función empaquetadas, debe especificar todo el mensaje de solicitud para la operación correspondiente en esta propiedad de enlace. El mensaje de solicitud debe ser el mismo que se envía al adaptador para invocar las operaciones respectivas como una operación de salida. El valor predeterminado es null. Debe especificar un valor para la propiedad de enlace PollingStatement para habilitar el sondeo. La instrucción de sondeo solo se ejecuta si hay datos disponibles para el sondeo, que viene determinado por la propiedad de enlace PolledDataAvailableStatement . |
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. |
PostPollStatement | Especifica un bloque de instrucciones que se ejecuta después de que se ejecute la instrucción especificada por la propiedad de enlace PollingStatement . |
PollWhileDataFound | Especifica si el adaptador de Oracle Database omite el intervalo de sondeo y ejecuta continuamente la instrucción de sondeo, 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 de sondeo en el intervalo de sondeo especificado. El valor predeterminado es False. |
Para obtener una descripción más completa de estas propiedades, consulte Leer sobre las propiedades de enlace del adaptador de base de datos de Oracle. Para obtener una descripción completa de cómo usar el adaptador de Oracle Database para sondear la base de datos de Oracle, lea más.
Cómo muestra este tema el sondeo
En este tema se muestra cómo se puede sondear la base de datos de Oracle mediante un procedimiento almacenado. Cree un proyecto de BizTalk y genere el esquema para el procedimiento almacenado que desea usar para sondear la base de datos de Oracle. En este tema, usamos el procedimiento almacenado GET_ACTIVITYS para sondear la tabla ACCOUNTACTIVITY. Este procedimiento almacenado está disponible con el paquete ACCOUNT_PKG en el esquema SCOTT. Puede ejecutar los scripts SQL proporcionados con los ejemplos para crear estos objetos en la base de datos.
Nota
La orquestación de este tema sondea la tabla ACCOUNTACTIVITY, que es una tabla de base de datos creada mediante la ejecución de los scripts proporcionados con los ejemplos. Debe realizar procedimientos similares como se describe en este tema para sondear cualquier otra tabla.
Para demostrar una operación de sondeo, hacemos lo siguiente:
Especifique una instrucción SELECT para la propiedad de enlace PolledDataAvailableStatement para determinar dónde se sondea la tabla (ACCOUNTACTIVITY) tiene datos. En este ejemplo, puede establecer esta propiedad de enlace como:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
Esto garantiza que el adaptador ejecute la instrucción de sondeo solo cuando la tabla ACCOUNTACTIVITY tenga algunos registros.
Ejecute un procedimiento almacenado, GET_ACTIVITYS, proporcionando el mensaje de solicitud como parte de la propiedad de enlace PollingStatement . Este procedimiento almacenado recuperará todas las filas de la tabla ACCOUNTACTIVITY y obtendrá un mensaje de respuesta del adaptador.
EJECUTE un bloque PL/SQL como parte de la propiedad de enlace PostPollStatement . Esta instrucción moverá todos los datos de la tabla ACCOUNTACTIVITY a otra tabla de la base de datos. Una vez que esto suceda, la próxima vez que se ejecute PollingStatement , no capturará ningún dato y, por tanto, el procedimiento almacenado GET_ACTIVITYS devolverá un mensaje de respuesta vacío.
Hasta que se agreguen más datos a la tabla ACCOUNTACTIVITY, seguirá recibiendo mensajes de respuesta vacíos. Por lo tanto, debe volver a rellenar la tabla ACCOUNTACTIVITY con nuevos registros. Para ello, ejecute el script more_activity_data.sql proporcionado con los ejemplos. Después de ejecutar este script, la siguiente operación de sondeo capturará los nuevos registros insertados en la tabla.
Cómo recibir mensajes de cambio de datos de Oracle
Realizar una operación en una base de datos de Oracle mediante el adaptador de oracle Database con BizTalk Server implica las siguientes tareas de procedimientos descritas en Bloques de creación para desarrollar aplicaciones de BizTalk con Oracle Database. Para configurar el adaptador para sondear la base de datos de Oracle mediante un procedimiento almacenado:
Cree un proyecto de BizTalk y genere el esquema para el procedimiento almacenado que desea usar para el sondeo.
Cree un mensaje en el proyecto de BizTalk para recibir mensajes de la base de datos de Oracle.
Cree una orquestación para recibir mensajes de la base de datos de Oracle y guárdelas en una carpeta.
Compile e implemente el proyecto de BizTalk.
Configure la aplicación de BizTalk mediante la creación de puertos físicos de envío y recepción.
Importante
Para escenarios de sondeo entrante, siempre debe configurar un puerto de recepción unidireccional. No se admiten puertos de recepción bidireccionales para las operaciones entrantes.
Inicie la aplicación de BizTalk.
En este tema se proporcionan instrucciones para realizar estas tareas.
Generar esquema
Debe generar el esquema para la operación de GET_ACTIVITYS. Realice las tareas siguientes al generar el esquema mediante el complemento Consumir servicio de adaptador.
Seleccione el tipo de contrato como Servicio (operación de entrada).
Generar esquema para el procedimiento de GET_ACTIVITYS .
Para obtener más información sobre cómo generar el esquema, consulte Examinar, buscar y obtener metadatos para las operaciones de Oracle Database.
Definición de mensajes y tipos de mensajes
El esquema que generó anteriormente describe los "tipos" necesarios para los mensajes de la orquestación. Normalmente, un mensaje es una variable, el tipo para el que se define mediante el esquema correspondiente. Una vez generado el esquema, debe vincularlo a los mensajes de la vista Orquestación del proyecto de BizTalk.
Para este tema, debe crear un mensaje para recibir mensajes de Oracle.
Realice los pasos siguientes para crear mensajes y vincularlos al esquema.
Para crear mensajes y vincular al esquema
Agregue una orquestación al proyecto de BizTalk. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto de BizTalk, seleccione Agregar y, a continuación, haga clic en Nuevo elemento. Escriba un nombre para la orquestación de BizTalk y, a continuación, haga clic en Agregar.
Abra la ventana de vista de orquestación del proyecto de BizTalk, si aún no está abierta. Haga clic en Ver, seleccione Otras ventanas y, a continuación, haga clic en Vista de orquestación.
En la vista Orquestación, haga clic con el botón derecho en Mensajes y, a continuación, haga clic en Nuevo mensaje.
Haga clic con el botón derecho en el mensaje recién creado y, a continuación, seleccione Ventana Propiedades.
En el panel Propiedades de Message_1, haga lo siguiente:
Use Para hacer esto Identificador Escriba Receive. Tipo de mensaje En la lista desplegable, expanda Esquemas y seleccione Polling.OracleEBSBindingSchema, donde Polling es el nombre del proyecto de BizTalk. OracleEBSBindingSchema es el esquema de respuesta generado para el procedimiento almacenado GET_ACTIVITYS .
Importante: Dado que el sondeo es una operación unidireccional, el esquema generado por el adaptador no contiene un nodo de respuesta y, por lo tanto, solo hay un nodo raíz en el esquema. Si usa estos esquemas para un tipo de mensaje, debe identificar el esquema por el nombre de archivo del esquema generado.
Por ejemplo, si crea un esquema para una operación bidireccional, los nodos del archivo de esquema con un nombreOracleEBSBindingSchema
pueden tener un aspecto similar a "Request" y "Response". Si desea crear un mensaje en la orquestación que se asigna al esquema de solicitud, puede identificar el esquema en la lista buscandoOracleEBSBindingSchema.Request
. Sin embargo, en el caso de la operación de sondeo, porque el único nodo es "Poll", no es fácil identificar el esquema al que desea asignar porque los esquemas con nodos únicos no aparecen como <schemafilename>.<rootnodename>. En su lugar, estos esquemas solo aparecen en el nombre de archivo. En tal caso, la única manera de identificar el esquema es por el nombre de archivo del esquema, por ejemplo, OracleEBSBindingSchema.El Complemento de servicio de adaptador de consumo genera el esquema para las operaciones entrantes y salientes para el procedimiento almacenado GET_ACTIVITYS. Debe usar el esquema para la operación de entrada para:
Asigne el mensaje creado como parte de la orquestación.
Para recuperar la acción, debe especificar para la propiedad de enlace PollingAction en tiempo de ejecución.
Debe usar el esquema de la operación de salida para obtener el mensaje de solicitud que debe especificar como parte de la propiedad de enlace PollingStatement .
Configuración de la orquestación
Debe crear una orquestación de BizTalk para usar BizTalk Server para recibir mensajes de cambio de datos basados en sondeos de Oracle. En esta orquestación, el adaptador recibe la respuesta ejecutando el procedimiento almacenado para el que especificó el mensaje de solicitud como parte de la propiedad de enlace PollingStatement . El mensaje de respuesta del procedimiento almacenado se guarda en una ubicación FILE. Una orquestación típica para el sondeo de la base de datos de Oracle contendrá:
Recibir y enviar formas para recibir mensajes de Oracle y enviarlos a un puerto FILE, respectivamente.
Un puerto de recepción unidireccional para recibir mensajes de la base de datos de Oracle.
Importante
Para escenarios de sondeo de entrada, siempre debe configurar un puerto de recepción unidireccional. No se admiten puertos de recepción bidireccionales para las operaciones entrantes.
Un puerto de envío unidireccional para enviar respuestas de sondeo desde la base de datos de Oracle.
Una orquestación de ejemplo es similar a la siguiente.
Agregar formas de mensaje
Asegúrese de especificar las siguientes propiedades para cada una de las formas de mensaje. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje que se muestran en la orquestación mencionada.
Forma | Tipo de forma | Propiedades |
---|---|---|
ReceiveMessage | Recepción | - Establecer nombre en ReceiveMessage - Establecer Activar en True |
SaveMessage | Envío | - Establecer nombre en SaveMessage |
Adición de puertos
Asegúrese de especificar las siguientes propiedades para cada uno de los puertos lógicos. Los nombres enumerados en la columna Puerto son los nombres de los puertos como se muestra en la orquestación.
Port | Propiedades |
---|---|
OracleReceivePort | - Establecer el identificador en OracleReceivePort - Establecer tipo en OracleReceivePortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación para recibir |
SaveMessagePort | - Establecer identificador en SaveMessagePort - Establecer tipo en SaveMessagePortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en enviar |
Especificar mensajes para formas de acción y conectarse a puertos
En la tabla siguiente se especifican las propiedades y sus valores que se deben establecer para especificar mensajes para las formas de acción y para vincular los mensajes a los puertos. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje tal como se muestran en la orquestación mencionada anteriormente.
Forma | Propiedades |
---|---|
ReceiveMessage | - Establecer mensaje en Recibir - Establecer la operación en OracleReceivePort.Polling.Request |
SaveMessage | - Establecer mensaje en Recibir - Establecer operación en SaveMessagePort.Polling.Request |
Después de especificar estas propiedades, se conectan las formas y los puertos del mensaje y se completa la orquestación.
Ahora debe compilar la solución de BizTalk e implementarla en un BizTalk Server. Para obtener más información, vea Compilar y ejecutar orquestaciones).
Configuración de la aplicación de BizTalk
Después de implementar el proyecto de BizTalk, la orquestación que creó anteriormente aparece en el panel Orquestaciones de la consola de administración de BizTalk Server. Debe usar la consola de administración de BizTalk Server para configurar la aplicación. Para ver un tutorial, consulte Tutorial: Implementación de una aplicación básica de BizTalk.
La configuración de una aplicación implica:
Selección de un host para la aplicación.
Asignación de los puertos que creó en la orquestación a puertos físicos en la consola de administración de BizTalk Server. Para esta orquestación debe:
Defina una ubicación en el disco duro y un puerto FILE correspondiente donde la orquestación de BizTalk quitará los mensajes de Oracle. Estos mensajes serán en respuesta a la instrucción de sondeo que especifique para el puerto de recepción.
Defina una WCF-Custom física o WCF-OracleDB puerto de recepción unidireccional. Este puerto sondea la base de datos de Oracle. Para obtener información sobre cómo crear puertos de recepción, consulte Configuración manual de un enlace de puerto físico al adaptador de base de datos de Oracle. Asegúrese de especificar las siguientes propiedades de enlace para el puerto de recepción.
Binding (propiedad) Value InboundOperationType Establézcalo en Sondeo. PolledDataAvailableStatement En este ejemplo, establezca esta propiedad de enlace en:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
Esto garantiza que el adaptador ejecuta la instrucción de sondeo solo cuando la tabla ACCOUNTACTIVITY tiene algunos registros.PollingAction Recupere la acción de sondeo del esquema generado para el mensaje entrante para el procedimiento de GET_ACTIVITYS. En este ejemplo, establezca esta propiedad de enlace en http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/PollingPackage/ACCOUNT_PKG/GET_ACTIVITYS
.PollingStatement Para esta propiedad de enlace, especifique el mensaje de solicitud para invocar el procedimiento almacenado GET_ACTIVITYS. Puede obtener el mensaje de solicitud del esquema para la operación de salida generada por el complemento Consumir servicio adaptador. Debe proporcionar todo el mensaje XML como entrada para esta propiedad de enlace. En este ejemplo, establezca esta propiedad de enlace en:
<GET_ACTIVITYS xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACTIVITY"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>
El GET_ACTIVITYS procedimiento almacenado toma un CURSOR REF de entrada como parámetro.PostPollStatement Especifique la instrucción posterior al sondeo para mover todos los datos de la tabla ACCOUNTACTIVITY a otra tabla. En este ejemplo, establezca esta propiedad de enlace en:
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
Para obtener más información sobre las distintas propiedades de enlace, vea Leer sobre las propiedades de enlace del adaptador de base de datos de Oracle.
Nota
Se recomienda configurar el nivel de aislamiento de transacción y el tiempo de espera de la transacción mientras se realizan operaciones entrantes mediante el adaptador de Oracle Database. Para ello, agregue el comportamiento del servicio al configurar el puerto de recepción. Para obtener instrucciones sobre cómo agregar el comportamiento del servicio, consulte Configuración del nivel de aislamiento de transacción y el tiempo de espera de la transacción.
Iniciar la aplicación
Debe iniciar la aplicación de BizTalk para sondear la base de datos de Oracle. Para obtener instrucciones sobre cómo iniciar una aplicación de BizTalk, vea Cómo iniciar una orquestación.
En esta fase, asegúrese de que:
El WCF-Custom o WCF-OracleDB puerto de recepción unidireccional, que sondea Oracle mediante el procedimiento almacenado especificado para la propiedad de enlace PollingStatement , se está ejecutando.
El puerto de envío FILE, que recibe mensajes de la base de datos de Oracle, se está ejecutando.
La orquestación de BizTalk para la operación se está ejecutando.
Ejecución de la operación
Después de ejecutar la aplicación, se realiza el siguiente conjunto de acciones, en la misma secuencia:
El adaptador ejecuta polledDataAvailableStatement , que devuelve un valor positivo que indica el adaptador para ejecutar la instrucción especificada para la propiedad de enlace PollingStatement .
El adaptador ejecuta el procedimiento almacenado GET_ACTIVITYS especificado para la propiedad de enlace PollingStatement y devuelve todas las filas de la tabla ACCOUNTACTIVITY. La respuesta de la base de datos de Oracle es similar a la siguiente:
<?xml version="1.0" encoding="utf-8" ?> <GET_ACTIVITYS xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/PollingPackage/ACCOUNT_PKG"> <OUTRECS> <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS"> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-06-21T15:52:19</TRANSDATE> <PROCESSED>n</PROCESSED> </OUTRECSRecord> <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS"> ...... ...... </OUTRECSRecord> ...... ...... </OUTRECS> </GET_ACTIVITYS>
El adaptador ejecuta la instrucción post-poll, que mueve todos los datos de la tabla ACCOUNTACTIVITY a otra tabla.
Después del intervalo de sondeo, el adaptador vuelve a ejecutar PolledDataAvailableStatement. Dado que la tabla ACCOUNTACTIVITY no tiene registros ahora, PolledDataAvailableStatement no devuelve un valor positivo y, por tanto, el adaptador no ejecuta la instrucción especificada para la propiedad de enlace PollingStatement . Como resultado, el cliente del adaptador no obtiene ningún mensaje de sondeo.
El cliente del adaptador no obtendrá más mensajes de sondeo hasta que algunos registros se inserte explícitamente en la tabla ACCOUNTACTIVITY. Para insertar más registros, puede ejecutar el script more_activity_data.sql proporcionado con los ejemplos. Después de ejecutar este script, la próxima vez que se ejecute PolledDataAvailableStatement , devuelve un valor positivo. Como resultado, el adaptador ejecuta de nuevo la instrucción de sondeo y los clientes del adaptador reciben un mensaje de sondeo.
Nota
El adaptador de Oracle Database seguirá sondeando hasta que deshabilite explícitamente el puerto de recepción de la consola de administración de BizTalk Server.
Prácticas recomendadas
Después de implementar y configurar el proyecto de BizTalk, puede exportar los valores de configuración a un archivo XML denominado archivo de enlaces. Una vez que genere un archivo de enlaces, puede importar los valores de configuración del archivo para que no sea necesario crear los puertos de envío y recibir puertos para la misma orquestación. Para obtener más información sobre el enlace de archivos, consulte Reutilización de enlaces del adaptador de base de datos de Oracle.