Sumber data DB2 menyediakan saluran dua arah untuk membaca dan menulis data ke database DB2, memungkinkan pemrosesan data dalam jumlah besar secara cepat. Topik ini menjelaskan kemampuan sinkronisasi data DataWorks untuk DB2.
Versi yang didukung
DB2 Reader dan DB2 Writer menggunakan driver IBM Data Server Driver for JDBC and SQLJ 4.11.77. Untuk informasi lebih lanjut mengenai pemetaan versi antara driver DB2 dan layanan database, lihat dokumentasi resmi.
Batasan
DB2 Reader dan DB2 Writer mendukung Serverless resource groups dan exclusive resource groups for Data Integration. Public resource groups dan custom resource groups tidak didukung.
DB2 Writer mengambil data dari Reader melalui framework sinkronisasi data dan menulis data ke DB2 menggunakan pernyataan
insert into. Jika terjadi konflik pada primary key atau unique index, baris yang bertentangan tidak akan ditulis. Untuk performa yang lebih baik, DB2 Writer menggunakanPreparedStatement + BatchdenganrewriteBatchedStatements=true. Data dibuffer di buffer konteks thread, dan permintaan penulisan hanya dikirim ketika buffer mencapai ambang batas tertentu.CatatanTugas memerlukan setidaknya izin
insert into. Izin lainnya mungkin diperlukan tergantung pada pernyataan yang Anda tentukan dalam parameter preSql dan postSql saat mengonfigurasi tugas.Sinkronisasi offline mendukung pembacaan data dari views.
Algoritma enkripsi AES DB2 tidak didukung.
Tipe field yang didukung
DB2 Reader dan DB2 Writer mendukung sebagian besar tipe data DB2 untuk operasi baca dan tulis offline. Namun, beberapa tipe data tidak didukung. Kami menyarankan Anda memeriksa tipe data Anda dengan cermat.
Tabel berikut mencantumkan tipe data DB2 yang didukung oleh DB2 Reader dan DB2 Writer.
Kategori tipe | Tipe data DB2 |
Tipe integer | SMALLINT |
Tipe bilangan titik mengambang | DECIMAL, REAL, dan DOUBLE |
Tipe string | CHAR, CHARACTER, VARCHAR, GRAPHIC, VARGRAPHIC, LONG VARCHAR, CLOB, LONG VARGRAPHIC, dan DBCLOB |
Tipe tanggal dan waktu | DATE, TIME, dan TIMESTAMP |
Tipe Boolean | Tidak ada |
Tipe biner | BLOB |
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Data source management. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Kembangkan tugas sinkronisasi data
Untuk informasi mengenai titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Panduan konfigurasi tugas sinkronisasi offline untuk satu tabel
Untuk informasi lebih lanjut mengenai prosedur, lihat Configure a task in the codeless UI dan Configure a task in the code editor.
Untuk semua parameter dan contoh skrip untuk editor kode, lihat Appendix: Script demo and parameter description.
Panduan konfigurasi tugas sinkronisasi baca offline untuk seluruh database
Untuk informasi selengkapnya mengenai prosedur tersebut, lihat Mengonfigurasi Tugas sinkronisasi real-time untuk seluruh database.
FAQ
Permasalahan pemulihan data dalam sinkronisasi aktif/standby
Dalam konfigurasi disaster recovery aktif/standby untuk DB2, database secondary terus-menerus memulihkan data dari database primary menggunakan binlog. Keterlambatan waktu merupakan hal yang inheren dalam proses sinkronisasi ini. Keterlambatan ini, terutama jika diperparah oleh latensi jaringan, menyebabkan data pada database secondary mungkin bukan cerminan lengkap dan real-time dari database primary. Hal ini dapat mengakibatkan perbedaan data yang signifikan antara kedua database.
Batasan konsistensi
DB2 adalah sistem manajemen database relasional (RDBMS) yang menyediakan antarmuka kueri dengan konsistensi kuat. Misalnya, jika sumber data lain menulis data ke database saat tugas sinkronisasi sedang berjalan, DB2 Reader tidak mengambil data yang diperbarui karena fitur snapshot database.
Penjelasan di atas berlaku untuk konsistensi sinkronisasi data DB2 Reader dalam model single-threaded. DB2 Reader dapat mengekstrak data secara konkuren berdasarkan konfigurasi Anda. Oleh karena itu, konsistensi data yang ketat tidak dapat dijamin.
Ketika DB2 Reader melakukan partisi data berdasarkan parameter splitPk, DB2 Reader memulai beberapa tugas konkuren untuk menyinkronkan data. Tugas-tugas konkuren ini tidak termasuk dalam transaksi baca yang sama dan dipisahkan oleh interval waktu. Untuk data mentah, snapshot yang dibaca oleh beberapa tugas konkuren mungkin tidak lengkap atau tidak konsisten.
Solusi teknis untuk snapshot konsisten dalam lingkungan multi-threaded tidak tersedia. Anda hanya dapat mengatasi masalah ini dari perspektif rekayasa, yang melibatkan pertukaran kompromi. Pertimbangkan solusi berikut berdasarkan kebutuhan Anda:
Gunakan sinkronisasi single-threaded. Dalam mode ini, data tidak dipartisi. Kerugiannya adalah kecepatan sinkronisasi lambat, tetapi konsistensi data terjaga dengan baik.
Nonaktifkan penulis data lain untuk memastikan data sumber bersifat statis. Misalnya, Anda dapat mengunci tabel atau menonaktifkan sinkronisasi ke database secondary. Kerugiannya adalah hal ini dapat memengaruhi layanan online.
Permasalahan encoding database
DB2 Reader menggunakan Java Database Connectivity (JDBC) untuk mengekstrak data. JDBC secara native kompatibel dengan berbagai encoding dan melakukan konversi encoding di lapisan dasar. Oleh karena itu, Anda tidak perlu menentukan encoding untuk DB2 Reader. DB2 Reader dapat secara otomatis mendeteksi dan mengonversi encoding.
Metode untuk sinkronisasi data inkremental
DB2 Reader menggunakan pernyataan SELECT JDBC untuk mengekstrak data. Oleh karena itu, Anda dapat menggunakan
SELECT…WHERE…untuk melakukan ekstraksi data inkremental dengan cara berikut:Ketika aplikasi online menulis data ke database, field `modify` diisi dengan timestamp yang menunjukkan kapan perubahan terjadi. Ini mencakup data baru, diperbarui, dan dihapus secara logis. Untuk jenis aplikasi ini, Anda dapat mengonfigurasi DB2 Reader untuk menambahkan klausa `WHERE` yang menggunakan timestamp sinkronisasi terakhir.
Untuk data append-only baru, Anda dapat mengonfigurasi DB2 Reader untuk menambahkan klausa `WHERE` yang menggunakan ID auto-increment maksimum dari sinkronisasi sebelumnya.
Jika logika bisnis Anda tidak menggunakan field tertentu untuk membedakan antara data baru dan data yang dimodifikasi, DB2 Reader tidak dapat melakukan sinkronisasi data inkremental. Dalam kasus ini, hanya sinkronisasi data penuh yang memungkinkan.
Keamanan SQL
DB2 Reader menyediakan parameter querySql yang memungkinkan Anda menyesuaikan pernyataan SELECT untuk ekstraksi data. DB2 Reader tidak melakukan pemeriksaan keamanan apa pun pada pernyataan querySql.
Lampiran: Contoh skrip dan deskripsi parameter
Konfigurasikan tugas sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Configure a task in the code editor. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Contoh skrip Reader
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"db2",// Nama plug-in.
"parameter":{
"password":"",// Kata sandi.
"jdbcUrl":"",// String koneksi JDBC untuk database DB2.
"column":[
"id"
],
"where":"",// Kondisi filter.
"splitPk":"",// Field yang digunakan untuk partisi data.
"table":"",// Nama tabel.
"username":""// Nama pengguna.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika Anda mengatur throttle ke false, parameter mbps tidak berlaku dan tidak ada batasan laju. Jika Anda mengatur throttle ke true, batasan laju diterapkan.
"concurrent":1, // Jumlah pekerjaan konkuren.
"mbps":"12"// Batasan laju. 1 mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Parameter skrip Reader
Parameter | Deskripsi | Wajib | Nilai default |
datasource | Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang telah ditambahkan. | Ya | Tidak ada |
jdbcUrl | String koneksi JDBC untuk database DB2. URL JDBC harus mengikuti spesifikasi resmi DB2. Formatnya adalah | Ya | Tidak ada |
username | Nama pengguna untuk sumber data. | Ya | Tidak ada |
password | Kata sandi untuk nama pengguna yang ditentukan dari sumber data. | Ya | Tidak ada |
table | Tabel dari mana Anda ingin menyinkronkan data. Satu job hanya dapat menyinkronkan data dari satu tabel. | Ya | Tidak ada |
column | Kolom yang ingin Anda sinkronkan dari tabel yang dikonfigurasi. Gunakan array JSON untuk menggambarkan field. Secara default, semua kolom digunakan. Misalnya, [ * ]:
| Ya | Tidak ada |
splitPk | Saat DB2 Reader mengekstrak data, jika Anda menentukan splitPk, Anda dapat menggunakan field yang diwakili oleh splitPk untuk partisi data. Sistem sinkronisasi data kemudian memulai tugas konkuren untuk menyinkronkan data lebih efisien:
| Tidak | "" |
where | Kondisi filter. DB2 Reader membuat pernyataan SQL berdasarkan parameter column, table, dan where yang ditentukan, lalu mengekstrak data berdasarkan pernyataan SQL tersebut. Dalam skenario bisnis, Anda mungkin ingin menyinkronkan data yang dihasilkan pada hari ini. Anda dapat mengatur kondisi where menjadi | Tidak | Tidak ada |
querySql | Dalam beberapa skenario bisnis, parameter where tidak cukup untuk menggambarkan kondisi filter. Anda dapat menggunakan parameter ini untuk menyesuaikan pernyataan SQL filter. Saat Anda mengonfigurasi parameter ini, sistem sinkronisasi data mengabaikan parameter table dan column dan menggunakan isi parameter ini untuk memfilter data. Misalnya, untuk menyinkronkan data setelah penggabungan beberapa tabel, gunakan | Tidak | Tidak ada |
fetchSize | Parameter ini menentukan jumlah catatan yang diambil dalam setiap batch dari server database. Nilai ini menentukan jumlah interaksi jaringan antara sistem sinkronisasi data dan server, yang secara signifikan dapat meningkatkan performa ekstraksi data. Catatan Jika nilai fetchSize terlalu besar (>2048), error out-of-memory (OOM) dapat terjadi dalam proses sinkronisasi data. | Tidak | 1024 |
Contoh skrip Writer
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"db2",// Nama plug-in.
"parameter":{
"postSql":[],// Pernyataan SQL yang dieksekusi setelah tugas sinkronisasi data.
"password":"",// Kata sandi.
"jdbcUrl":"jdbc:db2://ip:port/database",// String koneksi JDBC untuk database DB2.
"column":[
"id"
],
"batchSize":1024,// Jumlah catatan yang dikirimkan dalam satu batch.
"table":"",// Nama tabel.
"username":"",// Nama pengguna.
"preSql":[]// Pernyataan SQL yang dieksekusi sebelum tugas sinkronisasi data.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika Anda mengatur throttle ke false, parameter mbps tidak berlaku dan tidak ada batasan laju. Jika Anda mengatur throttle ke true, batasan laju diterapkan.
"concurrent":1, // Jumlah pekerjaan konkuren.
"mbps":"12"// Batasan laju. 1 mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Parameter skrip Writer
Parameter | Deskripsi | Wajib | Nilai default |
jdbcUrl | String koneksi JDBC untuk database DB2. URL JDBC harus mengikuti spesifikasi resmi DB2. Formatnya adalah jdbc:db2://ip:port/database. Anda juga dapat menambahkan informasi kontrol lampiran koneksi. | Ya | Tidak ada |
username | Nama pengguna untuk sumber data. | Ya | Tidak ada |
password | Kata sandi untuk nama pengguna yang ditentukan dari sumber data. | Ya | Tidak ada |
table | Tabel tujuan tempat Anda ingin menyinkronkan data. | Ya | Tidak ada |
column | Field di tabel tujuan tempat Anda ingin menulis data. Pisahkan field dengan koma (,). Contoh: "column": ["id", "name", "age"]. Untuk menulis ke semua kolom secara berurutan, gunakan tanda bintang (*). Contoh: "column": ["*"] . | Ya | Tidak ada |
preSql | Pernyataan SQL yang dieksekusi sebelum tugas sinkronisasi data. Saat ini, hanya satu pernyataan SQL yang dapat dieksekusi. Misalnya, Anda dapat menggunakannya untuk purge data lama. | Tidak | Tidak ada |
postSql | Pernyataan SQL yang dieksekusi setelah tugas sinkronisasi data. Di Antarmuka tanpa kode, hanya satu pernyataan SQL yang diizinkan. Di editor kode, beberapa pernyataan SQL didukung. Misalnya, Anda dapat menggunakannya untuk menambahkan timestamp. | Tidak | Tidak ada |
batchSize | Jumlah catatan yang dikirimkan dalam satu batch. Nilai ini secara signifikan dapat mengurangi jumlah interaksi jaringan antara sistem sinkronisasi data dan Db2, serta meningkatkan throughput keseluruhan. Jika nilai ini diatur terlalu tinggi, error OOM dapat terjadi dalam proses sinkronisasi data. | Tidak | 1024 |