O data source do DB2 conecta o DataWorks a bancos de dados IBM DB2 para sincronização de dados offline. Use-o para ler e gravar dados em tarefas de sincronização em lote.
Versões compatíveis
O DB2 Reader e o DB2 Writer utilizam o IBM Data Server Driver for JDBC and SQLJ 4.11.77. Para o mapeamento de versões entre o driver do DB2 e o serviço de banco de dados, consulte a documentação oficial.
Recursos compatíveis
|
Recurso |
Compatível |
|
Leitura offline (sincronização completa) |
Sim |
|
Gravação offline (sincronização completa) |
Sim |
|
Leitura a partir de views |
Sim |
|
Sincronização incremental |
Sim (via filtro |
|
Criptografia AES |
Não |
|
Grupos de recursos serverless |
Sim |
|
Grupos de recursos exclusivos para Data Integration |
Sim |
|
Grupos de recursos públicos |
Não |
|
Grupos de recursos personalizados |
Não |
Tipos de campo compatíveis
O DB2 Reader e o DB2 Writer são compatíveis com os tipos de dados DB2 listados abaixo para operações de leitura e gravação offline. Verifique os tipos de dados antes de configurar uma tarefa de sincronização.
|
Categoria do tipo |
Tipos de dados DB2 |
|
Tipos inteiros |
SMALLINT |
|
Tipos de ponto flutuante |
DECIMAL, REAL, DOUBLE |
|
Tipos de string |
CHAR, CHARACTER, VARCHAR, GRAPHIC, VARGRAPHIC, LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB |
|
Tipos de data e hora |
DATE, TIME, TIMESTAMP |
|
Tipos booleanos |
Nenhum |
|
Tipos binários |
BLOB |
Limitações
Grupos de recursos: o DB2 Reader e o DB2 Writer são compatíveis com Serverless resource groups e exclusive resource groups for Data Integration. Public resource groups e custom resource groups não são compatíveis.
-
Comportamento de gravação: o DB2 Writer grava dados por meio de instruções
insert into. Em caso de conflito de chave primária ou índice único, as linhas conflitantes não são gravadas. Para melhor desempenho, o DB2 Writer utilizaPreparedStatement + BatchcomrewriteBatchedStatements=true, armazenando dados em um buffer de contexto de thread e enviando uma requisição de gravação quando o buffer atinge o limiar configurado.A tarefa de sincronização requer, no mínimo, a permissão
insert into. Permissões adicionais podem ser necessárias dependendo das instruções SQL configuradas nos parâmetrospreSqlepostSql. Criptografia: o algoritmo de criptografia AES do DB2 não é compatível.
Adicionar um data source
Adicione o data source do DB2 ao DataWorks antes de desenvolver uma tarefa de sincronização. Siga as instruções em Data source management. As descrições dos parâmetros estão disponíveis no console do DataWorks ao adicionar o data source.
Desenvolver uma tarefa de sincronização de dados
Tarefa de sincronização offline para uma única tabela
Para as etapas de configuração, consulte Configure a task in the codeless UI e Configure a task in the code editor.
Para todos os parâmetros e uma referência de script, consulte Appendix: Script demo and parameter description.
Tarefa de sincronização offline para um banco de dados completo
Para as etapas de configuração, consulte Batch database synchronization configuration.
Perguntas frequentes
Por que o banco de dados em standby pode apresentar dados faltantes durante a sincronização ativo/standby?
Em uma configuração de recuperação de desastres ativo/standby, o banco de dados em standby aplica continuamente as alterações do banco de dados primário via binlogs. Esse processo tem uma latência inerente, que pode ser agravada pela latência de rede. Como resultado, o banco de dados em standby pode não refletir o banco de dados primário em tempo real, e discrepâncias significativas de dados entre os dois são possíveis.
O DB2 Reader garante consistência de dados durante a extração simultânea?
O DB2 é um sistema de gerenciamento de banco de dados relacional (RDBMS) com interfaces de consulta de forte consistência. No modo de thread único, o DB2 Reader lê um snapshot consistente — se outra fonte gravar dados enquanto a tarefa estiver em execução, o DB2 Reader não recupera essas atualizações.
Ao configurar a extração simultânea com o parâmetro splitPk, o DB2 Reader inicia múltiplas tarefas que não fazem parte da mesma transação de leitura e são executadas em momentos diferentes. Nesse caso, os snapshots lidos pelas tarefas simultâneas podem ser incompletos ou inconsistentes. Duas alternativas estão disponíveis:
Use sincronização com thread único (sem particionamento de dados). Essa abordagem preserva a consistência dos dados, mas reduz a velocidade de sincronização.
Desabilite gravações na fonte durante a sincronização, por exemplo, bloqueando tabelas ou pausando a replicação para o banco de dados em standby. Isso mantém os dados da fonte estáticos, mas pode afetar os serviços online.
É necessário configurar a codificação para o DB2 Reader?
Não. O DB2 Reader extrai dados via Java Database Connectivity (JDBC). O JDBC gerencia a conversão de codificação na camada subjacente, de modo que o DB2 Reader detecta e transcodifica a codificação automaticamente.
Como configurar a sincronização incremental de dados?
O DB2 Reader extrai dados por meio de instruções JDBC SELECT, portanto é possível utilizar SELECT...WHERE... para extração incremental de duas formas:
Se a aplicação fonte preenche um campo de timestamp (como uma coluna
modify) quando os dados são alterados, configure uma cláusulawhereusando o timestamp da última execução de sincronização. Isso captura linhas novas, atualizadas e logicamente excluídas.Para dados somente de acréscimo, configure uma cláusula
whereusando o maior ID de auto-incremento da execução de sincronização anterior.
Se nenhum campo distinguir dados novos dos existentes, somente a sincronização completa é possível.
O parâmetro querySql está protegido contra injeção de SQL?
O DB2 Reader não realiza verificações de segurança na instrução querySql. Revise e valide qualquer SQL personalizado antes de configurar este parâmetro.
Apêndice: Demo de script e descrição de parâmetros
Utilize os scripts e referências de parâmetros a seguir ao configurar uma tarefa de sincronização em lote no editor de código. Para o procedimento geral, consulte Configure a task in the code editor.
Demo do script do 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"
}
]
}
}
Parâmetros do Reader
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Nome do data source conforme configurado no DataWorks. |
Sim |
Nenhum |
|
|
URL JDBC do banco de dados DB2. Formato: |
Sim |
Nenhum |
|
|
Nome de usuário do data source. |
Sim |
Nenhum |
|
|
Senha do nome de usuário. |
Sim |
Nenhum |
|
|
Tabela de origem. Uma única tarefa pode ler de apenas uma tabela. |
Sim |
Nenhum |
|
|
Colunas a serem lidas, especificadas como um array JSON. Para todas as colunas, use |
Sim |
Nenhum |
|
|
Campo usado para particionar os dados na extração simultânea. Utilize a chave primária da tabela para distribuição uniforme e para evitar hotspots de dados. Somente campos inteiros são compatíveis — números de ponto flutuante, strings e datas não são compatíveis. Se um tipo incompatível for especificado, o DB2 Reader retorna um erro. |
Não |
|
|
|
Condição de filtro. O DB2 Reader constrói uma instrução |
Não |
Nenhum |
|
|
Instrução |
Não |
Nenhum |
|
|
Número de registros recuperados por lote do banco de dados. Valores maiores reduzem as viagens de rede e melhoram o desempenho da extração. |
Não |
|
Se o valor de fetchSize ultrapassar 2048, pode ocorrer um erro de out-of-memory (OOM) durante a sincronização.
Demo do script do 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"
}
]
}
}
Parâmetros do Writer
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
URL JDBC do banco de dados DB2. Formato: |
Sim |
Nenhum |
|
|
Nome de usuário do data source. |
Sim |
Nenhum |
|
|
Senha do nome de usuário. |
Sim |
Nenhum |
|
|
Tabela de destino. |
Sim |
Nenhum |
|
|
Colunas de destino para gravação, especificadas como um array JSON. Exemplo: |
Sim |
Nenhum |
|
|
Instrução SQL a ser executada antes do início da tarefa de sincronização. Use para limpar dados antigos ou realizar operações de preparação. Apenas uma instrução é compatível. |
Não |
Nenhum |
|
|
Instrução SQL a ser executada após a conclusão da tarefa de sincronização. Na interface sem código, apenas uma instrução é compatível. No editor de código, múltiplas instruções são compatíveis. |
Não |
Nenhum |
|
|
Número de registros enviados por lote. Valores maiores reduzem as viagens de rede e melhoram o throughput de gravação. Se definido como muito alto, pode ocorrer um erro de OOM. |
Não |
|