A fonte de dados Oracle permite ler e gravar dados no Oracle. É possível configurar tarefas de sincronização nos modos assistente ou script. Este tópico descreve os recursos de sincronização do Oracle com suporte no DataWorks.
Versões com suporte
Leituras e gravações em lote
|
Versão |
Leitura em lote (Oracle Reader) |
Gravação em lote (Oracle Writer) |
|
Oracle 11.2 ou 11gR2 |
Com suporte |
Com suporte |
|
Oracle 12.1 ou 12cR1 |
Com suporte |
Com suporte |
|
Oracle 12.2 ou 12cR2 |
Com suporte (sem suporte a recursos da nova versão) |
Com suporte (sem suporte a recursos da nova versão) |
|
Oracle 18.3 |
Com suporte (sem suporte a recursos da nova versão) |
Com suporte (sem suporte a recursos da nova versão) |
|
Oracle 19.x |
Com suporte (sem suporte a recursos da nova versão) |
Com suporte (sem suporte a recursos da nova versão) |
|
Oracle 21.1 |
Com suporte (sem suporte a recursos da nova versão) |
Com suporte (sem suporte a recursos da nova versão) |
O Oracle Writer usa o driver ojdbc6-12.1.1.jar.
Leituras em tempo real
-
Com suporte:
Bancos de dados
11g R2 and later,12c non cdb,18c non cdb,19c non cdbou19c cdb. -
Sem suporte:
Bancos de dados
12c cbde18c cbd. Quando o Oracle for a origem de uma tarefa em tempo real de banco de dados completo, ative o log de arquivamento. Para obter detalhes, consulte Prepare the Oracle environment.
Um banco de dados de contêiner (CDB) é um recurso do Oracle 12c e versões posteriores que contém vários bancos de dados plugáveis (PDBs).
Limites
Os parâmetros NLS_CHARACTERSET e NLS_NCHAR_CHARACTERSET da instância Oracle devem ser AL32UTF8, AL16UTF16, ZHS16GBK ou UTF8.
Uma instância Oracle aceita no máximo 500 GB de dados incrementais sincronizados em tempo real por dia.
O DataWorks faz leituras em tempo real apenas de um standby físico do Oracle. Ele lê logs arquivados, portanto, a latência é maior do que ao ler o primário e depende da velocidade de geração dos logs de arquivamento.
A sincronização em tempo real não oferece suporte a views; a sincronização em lote oferece suporte à leitura de views.
As leituras em tempo real do Oracle no DataWorks usam o Oracle LogMiner. Ative o log suplementar e de arquivamento no primário para leituras no primário ou no standby.
Não há suporte para tabelas organizadas por índice.
Não há suporte para tabelas cujas colunas sejam todas do tipo LOB (BLOB, CLOB ou NCLOB).
Não há suporte para caracteres chineses em nomes de tabelas ou colunas do Oracle.
Não há suporte para nomes de tabelas Oracle com mais de 30 bytes.
Tipos de campo com suporte
|
Tipo de campo |
Leitura em lote (Oracle Reader) |
Gravação em lote (Oracle Writer) |
Leituras em tempo real |
|
NUMBER |
Com suporte |
Com suporte |
Com suporte |
|
BINARY FLOAT |
Com suporte |
Com suporte |
Com suporte |
|
BINARY DOUBLE |
Com suporte |
Com suporte |
Com suporte |
|
CHAR |
Com suporte |
Com suporte |
Com suporte |
|
NCHAR |
Com suporte |
Com suporte |
Com suporte |
|
VARCHAR2 |
Com suporte |
Com suporte |
Com suporte |
|
NVARCHAR2 |
Com suporte |
Com suporte |
Com suporte |
|
DATE |
Com suporte |
Com suporte |
Com suporte |
|
TIMESTAMP |
Com suporte |
Com suporte |
Com suporte |
|
TIMESTAMP WITH TIME ZONE |
Com suporte |
Com suporte |
Sem suporte |
|
TIMESTAMP WITH LOCAL TIME ZONE |
Com suporte |
Com suporte |
Sem suporte |
|
CLOB |
Com suporte |
Com suporte |
Com suporte |
|
BLOB |
Com suporte |
Com suporte |
Com suporte |
|
RAW |
Com suporte |
Com suporte |
Com suporte |
|
ROWID |
Sem suporte |
Sem suporte |
Com suporte |
|
UROWID |
Sem suporte |
Sem suporte |
Com suporte |
|
FLOAT |
Com suporte |
Com suporte |
Com suporte |
|
INTERVAL DAY TO SECOND |
Sem suporte |
Sem suporte |
Com suporte |
|
INTERVAL YEAR TO MONTH |
Sem suporte |
Sem suporte |
Com suporte |
|
BFILE |
Sem suporte |
Sem suporte |
Sem suporte |
|
LONG |
Sem suporte |
Sem suporte |
Sem suporte |
|
LONG RAW |
Sem suporte |
Sem suporte |
Sem suporte |
|
NCLOB |
Com suporte |
Com suporte |
Sem suporte |
|
STRUCT |
Com suporte |
Com suporte |
Sem suporte |
|
User-Defined Types |
Sem suporte |
Sem suporte |
Sem suporte |
|
AnyType |
Sem suporte |
Sem suporte |
Sem suporte |
|
AnyData |
Sem suporte |
Sem suporte |
Sem suporte |
|
AnyDataSet |
Sem suporte |
Sem suporte |
Sem suporte |
|
XmlType |
Sem suporte |
Sem suporte |
Sem suporte |
|
Spatial Types |
Sem suporte |
Sem suporte |
Sem suporte |
|
Media Types |
Sem suporte |
Sem suporte |
Sem suporte |
A tabela a seguir lista os mapeamentos de tipos do Oracle para o Oracle Reader.
|
Categoria de tipo |
Tipo de dados Oracle |
|
Inteiro |
NUMBER, RAWID, INTEGER, INT e SMALLINT |
|
Ponto flutuante |
NUMERIC, DECIMAL, FLOAT, DOUBLE PRECISIOON e REAL |
|
String |
LONG, CHAR, NCHAR, VARCHAR, VARCHAR2, NVARCHAR2, CLOB, NCLOB, CHARACTER, CHARACTER VARYING, CHAR VARYING, NATIONAL CHARACTER, NATIONAL CHAR, NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING e NCHAR VARYING |
|
Data e hora |
TIMESTAMP e DATE |
|
Booleano |
BIT e BOOL |
|
Binário |
BLOB, BFILE, RAW e LONG RAW |
Antes da sincronização: Prepare o ambiente Oracle
Antes de sincronizar dados do Oracle no DataWorks, prepare o ambiente Oracle para que as tarefas possam ser configuradas e executadas normalmente.
Verifique a versão do banco de dados Oracle
As versões do Oracle com suporte variam de acordo com o cenário de sincronização. Verifique se a sua versão tem suporte.
-
Use uma destas instruções para verificar a versão:
-
Instrução 1:
select * from v$version; -
Instrução 2:
select version from v$instance;
-
-
Se a versão do Oracle for
12cou18c, use esta instrução para verificar se é um banco de dadoscdb. A sincronização em tempo real do Data Integration atualmente não oferece suporte às versões12ce18cde bancos de dados Oraclecdb.select name,cdb,open_mode,con_id from v$database;
Crie uma conta e conceda permissões
Planeje uma conta de login do banco de dados para operações futuras. Ela requer as permissões relevantes do Oracle.
Crie uma conta. Para o procedimento, consulte Criar uma conta Oracle.
-
Conceda permissões.
Use estes comandos para conceder permissões. Substitua
'sync_user'pela conta criada acima.grant create session to 'sync_user'; //Allow the synchronization account to log on to the database. grant connect to 'sync_user'; //Allow the synchronization account to connect to the database. grant select on nls_database_parameters to 'sync_user'; //Allow the synchronization account to query the nls_database_parameters system settings. grant select on all_users to 'sync_user'; //Allow the synchronization account to query all database users. grant select on all_objects to 'sync_user'; //Allow the synchronization account to query all database objects. grant select on DBA_MVIEWS to 'sync_user'; //Allow the synchronization account to view materialized views. grant select on DBA_MVIEW_LOGS to 'sync_user'; //Allow the synchronization account to view materialized view logs. grant select on DBA_CONSTRAINTS to 'sync_user'; //Allow the synchronization account to view constraints on all database tables. grant select on DBA_CONS_COLUMNS to 'sync_user'; //Allow the synchronization account to view columns in specified constraints on all database tables. grant select on all_tab_cols to 'sync_user'; //Allow the synchronization account to view column information for tables, views, and clusters. grant select on sys.obj$ to 'sync_user'; //Allow the synchronization account to view objects. sys.obj$ is the Oracle dictionary base table containing all objects. grant select on SYS.COL$ to 'sync_user'; //Allow the synchronization account to view column definitions. SYS.COL$ stores table column definitions. grant select on sys.USER$ to 'sync_user'; //Allow the synchronization account to view system tables. sys.USER$ is the default service for user sessions. grant select on sys.cdef$ to 'sync_user'; //Allow the synchronization account to view system tables. grant select on sys.con$ to 'sync_user'; //Allow the synchronization account to view constraints. sys.con$ records Oracle constraint information. grant select on all_indexes to 'sync_user'; //Allow the synchronization account to view all indexes. grant select on v_$database to 'sync_user'; //Allow the synchronization account to view v_$database. grant select on V_$ARCHIVE_DEST to 'sync_user'; //Allow the synchronization account to view V_$ARCHIVE_DEST. grant select on v_$log to 'sync_user'; //Allow the synchronization account to view v_$log, which shows log file information in the control file. grant select on v_$logfile to 'sync_user'; //Allow the synchronization account to view v_$logfile, which contains redo log file information. grant select on v_$archived_log to 'sync_user'; //Allow the synchronization account to view v$archived_log, which contains archive log information. grant select on V_$LOGMNR_CONTENTS to 'sync_user'; //Allow the synchronization account to view V_$LOGMNR_CONTENTS. grant select on DUAL to 'sync_user'; //Allow the synchronization account to view DUAL, a one-row virtual table used in SELECT syntax. grant select on v_$parameter to 'sync_user'; //Allow the synchronization account to view v_$parameter, a dynamic dictionary view of database parameter values. grant select any transaction to 'sync_user'; //Allow the synchronization account to view any transaction. grant execute on SYS.DBMS_LOGMNR to 'sync_user'; //Allow the synchronization account to use LogMiner for transaction analysis and data recovery. grant alter session to 'sync_user'; //Allow the synchronization account to alter the database session. grant select on dba_objects to 'sync_user'; //Allow the synchronization account to view all database objects. grant select on v_$standby_log to 'sync_user'; //Allow the synchronization account to view v_$standby_log, which contains standby archive log information. grant select on v_$ARCHIVE_GAP to 'sync_user'; //Allow the synchronization account to query missing archive logs. grant select on sys.ICOL$ to 'sync_user'; //Allow the synchronization account to view objects. sys.obj$ is the Oracle dictionary base table containing all objects. grant select on V_$THREAD to 'sync_user'; //Allow the synchronization account to view instance thread information. V_$THREAD is an Oracle dynamic performance view of RAC instance thread status used to identify instance state and log sources for incremental parsing.Para a sincronização em lote de dados completos, conceda também à conta permissão para consultar todas as tabelas:
grant select any table to 'sync_user';O Oracle 12c e versões posteriores exigem este comando para permitir que a conta use o LogMiner. Versões anteriores fornecem o LogMiner integrado e não o exigem.
grant LOGMINING TO 'sync_user';
Ative o log de arquivamento e suplementar e alterne arquivos de redo log
-
Ative o log de arquivamento:
shutdown immediate; startup mount; alter database archivelog; alter database open; -
Ative o log suplementar.
Escolha o log suplementar conforme a necessidade. SQL de exemplo:
//Enable supplemental logging to capture complete changes for real-time synchronization. For database-level logging, run: alter database add supplemental log data(primary key) columns; //Enable supplemental logging for primary key columns in the database. alter database add supplemental log data(unique) columns; //Enable supplemental logging for unique-index columns in the database. //You can instead enable it at the table level: alter schema.table add supplemental log data(primary key) columns; //Enable supplemental logging for primary key columns in the specified table. alter schema.table add supplemental log data(unique) columns; //Enable supplemental logging for unique-index columns in the specified table. -
Alterne arquivos de redo log.
Após ativar o log suplementar, execute o comando a seguir várias vezes (geralmente recomenda-se cinco vezes) para alternar os arquivos de redo log.
alter system switch logfile;NotaA alternância múltipla garante que o arquivo de log atual seja substituído após ficar cheio, preservando os registros de operação para recuperação posterior.
Verifique a codificação de caracteres do banco de dados
Execute o comando a seguir no banco de dados para verificar a codificação de caracteres:
select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
O v$nls_parameters armazena as configurações de parâmetros do banco de dados.
O NLS_CHARACTERSET e o NLS_NCHAR_CHARACTERSET são os conjuntos de caracteres do banco de dados e nacionais, que indicam os formatos de armazenamento para duas categorias de dados de caracteres do Oracle.
Atualmente, o Data Integration oferece suporte a UTF8, AL32UTF8, AL16UTF16 e ZHS16GBK na sincronização de dados. Altere as codificações de caracteres sem suporte antes da sincronização.
Verifique os tipos de dados das tabelas
Use uma instrução SQL SELECT para consultar os tipos das colunas da tabela. Para inspecionar 'tablename', execute:
select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename';
COLUMN_NAME: Nome da coluna da tabela.
DATA_TYPE: Tipo de dados da coluna.
all_tab_columns: View que contém informações sobre todas as colunas da tabela.
TABLE_NAME: Nome da tabela de destino. Substitua 'tablename' pelo nome real da tabela na instrução.
Também é possível executar select * from 'tablename'; para consultar todos os dados e obter os tipos da tabela de destino.
Adicione uma fonte de dados
Antes de desenvolver uma tarefa de sincronização no DataWorks, adicione a fonte de dados necessária ao DataWorks seguindo as instruções em Data source configuration. Visualize as descrições dos parâmetros no console do DataWorks para entender seus significados ao adicionar uma fonte de dados.
Desenvolva tarefas de sincronização: fluxo de trabalho do Oracle
Para obter informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias a seguir.
Configure uma tarefa de sincronização em lote de tabela única
Para o procedimento, consulte Codeless UI configuration e Script mode configuration.
Para todos os parâmetros do modo de script e scripts de exemplo, consulte Appendix: Sample scripts and parameters.
Configure uma tarefa de sincronização em tempo real de tabela única
Siga o procedimento descrito em Configure a real-time synchronization task (legacy).
Configure a sincronização em lote de banco de dados completo, em tempo real completo e incremental, e em tempo real de tabela fragmentada
O procedimento está detalhado em Configure real-time full-database synchronization tasks.
Perguntas frequentes
Real-time synchronization tasks for Oracle, PolarDB, and MySQL repeatedly report errors
-
Recuperação de dados em uma configuração primário-standby
Em uma configuração de recuperação de desastres primário-standby, após o failover do primário para um standby, o standby recupera continuamente os dados do primário por meio de binlogs. A replicação pode sofrer atrasos, especialmente devido à latência de rede. Portanto, os dados do standby podem diferir significativamente do primário e podem não representar um snapshot completo no momento atual.
-
Restrições de consistência
O Oracle é um RDBMS capaz de fornecer interfaces de consulta fortemente consistentes. Por exemplo, se outro gravador atualizar o banco de dados após o início de uma tarefa de sincronização, o Oracle Reader não capturará os novos dados devido ao comportamento de snapshot do banco de dados.
Esse comportamento de consistência aplica-se a um Oracle Reader de thread única. A extração simultânea, com base na sua configuração, não garante estritamente a consistência.
Quando o Oracle Reader divide os dados por splitPk, ele inicia várias tarefas simultâneas. Elas não compartilham uma transação de leitura e começam em horários diferentes, portanto, os dados resultantes não são um snapshot completo e consistente.
Atualmente, não é tecnicamente viável obter um snapshot consistente em várias threads. As opções de engenharia a seguir envolvem trade-offs; escolha a mais adequada às suas necessidades.
Use a sincronização de thread única sem divisão de dados. É mais lenta, mas oferece boa consistência.
Interrompa outros gravadores para que os dados permaneçam estáticos, por exemplo, bloqueando a tabela ou interrompendo a replicação do standby. Isso pode afetar os serviços online.
-
Codificação do banco de dados
O Oracle Reader usa JDBC para extrair dados. O JDBC lida e converte diferentes codificações internamente, portanto, você não precisa especificar uma codificação.
-
Sincronização incremental
O Oracle Reader extrai dados com instruções JDBC SELECT. Use
SELECT…WHERE…para extração incremental:Quando um aplicativo online grava no banco de dados, ele define o campo modify como o carimbo de data e hora da alteração para inserções, atualizações e exclusões lógicas. O Oracle Reader pode usar uma condição WHERE após o carimbo de data e hora da sincronização anterior.
Para registros de apenas adição, use uma condição WHERE com base no ID de incremento automático máximo da etapa anterior.
Se nenhum campo de negócio distinguir inserções e atualizações, o Oracle Reader não poderá sincronizar incrementalmente e deverá sincronizar todos os dados.
-
Segurança de SQL
O Oracle Reader fornece o parâmetro querySql para que você possa escrever uma instrução de extração SELECT. O Oracle Reader não valida a segurança do querySql.
Apêndice: Scripts e parâmetros de exemplo
Configure uma tarefa de sincronização em lote usando o editor de código
Para configurar uma tarefa de sincronização em lote no editor de código, configure os parâmetros relacionados no script de acordo com os requisitos unificados de formato. Para obter mais informações, consulte Script mode configuration. As informações a seguir descrevem os parâmetros obrigatórios para as fontes de dados ao configurar uma tarefa de sincronização em lote no editor de código.
Script de exemplo do Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oracle",
"parameter": {
"selectedDatabase": "AUTOTEST",
"indexes": [],
"datasource": "oracle_test",
"envType": 0,
"useSpecialSecret": true,
"column": [
"id"
],
"where": "",
"splitPk": "id",
"encoding": "UTF-8",
"table": "AUTOTEST.table01"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
},
"name": "Writer",
"category": "writer"
},
{
"name": "Processor",
"stepType": null,
"category": "processor",
"copies": 1,
"parameter": {
"nodes": [],
"edges": [],
"groups": [],
"version": "2.0"
}
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 2,
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Parâmetros do script do Reader
Parâmetro | Descrição | Obrigatório | Valor padrão |
datasource | Nome da fonte de dados. No modo de script, é possível adicionar uma fonte de dados. O valor deve corresponder ao nome da fonte de dados adicionada. | Sim | Nenhum |
selectedDatabase | Schema do banco de dados a ser sincronizado. | Sim | Nenhum |
table | Nome da tabela a ser sincronizada, no formato Nota Por exemplo, se selectedDatabase for | Sim | Nenhum |
column | Colunas a serem sincronizadas da tabela configurada, descritas como uma matriz JSON. Por padrão, todas as colunas são selecionadas, por exemplo, ["*"].
| Sim | Nenhum |
splitFactor | Um fator de divisão que define o número de shards de dados. Com tarefas simultâneas, os dados são divididos em concurrency × splitFactor shards. Por exemplo, concurrency = 5 e splitFactor = 5 produzem 5 × 5 = 25 shards em cinco threads simultâneas. Nota Intervalo recomendado: 1 a 100. Um valor excessivamente grande pode causar um erro de falta de memória. | Não | 5 |
splitMode | Opções de modo de divisão:
Nota Use splitMode junto com splitPk.
| Não | randomSampling |
splitPk | Quando o Oracle Reader extrai dados, especificar splitPk significa que você deseja dividi-lo pelo campo representado por splitPk. A sincronização inicia tarefas simultâneas para melhorar a eficiência.
Nota ROWID não pode ser usado como splitPk para uma view. | Não | Nenhum |
where | Uma condição de filtro. O Oracle Reader monta o SQL com base na column, table e condição where especificadas e extrai dados com esse SQL. Para testes, defina WHERE como row_number().
| Não | Nenhum |
querySql (apenas modo avançado; modo assistente sem suporte) | Quando uma condição WHERE não puder descrever seu filtro, use querySql para escrever um SQL personalizado. O Data Integration então ignora table, column e outras configurações, filtrando os dados diretamente com querySql. Por exemplo, para unir várias tabelas, use | Não | Nenhum |
fetchSize | Número de registros recuperados em cada lote pelo plug-in e pelo servidor de banco de dados. Isso controla as interações de rede e pode melhorar substancialmente o desempenho de extração. Nota Um fetchSize excessivamente grande (> 2.048) pode causar um erro de falta de memória (OOM) durante a sincronização. | Não | 1.024 |
Script de exemplo do Writer
{ "type":"job", "version":"2.0",//Version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"oracle",//Plug-in name. "parameter":{ "postSql":[],//SQL statements to run after synchronization. "datasource":"", "session":[],//Database connection session parameters. "column":[//Fields. "id", "name" ], "encoding":"UTF-8",//Encoding format. "batchSize":1024,//Number of records submitted in one batch. "table":"",//Table name. "preSql":[]//SQL statements to run before synchronization. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"//Number of error records. }, "speed":{ "throttle":true,//When throttle is false, mbps is ignored and throughput is unlimited; when true, throughput is limited. "concurrent":1, //Job concurrency. "mbps":"12"//Rate limit. Here, 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Parâmetros do script do Writer
|
Parâmetro |
Descrição |
Obrigatório |
Valor padrão |
|
datasource |
Nome da fonte de dados. No modo de script, é possível adicionar uma fonte de dados. O valor deve corresponder ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
table |
Nome da tabela de destino. Se o schema da tabela for diferente do nome de usuário configurado, use schema.table como formato da tabela. |
Sim |
Nenhum |
|
writeMode |
Escolha o modo de importação. Apenas INSERT INTO é aceito. Em caso de conflito de chave primária ou índice único, a linha não é gravada e é relatada como dados incorretos. |
Não |
insert into |
|
column |
Campos da tabela de destino a serem gravados, separados por vírgulas. Exemplo: |
Sim |
Nenhum |
|
preSql |
Instruções SQL a serem executadas antes da tarefa de sincronização. O modo assistente permite uma instrução; o modo de script aceita várias instruções, como limpar dados antigos. |
Não |
Nenhum |
|
postSql |
Instruções SQL a serem executadas após a tarefa de sincronização. O modo assistente permite uma instrução; o modo de script aceita várias instruções, como adicionar um carimbo de data e hora. |
Não |
Nenhum |
|
batchSize |
Número de registros enviados em um lote. Isso reduz bastante as interações de rede entre o Data Integration e o Oracle e melhora o throughput. Um valor excessivamente grande pode causar um erro de falta de memória (OOM) durante a sincronização. |
Não |
1.024 |