Condividi tramite


Ricevere messaggi di modifica dei dati basati sul polling nell'adapter Oracle Database

L'adapter Microsoft BizTalk per Oracle Database supporta la ricezione di messaggi di modifica dei dati basati sul polling eseguendo il polling del database Oracle. L'adapter recapita i messaggi all'applicazione tramite:

  • Esecuzione di una query SQL SELECT per determinare se i dati sono disponibili per il polling. È possibile configurare l'adapter per eseguire periodicamente o continuamente la query SQL SELECT.

  • Esecuzione di una query SQL SELECT su una tabella o vista Oracle o sull'esecuzione di stored procedure, funzioni o funzioni in pacchetto.

  • Esecuzione di un blocco di codice PL/SQL post-poll facoltativo nel database Oracle. Questo blocco di codice viene spesso usato per aggiornare un campo sui record sottoposti a query nella destinazione o per spostare i record sottoposti a query in un'altra tabella o vista.

  • La restituzione dei risultati della query avviene tramite un set di risultati ottenuto richiamando l'operazione POLLINGSTMT oppure tramite stored procedure, funzioni, o procedure e funzioni pacchettizzate che sono esposte come operazioni di polling.

    L'adapter esegue tutte queste operazioni all'interno di una transazione Oracle.

    L'adapter consente inoltre di ricevere messaggi di modifica dei dati per più artefatti Oracle nella stessa applicazione esponendo un PollingId parametro nell'URI di connessione. Questo parametro modifica lo spazio dei nomi di destinazione dell'operazione POLLINGSTMT.

Modificare lo spazio dei nomi di destinazione di POLLINGSTMT

È possibile modificare lo spazio dei nomi di destinazione dell'operazione POLLINGSTMT impostando il PollingId parametro della stringa di query nell'URI di connessione. Se un PollingId viene specificato nell'URI di connessione, l'adapter Oracle Database aggiunge la stringa specificata nel parametro PollingId allo spazio dei nomi di destinazione predefinito per l'operazione POLLINGSTMT: http://microsoft.lobservices.oracledb/2007/03/POLLINGSTMT. L'azione del messaggio dell'operazione POLLINGSTMT non viene modificata.

Ad esempio, se viene specificato l'URI di connessione seguente:

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

Lo spazio dei nomi di destinazione è il seguente:

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

Attenzione

Questo esempio o materiale sussidiario fa riferimento a informazioni riservate, ad esempio una stringa di connessione o un nome utente e una password. Non inserire mai questi valori come valori codificati nel codice e assicurati di proteggere i dati riservati utilizzando l'autenticazione più sicura disponibile. Per altre informazioni, consultare la documentazione seguente:

Assegnando uno spazio dei nomi univoco per ogni operazione POLLINGSTMT, puoi ricevere messaggi di modifica dei dati per più tabelle e viste Oracle nell'applicazione.

Per altre informazioni sull'URI di connessione dell'adapter Oracle Database, vedere Creare l'URI di connessione di Oracle Database.

Ricevere messaggi di modifica dei dati usando le proprietà di binding

Configura l'adapter Oracle Database per ricevere messaggi di modifica dei dati impostando alcune o tutte le seguenti proprietà di binding.

Proprietà di associazione Valore Impostazione predefinita Obbligatorio/Facoltativo
InboundOperationType Assicurarsi che il valore sia impostato su Polling. Sondaggio Obbligatorio. Se non è impostato in modo esplicito, verrà applicato il valore predefinito.
PolledDataAvailableStatement Specificare l'istruzione SELECT eseguita per determinare se i dati sono disponibili per il polling per una tabella specifica. L'istruzione specificata deve restituire un set di risultati costituito da righe e colonne. Il valore nella prima cella del set di risultati indica se l'adattatore esegue il valore specificato per la proprietà di associazione PollingStatement . Se la prima cella del risultato contiene un valore positivo, l'adapter esegue l'istruzione di polling. Ad esempio, un'istruzione valida per questa proprietà di binding sarà:

Select * from <table_name>

Nota: Non è necessario specificare stored procedure per questa proprietà di associazione. Inoltre, questa istruzione non deve modificare il database Oracle sottostante.
SELEZIONARE 1 DA DOPPIA Obbligatorio. Se non impostato in modo esplicito, verrà applicato il valore predefinito, il che implica che l'adattatore deve continuare il polling indipendentemente dal fatto che la tabella di cui viene eseguito il polling disponga o meno di dati.
PollingAction Specifica l'azione per l'operazione di polling. È possibile determinare l'azione di polling per un'operazione specifica dai metadati generati per l'operazione usando il componente aggiuntivo Consume Adapter Service. nullo Facoltativo per le operazioni di polling su tabelle e viste utilizzando l'istruzione SELECT.
PollingInterval Imposta l'intervallo, espresso in secondi, in cui si desidera che l'adattatore interroghi il database Oracle. Questa proprietà specifica l'intervallo di polling e il timeout della transazione di polling. Il valore deve essere maggiore del tempo necessario per eseguire la query e l'istruzione post-poll (se specificata) nel database Oracle e il tempo necessario per elaborare i dati della query e restituire il messaggio di risposta di polling. 500 Obbligatorio. Se non è impostato in modo esplicito, verrà applicato il valore predefinito.
PollingStatement Specificare una delle opzioni seguenti:

- Istruzione SQL SELECT che deve essere eseguita sul database Oracle. Questa istruzione deve includere una clausola FOR UPDATE. Per informazioni sulla clausola FOR UPDATE, vedere Specifica di una clausola FOR UPDATE nell'istruzione di polling più avanti in questo argomento.

- Richiedere un messaggio per una stored procedure, una funzione o una procedura all'interno di un pacchetto di cui si desidera eseguire un sondaggio.
nullo Obbligatorio. L'impostazione di PollingStatement su un valore non Null consente il polling.
PollWhileDataFound Specifica se l'adattatore Oracle Database ignora l'intervallo di polling e continua a eseguire il polling del database Oracle, se i dati sono disponibili nella tabella di cui viene eseguito il polling. Se nella tabella non sono disponibili dati, l'adattatore torna a eseguire l'istruzione SQL all'intervallo di polling specificato. Falso Obbligatorio. Se non è impostato in modo esplicito, verrà applicato il valore predefinito.
PostPollStatement Imposta un blocco di codice PL/SQL facoltativo che viene eseguito dall'adapter dopo l'esecuzione della query, ma prima che i dati della query vengano restituiti al client. nullo Opzionale. Se non viene specificato alcun valore, non viene eseguita un'istruzione post poll.

Annotazioni

Se si usa il modello di servizio WCF o il modello di canale WCF, è necessario impostare anche la proprietà di associazione AcceptCredentialsInUri .

Immettere "FOR UPDATE" nell'istruzione di polling

Se si usa un'istruzione SELECT come istruzione di polling ed è in esecuzione un'istruzione post-poll che influisce sulle righe specificate nell'istruzione SELECT, è necessario utilizzare la clausola FOR UPDATE nell'istruzione di polling. Specificando una clausola FOR UPDATE, i record selezionati dall'istruzione di polling vengono bloccati durante la transazione, permettendo all'istruzione successiva al polling di eseguire eventuali aggiornamenti necessari.

Attenzione

È possibile avere scenari in cui, nell'intervallo di tempo tra le dichiarazioni di polling e quelle post-poll, vengono aggiunti più record alla tabella che soddisfano la condizione della dichiarazione post-poll. In tali situazioni, l'istruzione post-sondaggio aggiorna tutti i record che soddisfano la condizione e non solo i record selezionati come parte dell'istruzione di sondaggio.

Se viene specificata un'istruzione post-poll e l'istruzione di polling non contiene una clausola FOR UPDATE, si verifica una delle due condizioni seguenti:

  • Se TransactionIsolationLevel è impostato su ReadCommitted, la query post-poll non aggiornerà le righe selezionate.

  • Se TransactionIsolationLevel è impostato su Serializable, l'eccezione di sistema di destinazione seguente (Microsoft.ServiceModel.Channels.Common.TargetSystemException) si verificherà quando viene eseguita l'istruzione post-poll: "ORA-08177 non può serializzare l'accesso per questa transazione". In questo caso, è necessario impostare la proprietà di associazione PollingRetryCount per definire il numero di tentativi di ripetizione della stessa transazione da parte dell'adattatore.

    Per istruzioni su come impostare il livello di isolamento delle transazioni, vedere Configurare il livello di isolamento delle transazioni e il timeout delle transazioni con Oracle Database.

    Le istruzioni di polling e post-poll vengono eseguite in una transazione se i client dell'adapter sono configurati per l'utilizzo delle transazioni e il valore della proprietà di associazione UseAmbientTransaction è impostato su True nell'adapter.

    Un esempio di query di polling con l'opzione FOR UPDATE è:

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

Immettere una clausola NOWAIT nell'istruzione di polling

Potrebbero verificarsi scenari in cui i thread simultanei accedono alla tabella di cui viene eseguito il polling, causando troppi conflitti nella tabella. Ciò può causare il blocco della query di polling per ottenere un accesso esclusivo sulle righe della tabella. Se si usa un'istruzione SELECT come istruzione di polling, è possibile specificare una parola chiave NOWAIT insieme alla parola chiave FOR UPDATE nell'istruzione SELECT. In questo modo, l'esecuzione della query di polling all'interno dell'adapter verrà restituita immediatamente se sono presenti blocchi sulle righe che la query di polling sta tentando di selezionare. Un'eccezione viene in genere generata da Oracle in tali condizioni. Anche in questo caso, i client adapter possono utilizzare la proprietà di associazione PollingInterval per specificare l'intervallo di tempo dopo il quale i client dell'adapter devono riprovare a eseguire il polling dei dati.

Un esempio di query di polling con l'opzione NOWAIT è:

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

Immettere una clausola SKIP LOCKED nell'istruzione di polling

È possibile che si verifichino scenari in cui a causa di thread simultanei che accedono alla tabella di cui viene eseguito il polling, alcune righe nel set di risultati della clausola WHERE specificata nella query di polling sono bloccate. Ad esempio, la query di polling restituisce 6 righe da una tabella; 4 di queste 6 righe sono già bloccate a causa di un'altra transazione. In questo caso, è possibile specificare una parola chiave SKIP LOCKED insieme alla parola chiave FOR UPDATE che indica al database di tentare di bloccare le righe specificate dalla clausola WHERE e di ignorare le righe trovate già bloccate. Le righe sbloccate nella clausola WHERE vengono bloccate durante la transazione e l'istruzione post-poll può eseguire eventuali aggiornamenti necessari su di esse in modo che queste righe non vengano nuovamente sottoposte a polling. In questo modo non è necessario attendere di ricevere i messaggi di polling fino a quando non vengono sbloccate tutte le righe specificate dalla clausola WHERE.

La parola chiave SKIP LOCKED è utile in uno scenario in cui sono presenti client adattatore su più computer che eseguono il polling della stessa tabella in un database. È possibile bilanciare il carico tra i client dell'adattatore configurando l'operazione di polling in modo da ricevere messaggi di modifica dei dati basati sul polling per le righe specificate dalla clausola WHERE sbloccate in quel momento e quindi aggiornare la riga per assicurarsi che se un messaggio di modifica dei dati basato sul polling venga ricevuto da un client dell'adapter, gli altri client non ricevono lo stesso messaggio.

Un esempio di query di polling con l'opzione SKIP LOCKED è:

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

Supporto per il recapito ordinato (FIFO)

In un ambiente di produzione è possibile usare il polling per monitorare le modifiche dei dati nel database Oracle. Questi messaggi di aggiornamento dati vengono ricevuti dal client dell'adattatore utilizzando l'adattatore Oracle Database. Sulla base degli scenari aziendali, può essere fondamentale che i messaggi di modifica dei dati vengano ricevuti dal client dell'adattatore nell'ordine corretto.

L'adattatore Oracle Database supporta la consegna ordinata o FIFO (*first-in-first-out*) per mantenere l'ordine in cui i messaggi vengono ricevuti dal database Oracle. Di seguito sono riportate alcune considerazioni relative al supporto per gli scenari in ingresso FIFO per l'adapter Oracle Database.

  • Se il messaggio viene utilizzato da un'orchestrazione, l'orchestrazione deve avere la consegna ordinata impostata per i messaggi provenienti dalla porta di ricezione dell'adapter Oracle Database.

  • Se il messaggio viene consumato da una porta di invio (in uno scenario di routing basato sul contenuto), la porta di invio deve avere l'impostazione di recapito ordinato per i messaggi provenienti dalla porta di ricezione dell'adattatore del database Oracle.

    L'adattatore WCF-Custom o WCF-OracleDB dispone di una proprietà Suspend request message on failure che specifica se sospendere il messaggio di richiesta che non riesce l'elaborazione in ingresso. Questa proprietà può essere impostata nella scheda Messaggi del WCF-Custom o WCF-OracleDB porta di ricezione nella sezione Gestione degli errori . Nella tabella seguente sono elencati gli scenari che descrivono come vengono elaborati i messaggi in ingresso in base all'impostazione di questa proprietà e allo stato del sottoscrittore del messaggio (orchestrazione o porta).

Proprietà Port Sottoscrittore in stato non elencato Sottoscrittore nello stato Elencato ma Fermato
Proprietà "Sospendi richiesta su errore" NON impostata - Il report di errore di routing è generato come sospeso (messaggio non ripristinabile)

- Il messaggio attuale non è sospeso

- La query dopo il sondaggio non viene eseguita poiché la transazione viene interrotta. Di conseguenza, il polling si ripete e recupera nuovamente le righe.

- Errori segnalati nel registro eventi per descrivere cosa è accaduto.
- Non considerato un "errore". Nel registro eventi non sono presenti messaggi di errore.

- Il messaggio effettivo viene inserito nella coda sospesa (ripristinabile).

- All'avvio della porta di sottoscrizione o dell'orchestrazione, i messaggi vengono ripresi automaticamente. Se la consegna programmata è impostata sull'abbonato, verrà rispettata.

- I messaggi possono anche essere ripresi manualmente.
Sospendi il messaggio di richiesta in caso di errore proprietà IMPOSTATA - Il report di errore di routing è generato come sospeso (messaggio non ripristinabile)

- Anche il messaggio effettivo viene sospeso

- La query dopo il sondaggio non viene eseguita poiché la transazione viene interrotta. Di conseguenza, il polling si ripete e recupera nuovamente le righe.

- Errori segnalati nel registro eventi per descrivere cosa è accaduto.
- Non considerato un "errore". Nel registro eventi non sono presenti messaggi di errore.

- Il messaggio effettivo viene inserito nella coda sospesa (ripristinabile).

- All'avvio della porta di sottoscrizione o dell'orchestrazione, i messaggi vengono ripresi automaticamente. Se la consegna programmata è impostata sull'abbonato, verrà rispettata.

- I messaggi possono anche essere ripresi manualmente.

Vedere anche

Sviluppare applicazioni Oracle Database
Eseguire il polling di Oracle Database con BizTalk Server
Ricevere messaggi di modifica dei dati basati sul polling nel database Oracle usando il modello di servizio WCF
Ricevere messaggi di modifica dei dati basati sul polling nel database Oracle usando il modello di canale WCF