Bagikan melalui


Menerima pesan perubahan data berbasis polling di adaptor Oracle Database

Adapter Microsoft BizTalk untuk Oracle Database mendukung penerimaan pesan perubahan data berbasis polling dengan melakukan polling pada database Oracle. Adaptor mengirimkan pesan ke aplikasi Anda dengan:

  • Menjalankan kueri SQL SELECT untuk menentukan apakah data tersedia untuk polling. Anda dapat mengonfigurasi adaptor untuk menjalankan kueri SQL SELECT secara berkala atau terus menerus.

  • Menjalankan kueri SQL SELECT terhadap tabel Oracle atau melihat atau menjalankan prosedur tersimpan, fungsi, atau prosedur dan fungsi yang dikemas.

  • Menjalankan blok kode PL/SQL pasca-polling opsional pada database Oracle. Blok kode ini sering digunakan untuk memperbarui bidang pada rekaman yang dikueri di target atau untuk memindahkan rekaman yang dikueri ke tabel atau tampilan lain.

  • Mengembalikan hasil kueri dalam kumpulan hasil dengan memanggil operasi POLLINGSTMT atau prosedur tersimpan, fungsi, serta prosedur dan fungsi paket yang diekspos sebagai operasi polling.

    Adaptor menjalankan semua operasi ini di dalam transaksi Oracle.

    Adaptor juga memungkinkan Anda menerima pesan perubahan data untuk beberapa artefak Oracle dalam aplikasi yang sama dengan mengekspos PollingId parameter di URI koneksi. Parameter ini memodifikasi namespace target operasi POLLINGSTMT.

Mengubah ruang nama target dari POLLINGSTMT

Anda dapat mengubah namespace target operasi POLLINGSTMT dengan mengatur PollingId parameter string kueri di URI koneksi. Jika PollingId ditentukan dalam URI koneksi, adaptor Oracle Database akan menambahkan string yang telah ditentukan pada parameter PollingId ke dalam namespace target default untuk operasi POLLINGSTMT: http://microsoft.lobservices.oracledb/2007/03/POLLINGSTMT. Tindakan pesan operasi POLLINGSTMT tidak dimodifikasi.

Misalnya, jika URI koneksi berikut ditentukan:

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

Namespace target adalah sebagai berikut:

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

Perhatian

Contoh atau panduan ini mereferensikan informasi sensitif, seperti string koneksi atau nama pengguna dan kata sandi. Jangan pernah melakukan hardcode nilai-nilai ini dalam kode Anda, dan pastikan Anda melindungi data rahasia dengan menggunakan autentikasi paling aman yang tersedia. Untuk informasi selengkapnya, lihat dokumentasi berikut:

Dengan menyediakan namespace unik untuk setiap operasi POLLINGSTMT, Anda dapat menerima pesan yang diubah data untuk beberapa tabel dan tampilan Oracle di aplikasi Anda.

Untuk informasi selengkapnya tentang URI koneksi adaptor Oracle Database, lihat Membuat URI koneksi Oracle Database.

Terima pesan perubahan data menggunakan properti binding

Anda mengonfigurasi adaptor Oracle Database untuk menerima pesan yang diubah data dengan mengatur beberapa atau semua properti pengikatan berikut.

Properti Pengikatan Nilai Bawaan Diperlukan/Opsional
InboundOperationType Pastikan bahwa nilai diatur ke Polling. Jajak Pendapat Dibutuhkan. Jika tidak diatur secara eksplisit, nilai default akan berlaku.
PolledDataAvailableStatement Tentukan pernyataan SELECT yang dijalankan untuk menentukan apakah ada data yang tersedia untuk polling untuk tabel tertentu. Pernyataan yang ditentukan harus mengembalikan kumpulan hasil yang terdiri dari baris dan kolom. Nilai di sel pertama dari kumpulan hasil menunjukkan apakah adaptor menjalankan nilai yang ditentukan untuk properti pengikatan PollingStatement . Jika sel pertama hasil berisi nilai positif, adaptor menjalankan pernyataan polling. Contohnya, pernyataan yang valid untuk properti pengikatan ini adalah:

Select * from <table_name>

Nota: Anda tidak boleh menentukan prosedur tersimpan untuk properti pengikatan ini. Selain itu, pernyataan ini tidak boleh mengubah database Oracle yang mendasar.
PILIH 1 DARI DUAL Dibutuhkan. Jika tidak diatur secara eksplisit, nilai default akan berlaku, yang menyiratkan bahwa adapter harus terus melakukan polling terlepas dari apakah tabel yang dijajaki memiliki data atau tidak.
PollingAction Menentukan tindakan untuk operasi jajak pendapat. Anda dapat menentukan tindakan polling untuk operasi tertentu dari metadata yang Anda buat untuk operasi tersebut dengan menggunakan Add-in Konsumsi Layanan pada Adapter. nul Opsional untuk operasi polling pada tabel dan tampilan menggunakan pernyataan SELECT.
PollingInterval Atur ke interval, dalam detik, di mana Anda ingin adaptor mengkueri database Oracle. Properti ini menentukan interval polling dan waktu transaksi polling habis. Nilai harus lebih besar dari jumlah waktu yang diperlukan untuk menjalankan kueri dan pernyataan pasca-polling (jika ditentukan) pada database Oracle ditambah jumlah waktu yang diperlukan klien untuk memproses data kueri dan mengembalikan pesan respons polling. 500 Dibutuhkan. Jika tidak diatur secara eksplisit, nilai default akan berlaku.
PollingStatement Tentukan salah satu hal berikut ini:

- Pernyataan SQL SELECT yang harus dijalankan terhadap database Oracle. Pernyataan ini harus menyertakan klausa FOR UPDATE. Untuk informasi tentang klausul FOR UPDATE, lihat Menentukan Klausul FOR UPDATE di Pernyataan Polling nanti dalam topik ini.

- Pesan permintaan untuk prosedur tersimpan, fungsi, atau prosedur atau fungsi dalam paket yang ingin Anda jajak pendapat.
nul Dibutuhkan. Menetapkan PollingStatement ke nilai yang bukan null memungkinkan polling.
PollWhileDataFound Menentukan apakah adaptor Oracle Database melewatkan interval polling dan terus memantau database Oracle, jika data tersedia dalam tabel yang sedang dipantau. Jika tidak ada data yang tersedia dalam tabel, adaptor kembali untuk menjalankan pernyataan SQL pada interval polling yang ditentukan Tidak benar Dibutuhkan. Jika tidak diatur secara eksplisit, nilai default akan berlaku.
PostPollStatement Atur ke blok kode PL/SQL opsional yang dijalankan oleh adaptor setelah kueri dilakukan, tetapi sebelum data kueri dikembalikan ke klien. nul Fakultatif. Jika tidak ada nilai yang ditentukan, pernyataan pasca polling tidak dijalankan.

Nota

Jika Anda menggunakan model layanan WCF atau model saluran WCF, Anda juga harus mengatur properti pengikatan AcceptCredentialsInUri .

Masukkan FOR UPDATE dalam pernyataan polling

Jika Anda menggunakan pernyataan SELECT sebagai pernyataan polling dan menjalankan pernyataan pasca-polling yang memengaruhi baris yang ditentukan dalam pernyataan SELECT, Anda harus menggunakan klausul FOR UPDATE dalam pernyataan polling. Menentukan klausul FOR UPDATE memastikan bahwa catatan yang dipilih oleh pernyataan pemilihan dikunci selama transaksi dan bahwa pernyataan setelah pemilihan dapat melakukan pembaruan yang diperlukan pada catatan tersebut.

Perhatian

Anda dapat memiliki skenario di mana di jendela waktu antara pernyataan polling dan pasca-polling, lebih banyak rekaman ditambahkan ke tabel yang memenuhi kondisi pernyataan pasca-polling. Dalam situasi seperti itu, pernyataan pasca-polling akan memperbarui semua catatan yang memenuhi kondisi dan bukan hanya rekaman yang dipilih sebagai bagian dari pernyataan polling.

Jika pernyataan pasca-polling ditentukan dan pernyataan polling tidak berisi klausul FOR UPDATE, Anda akan mengalami salah satu dari dua kondisi berikut:

  • Jika TransactionIsolationLevel diatur ke ReadCommitted, kueri pasca-polling tidak akan memperbarui baris yang dipilih.

  • Jika TransactionIsolationLevel diatur ke Serializable, pengecualian sistem target berikut (Microsoft.ServiceModel.Channels.Common.TargetSystemException) akan terjadi ketika pernyataan pasca-polling dijalankan: "ORA-08177 tidak dapat menserialisasikan akses untuk transaksi ini". Dalam kasus seperti itu, Anda harus mengatur properti pengikatan PollingRetryCount untuk menentukan berapa kali Anda ingin adaptor mencoba kembali transaksi yang sama.

    Untuk petunjuk tentang cara mengatur tingkat isolasi transaksi, lihat Mengonfigurasi tingkat isolasi transaksi dan batas waktu transaksi dengan Oracle Database.

    Pernyataan polling dan pasca-polling dijalankan dalam transaksi jika klien adaptor telah mengonfigurasi untuk menggunakan transaksi dan nilai properti pengikatan UseAmbientTransaction diatur ke True dalam adaptor.

    Contoh kueri polling dengan opsi FOR UPDATE adalah:

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

Masukkan klausul NOWAIT dalam pernyataan polling

Anda mungkin memiliki skenario di mana utas bersamaan mengakses tabel yang sedang dijajaki, yang menyebabkan terlalu banyak ketidakcocokan dalam tabel. Ini dapat menyebabkan kueri polling diblokir untuk mengunci baris-baris tabel. Jika Anda menggunakan pernyataan SELECT sebagai pernyataan polling, Anda mungkin ingin menentukan kata kunci NOWAIT bersama dengan kata kunci FOR UPDATE dalam pernyataan SELECT. Ini akan menyebabkan eksekusi kueri polling pada adaptor langsung mengembalikan hasil jika terdapat kunci pada baris yang sedang dicoba dipilih oleh kueri polling. Pengecualian biasanya dilemparkan oleh Oracle dalam kondisi seperti itu. Sekali lagi, klien adaptor dapat menggunakan properti pengikatan PollingInterval untuk menentukan interval waktu setelah itu klien adaptor harus mencoba kembali untuk polling data.

Contoh kueri polling dengan opsi NOWAIT adalah:

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

Masukkan klausa SKIP LOCKED dalam pernyataan polling

Anda mungkin memiliki skenario di mana karena utas bersamaan yang mengakses tabel sedang dijajaki, beberapa baris dalam kumpulan hasil klausa WHERE yang ditentukan dalam kueri polling dikunci. Misalnya, kueri polling Anda mengembalikan 6 baris dari tabel; 4 dari 6 baris ini sudah dikunci karena beberapa transaksi lainnya. Dalam hal ini, Anda mungkin ingin menentukan kata kunci SKIP LOCKED bersama dengan kata kunci FOR UPDATE yang menginstruksikan database untuk mencoba mengunci baris yang ditentukan oleh klausa WHERE, dan untuk melewati baris apa pun yang ditemukan sudah dikunci. Baris yang tidak terkunci dalam klausul WHERE dikunci selama transaksi dan pernyataan pasca-polling dapat melakukan pembaruan yang diperlukan pada baris tersebut sehingga baris ini tidak dijajaki lagi. Ini memastikan bahwa Anda tidak perlu menunggu untuk menerima pesan polling hingga semua baris yang ditentukan oleh klausa WHERE tidak terkunci.

Kata kunci SKIP LOCKED berguna dalam skenario di mana Anda memiliki klien adaptor di beberapa komputer yang melakukan polling tabel yang sama dalam database. Anda dapat membagi beban di antara klien adaptor dengan mengonfigurasi operasi polling demikian rupa sehingga Anda menerima pesan perubahan data berbasis polling untuk baris yang ditentukan oleh klausul WHERE yang tidak terkunci pada saat itu. Kemudian, perbarui baris tersebut untuk memastikan bahwa jika ada klien adaptor yang menerima pesan perubahan data berbasis polling, klien lain tidak mendapatkan pesan yang sama.

Contoh kueri polling dengan opsi SKIP LOCKED adalah:

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

Dukungan untuk pengiriman yang dipesan (FIFO)

Di lingkungan produksi, polling dapat digunakan untuk memantau perubahan data dalam database Oracle. Pesan yang diubah data ini diterima oleh klien adaptor menggunakan adaptor Oracle Database. Berdasarkan skenario bisnis, sangat penting bahwa pesan yang diubah data diterima oleh klien adaptor dalam urutan yang tepat.

Adaptor basis data Oracle mendukung pengiriman terurut atau pertama masuk, pertama keluar (first-in-first-out/FIFO) untuk mempertahankan urutan saat menerima pesan dari basis data Oracle. Berikut adalah beberapa pertimbangan yang terkait dengan dukungan untuk FIFO dalam skenario masuk untuk adaptor Oracle Database.

  • Jika pesan sedang dikonsumsi oleh orkestrasi, orkestrasi harus memiliki set pengiriman yang dipesan untuk pesan yang berasal dari port penerimaan adaptor Oracle Database.

  • Jika pesan sedang dikonsumsi oleh port kirim dalam skenario perutean berbasis konten, port kirim harus memiliki pengiriman dengan urutan yang sudah ditetapkan untuk pesan yang berasal dari port penerima adaptor Oracle Database.

    Adaptor WCF-Custom atau WCF-OracleDB memiliki properti Menangguhkan pesan permintaan pada kegagalan yang menentukan apakah akan menangguhkan pesan permintaan yang gagal diproses masuk. Properti ini dapat diatur pada tab Pesan dari port penerima WCF-Custom atau WCF-OracleDB di bawah bagian Penanganan kesalahan . Tabel berikut mencantumkan skenario yang menjelaskan bagaimana pesan masuk diproses berdasarkan apakah properti ini telah diatur dan status dari subskriptor pesan (orkestrasi atau port).

Properti pelabuhan Pelanggan dalam status Tidak Terdaftar Pelanggan dalam status Terdaftar tetapi Dihentikan
Properti "Menangguhkan pesan permintaan saat gagal" TIDAK diatur - Laporan Kegagalan Perutean dihasilkan sebagai pesan yang ditangguhkan (pesan yang tidak dapat dilanjutkan)

- Pesan aktual tidak ditangguhkan

- Kueri setelah polling tidak dapat dijalankan karena transaksi dibatalkan. Oleh karena itu, proses polling diulang dan baris-baris diambil kembali.

- Kesalahan yang dilaporkan dalam log peristiwa untuk menjelaskan apa yang telah terjadi.
- Tidak dianggap sebagai "Kegagalan". Tidak ada pesan kesalahan dalam log peristiwa.

- Pesan aktual dimasukkan ke dalam antrean yang ditangguhkan (dapat dilanjutkan).

- Ketika port atau orkestrasi berlangganan dimulai, pesan dilanjutkan secara otomatis. Jika pengiriman yang dipesan ditetapkan untuk pelanggan, akan dipenuhi.

- Pesan juga dapat dilanjutkan secara manual.
Pesan permintaan ditangguhkan jika terjadi kegagalan saat properti diatur aktif - Laporan Kegagalan Perutean dihasilkan sebagai pesan yang ditangguhkan (pesan yang tidak dapat dilanjutkan)

- Pesan aktual juga ditangguhkan

- Kueri setelah polling tidak dapat dijalankan karena transaksi dibatalkan. Oleh karena itu, proses polling diulang dan baris-baris diambil kembali.

- Kesalahan yang dilaporkan dalam log peristiwa untuk menjelaskan apa yang telah terjadi.
- Tidak dianggap sebagai "Kegagalan". Tidak ada pesan kesalahan dalam log peristiwa.

- Pesan aktual dimasukkan ke dalam antrean yang ditangguhkan (dapat dilanjutkan).

- Ketika port atau orkestrasi berlangganan dimulai, pesan dilanjutkan secara otomatis. Jika pengiriman yang dipesan ditetapkan untuk pelanggan, akan dipenuhi.

- Pesan juga dapat dilanjutkan secara manual.

Lihat juga

Mengembangkan aplikasi Oracle Database Anda
Poll Oracle Database menggunakan BizTalk Server
Menerima Pesan Perubahan Data Berbasis Polling pada Oracle Database dengan menggunakan Model Layanan WCF
Menerima Pesan Perubahan Data Berbasis Polling di Oracle Database dengan Menggunakan Model Saluran WCF