Condividi tramite


Ricevere messaggi modificati sui dati basati sul polling nell'adapter di Database Oracle

L'adapter Microsoft BizTalk per Oracle Database supporta la ricezione di messaggi modificati sui dati basati sul polling eseguendo il polling del database Oracle. L'adattatore recapita i messaggi all'applicazione in base a:

  • 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 una vista Oracle o l'esecuzione di stored procedure, funzioni o procedure e 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 nei record sottoposti a query nella destinazione o per spostare i record query in un'altra tabella o in un'altra vista.

  • Restituisce i risultati della query in un set di risultati richiamando l'operazione POLLINGSTMT o le stored procedure, le funzioni o le funzioni in pacchetto 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 stringa di query nell'URI di connessione. Se viene PollingId specificato nell'URI di connessione, l'adapter Oracle Database aggiunge la stringa specificata nel PollingId parametro 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 sarà http:/microsoft.lobservices.oracledb/2007/03/POLLINGSTMTAcctActivity.

Fornendo uno spazio dei nomi univoco per ogni operazione POLLINGSTMT, è possibile ricevere messaggi modificati per più tabelle e visualizzazioni Oracle nell'applicazione.

Per altre informazioni sull'URI di connessione della scheda di database Oracle, vedere Creare l'URI di connessione di Oracle Database.

Ricevere messaggi modificati dai dati usando le proprietà di associazione

È possibile configurare l'adapter Di database Oracle per ricevere messaggi modificati dai dati impostando alcune o tutte le proprietà di associazione seguenti.

Binding, proprietà valore Predefinito Obbligatorio/facoltativo
InboundOperationType Assicurarsi che il valore sia impostato su Polling. Polling Obbligatorio. Se non è impostato in modo esplicito, il valore predefinito verrà applicato.
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'adapter 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 associazione sarà:

Select * from <table_name>

Nota: Non è necessario specificare stored procedure per questa proprietà di associazione. Questa istruzione non deve inoltre modificare il database Oracle sottostante.
SELEZIONARE 1 DA DUAL Obbligatorio. Se non è impostato in modo esplicito, il valore predefinito verrà applicato, che implica che l'adapter debba continuare a eseguire il polling indipendentemente dal fatto che la tabella sottoposta a polling abbia dati o meno.
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 Del servizio adapter. Null Facoltativo per le operazioni di polling su tabelle e viste usando l'istruzione SELECT.
PollingInterval Impostare sull'intervallo, in secondi, in cui si vuole che l'adattatore esegue una query sul 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 il client per elaborare i dati della query e restituire il messaggio di risposta di polling. 500 Obbligatorio. Se non è impostato in modo esplicito, il valore predefinito verrà applicato.
PollingStatement Specificare uno dei seguenti elementi:

- Istruzione SQL SELECT che deve essere eseguita nel 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 polling più avanti in questo argomento.

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

Nota

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

Immettere un FOR UPDATE nell'istruzione di polling

Se si usa un'istruzione SELECT come istruzione polling ed è in esecuzione un'istruzione post-poll che influisce sulle righe specificate nell'istruzione SELECT, è necessario usare la clausola FOR UPDATE nell'istruzione polling. Se si specifica una clausola FOR UPDATE, i record selezionati dall'istruzione di polling vengono bloccati durante la transazione e che l'istruzione post-poll può eseguire eventuali aggiornamenti necessari.

Attenzione

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

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 tal caso, è necessario impostare la proprietà di associazione PollingRetryCount per definire il numero di volte in cui si vuole che l'adapter riprova la stessa transazione.

    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'uso 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 polling

È possibile che si verifichino scenari in cui i thread simultanei accedono alla tabella sottoposta a polling, causando un numero eccessivo di contese nella tabella. Ciò può causare il blocco della query di polling per ottenere un blocco nelle righe della tabella. Se si usa un'istruzione SELECT come istruzione 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 condizioni di questo tipo. Di nuovo, i client della scheda possono usare la proprietà di associazione PollingInterval per specificare l'intervallo di tempo dopo il quale i client della scheda devono ripetere 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 polling

È possibile che si verifichino scenari in cui, a causa di thread simultanei che accedono alla tabella sottoposta a 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 tutte 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 essi in modo che queste righe non vengano nuovamente sottoposto a polling. Ciò garantisce che non sia necessario attendere la ricezione dei 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 adapter in 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 viene 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 la consegna ordinata (FIFO)

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

L'adattatore Oracle Database supporta il recapito ordinato 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 il recapito ordinato impostato per i messaggi provenienti dalla porta di ricezione dell'adapter Oracle Database.

  • Se il messaggio viene utilizzato da una porta di trasmissione (in uno scenario di routing basato sul contenuto), la porta di trasmissione deve avere impostato il recapito ordinato per i messaggi provenienti dalla porta di ricezione dell'adapter Oracle Database.

    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 ha esito negativo nell'elaborazione in ingresso. Questa proprietà può essere impostata nella scheda Messaggi della 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 arrivo in base al fatto che questa proprietà sia impostata e lo stato del sottoscrittore del messaggio (orchestrazione o porta).

Port - proprietà Sottoscrittore nello stato Non elencato Sottoscrittore nello stato Enlisted but Stopped
Sospensione del messaggio di richiesta per la proprietà di errore NON impostata - Il rapporto errori di routing viene generato come un messaggio sospeso (messaggio non ripristinabile)

- Messaggio effettivo non sospeso

- La query di post polling non viene eseguita quando viene interrotta la transazione. 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 il recapito ordinato è impostato nel sottoscrittore, verrà rispettato.

- I messaggi possono anche essere ripresi manualmente.
Sospendi messaggio di richiesta per la proprietà di errore IS impostata - Il rapporto errori di routing viene generato come un messaggio sospeso (messaggio non ripristinabile)

- Anche il messaggio effettivo viene sospeso

- La query di post polling non viene eseguita quando viene interrotta la transazione. 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 il recapito ordinato è impostato nel sottoscrittore, verrà rispettato.

- I messaggi possono anche essere ripresi manualmente.

Vedi anche

Sviluppare applicazioni per il database Oracle
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 modificati dei dati basati sul polling nel database Oracle usando il modello di canale WCF