La source de données DB2 connecte DataWorks aux bases de données IBM DB2 pour la synchronisation des données hors ligne. Utilisez-la pour lire et écrire des données dans DB2 lors de tâches de synchronisation par lots.
Versions prises en charge
DB2 Reader et DB2 Writer utilisent le pilote IBM Data Server Driver for JDBC and SQLJ version 4.11.77. Pour consulter la correspondance entre les versions du pilote DB2 et le service de base de données, reportez-vous à la documentation officielle.
Fonctionnalités prises en charge
| Fonctionnalité | Prise en charge |
|---|---|
| Lecture hors ligne (synchronisation complète) | Oui |
| Écriture hors ligne (synchronisation complète) | Oui |
| Lecture depuis des vues | Oui |
| Synchronisation incrémentielle | Oui (via le filtre where ou querySql) |
| Chiffrement AES | Non |
| Groupes de ressources serverless | Oui |
| Groupes de ressources exclusifs pour Data Integration | Oui |
| Groupes de ressources publics | Non |
| Groupes de ressources personnalisés | Non |
Types de champs pris en charge
DB2 Reader et DB2 Writer prennent en charge les types de données DB2 suivants pour les opérations de lecture et d'écriture hors ligne. Vérifiez vos types de données avant de configurer une tâche de synchronisation.
| Catégorie de type | Types de données DB2 |
|---|---|
| Types entiers | SMALLINT |
| Types à virgule flottante | DECIMAL, REAL, DOUBLE |
| Types chaîne | CHAR, CHARACTER, VARCHAR, GRAPHIC, VARGRAPHIC, LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB |
| Types date et heure | DATE, TIME, TIMESTAMP |
| Types booléens | Aucun |
| Types binaires | BLOB |
Limitations
Groupes de ressources : DB2 Reader et DB2 Writer prennent en charge les groupes de ressources serverless et les groupes de ressources exclusifs pour Data Integration. Les groupes de ressources publics et les groupes de ressources personnalisés ne sont pas pris en charge.
-
Comportement d'écriture : DB2 Writer écrit les données à l'aide d'instructions
insert into. En cas de conflit avec une clé primaire ou un index unique, les lignes conflictuelles ne sont pas écrites. Pour optimiser les performances, DB2 Writer utilisePreparedStatement + BatchavecrewriteBatchedStatements=true, mettant les données en mémoire tampon dans le contexte du thread et envoyant une requête d'écriture lorsque le seuil configuré est atteint.La tâche de synchronisation requiert au minimum l'autorisation
insert into. Des autorisations supplémentaires peuvent être nécessaires selon les instructions SQL configurées dans les paramètrespreSqletpostSql. Chiffrement : L'algorithme de chiffrement AES de DB2 n'est pas pris en charge.
Ajout d'une source de données
Ajoutez la source de données DB2 à DataWorks avant de développer une tâche de synchronisation. Suivez les instructions décrites dans la section Gestion des sources de données. Les descriptions des paramètres sont disponibles dans la console DataWorks lors de l'ajout de la source de données.
Développement d'une tâche de synchronisation des données
Tâche de synchronisation hors ligne pour une table unique
Pour connaître les étapes de configuration, consultez les sections Configuration d'une tâche dans l'interface sans code et Configuration d'une tâche dans l'éditeur de code.
Pour obtenir la liste complète des paramètres et une référence de script, reportez-vous à l'Annexe : Démo de script et description des paramètres.
Tâche de synchronisation hors ligne pour une base de données complète
Pour connaître les étapes de configuration, consultez la section Configuration d'une tâche de synchronisation en temps réel pour une base de données complète.
FAQ
Pourquoi la base de données de secours peut-elle manquer de données lors d'une synchronisation actif/passif ?
Dans une configuration de reprise après sinistre actif/passif, la base de données de secours applique continuellement les modifications de la base de données principale via les journaux binaires (binlogs). Ce processus implique un décalage temporel inhérent, que la latence réseau peut aggraver. Par conséquent, la base de données de secours peut ne pas refléter la base de données principale en temps réel, ce qui peut entraîner des écarts de données significatifs entre les deux.
DB2 Reader garantit-il la cohérence des données lors de l'extraction simultanée ?
DB2 est un système de gestion de base de données relationnelle (SGBDR) offrant des interfaces de requête à forte cohérence. En mode monothread, DB2 Reader lit un instantané cohérent : si une autre source écrit des données pendant l'exécution de la tâche, DB2 Reader ne récupère pas ces mises à jour.
Lorsque vous configurez une extraction simultanée à l'aide du paramètre splitPk, DB2 Reader lance plusieurs tâches qui ne font pas partie de la même transaction de lecture et s'exécutent à des moments différents. Dans ce cas, les instantanés lus par les tâches simultanées peuvent être incomplets ou incohérents. Deux solutions de contournement sont disponibles :
Utilisez la synchronisation monothread (sans partitionnement des données). Cette méthode préserve la cohérence des données mais réduit la vitesse de synchronisation.
Désactivez les écritures sur la source pendant la synchronisation, par exemple en verrouillant les tables ou en suspendant la réplication vers la base de données de secours. Cela maintient les données sources statiques, mais peut affecter les services en ligne.
Dois-je configurer l'encodage pour DB2 Reader ?
Non. DB2 Reader utilise Java Database Connectivity (JDBC) pour extraire les données. JDBC gère la conversion d'encodage au niveau inférieur, de sorte que DB2 Reader détecte et transcode automatiquement l'encodage.
Comment configurer la synchronisation incrémentielle des données ?
DB2 Reader extrait les données à l'aide d'instructions SELECT JDBC. Vous pouvez donc utiliser SELECT...WHERE... pour l'extraction incrémentielle de deux manières :
Si l'application source renseigne un champ d'horodatage (tel qu'une colonne
modify) lors des modifications de données, configurez une clausewhereen utilisant l'horodatage de la dernière exécution de synchronisation. Cela permet de capturer les nouvelles lignes, les lignes mises à jour et les lignes supprimées logiquement.Pour les données en ajout seul, configurez une clause
whereen utilisant l'ID auto-incrémenté maximal de la précédente exécution de synchronisation.
Si aucun champ ne permet de distinguer les nouvelles données des données existantes, seule la synchronisation complète est possible.
**Le paramètre querySql est-il protégé contre les injections SQL ?**
DB2 Reader n'effectue aucune vérification de sécurité sur l'instruction querySql. Examinez et validez tout SQL personnalisé avant de configurer ce paramètre.
Annexe : Démo de script et description des paramètres
Utilisez les scripts et références de paramètres suivants lors de la configuration d'une tâche de synchronisation par lots dans l'éditeur de code. Pour la procédure générale, consultez la section Configuration d'une tâche dans l'éditeur de code.
Démo de script Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "db2",
"parameter": {
"datasource": "",
"jdbcUrl": "",
"username": "",
"password": "",
"table": "",
"column": [
"id"
],
"where": "",
"splitPk": ""
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres Reader
| Paramètre | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
datasource |
Le nom de la source de données tel que configuré dans DataWorks. | Oui | Aucune |
jdbcUrl |
L'URL JDBC pour la base de données DB2. Format : jdbc:db2://ip:port/database. Vous pouvez ajouter des attributs de contrôle de connexion. |
Oui | Aucune |
username |
Le nom d'utilisateur pour la source de données. | Oui | Aucune |
password |
Le mot de passe associé au nom d'utilisateur. | Oui | Aucune |
table |
La table source. Une seule tâche peut lire une seule table. | Oui | Aucune |
column |
Les colonnes à lire, spécifiées sous forme de tableau JSON. Toutes les colonnes : ["*"]. Prend en charge l'élagage des colonnes, le réordonnancement des colonnes et les constantes. Les constantes doivent respecter la syntaxe SQL DB2, par exemple : ["id", "1", "'const name'", "null", "upper('abc_lower')", "2.3", "true"]. Ne peut pas être vide. |
Oui | Aucune |
splitPk |
Le champ utilisé pour partitionner les données lors de l'extraction simultanée. Utilisez la clé primaire de la table pour une distribution uniforme et afin d'éviter les points chauds de données. Seuls les champs entiers sont pris en charge ; les nombres à virgule flottante, les chaînes et les dates ne sont pas pris en charge. Si un type non pris en charge est spécifié, DB2 Reader renvoie une erreur. | Non | "" |
where |
Une condition de filtre. DB2 Reader construit une instruction SELECT à partir des paramètres column, table et where, puis extrait les données correspondantes. Par exemple, définissez where sur gmt_create>$bizdate pour une synchronisation incrémentielle quotidienne. Si ce champ est laissé vide, toutes les lignes de la table sont synchronisées. |
Non | Aucune |
querySql |
Une instruction SELECT personnalisée pour les cas où where ne suffit pas, par exemple pour synchroniser les résultats d'une jointure multi-tables : select a,b from table_a join table_b on table_a.id = table_b.id. Lorsque querySql est défini, les paramètres table, column et where sont ignorés. |
Non | Aucune |
fetchSize |
Le nombre d'enregistrements récupérés par lot depuis la base de données. Une valeur plus élevée réduit les allers-retours réseau et améliore les performances d'extraction. | Non | 1024 |
Si fetchSize dépasse 2048, une erreur d'épuisement de la mémoire (OOM) peut se produire pendant la synchronisation.
Démo de script Writer
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "db2",
"parameter": {
"jdbcUrl": "jdbc:db2://ip:port/database",
"username": "",
"password": "",
"table": "",
"column": [
"id"
],
"preSql": [],
"postSql": [],
"batchSize": 1024
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres Writer
| Paramètre | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
jdbcUrl |
L'URL JDBC pour la base de données DB2. Format : jdbc:db2://ip:port/database. Vous pouvez ajouter des attributs de contrôle de connexion. |
Oui | Aucune |
username |
Le nom d'utilisateur pour la source de données. | Oui | Aucune |
password |
Le mot de passe associé au nom d'utilisateur. | Oui | Aucune |
table |
La table de destination. | Oui | Aucune |
column |
Les colonnes de destination vers lesquelles écrire, spécifiées sous forme de tableau JSON. Exemple : ["id", "name", "age"]. Pour écrire dans toutes les colonnes dans l'ordre, utilisez ["*"]. |
Oui | Aucune |
preSql |
Une instruction SQL à exécuter avant le début de la tâche de synchronisation. Utilisez-la pour effacer les anciennes données ou effectuer des opérations de configuration. Une seule instruction est prise en charge. | Non | Aucune |
postSql |
Une instruction SQL à exécuter après la fin de la tâche de synchronisation. Dans l'interface sans code, une seule instruction est prise en charge. Dans l'éditeur de code, plusieurs instructions sont prises en charge. | Non | Aucune |
batchSize |
Le nombre d'enregistrements soumis par lot. Une valeur plus élevée réduit les allers-retours réseau et améliore le débit d'écriture. Si elle est définie trop haut, une erreur OOM peut se produire. | Non | 1024 |