Com o Datastream, é possível transmitir dados históricos e mudanças em andamento de um banco de dados Oracle de origem para o destino para análise em tempo real e sincronização de banco de dados.
Antes de configurar uma origem do Oracle, revise o comportamento de replicação, as versões e os tipos de banco de dados compatíveis, a configuração do banco de dados, as práticas recomendadas e as limitações conhecidas no Datastream.
Comportamento
O Datastream é compatível com dois métodos de extração de alterações nos dados de arquivos de registro do tipo redo log on-line: o leitor de registros binários do Oracle (pré-lançamento) e o Oracle LogMiner.
Com o método de leitor de registro binário (pré-lançamento), o seguinte comportamento é observado:
Se houver um atraso de leitura ao extrair as alterações dos arquivos de registro on-line, o Datastream vai extrair as alterações dos arquivos de registro arquivados.
O Datastream replica apenas as alterações confirmadas no destino. As transações não confirmadas ou revertidas não são replicadas.
O leitor binário é compatível com a replicação de colunas
VARCHAR2do Oracle com mais de 4.000 caracteres.
O Datastream também é compatível com o recurso Oracle LogMiner para expor alterações nos dados. O método tem o seguinte comportamento:
- Todos os esquemas ou esquemas específicos de um determinado banco de dados, bem como todas as tabelas de esquemas ou tabelas específicas, podem ser selecionados.
- Todos os dados históricos são replicados.
- Todas as alterações da linguagem de manipulação de dados (DML), como inserções, atualizações e exclusões dos bancos de dados e tabelas especificados, são replicadas.
- O Datastream replica alterações confirmadas e, em alguns casos, alterações não confirmadas no destino. O Datastream lê alterações não confirmadas. No caso de reversão, os registros de saída do Datastream também incluem a operação oposta. Por exemplo, se houver uma operação
INSERTrevertida, os registros de saída também conterão uma operaçãoDELETEcorrespondente. Nesse caso, o evento aparecerá comoDELETEapenas com oROWID.
Preenchimento baseado em ROWID
No Oracle, ROWID é uma pseudocoluna que armazena identificadores exclusivos para linhas em uma tabela. O Datastream usa os valores ROWID para as operações de preenchimento. Por isso, recomendamos que você não realize ações que possam mudar os valores de ROWID no banco de dados Oracle de origem até que a operação de preenchimento seja concluída.
As ações que podem mudar os valores de ROWID incluem:
Movimento físico de linhas:
- Operações de exportação e importação: quando você exporta uma tabela e a importa de volta, o local físico das linhas pode mudar, resultando em novos valores de
ROWID. - Comando
ALTER TABLE (...) MOVE: mover uma tabela para um espaço de tabela diferente pode mudar o armazenamento físico e levar a mudanças deROWID. - Comando
ALTER TABLE (...) SHRINK SPACE: compacta a tabela, o que pode mover linhas e afetar os valores deROWID. - Operações de particionamento: dividir, mesclar ou mover partições pode mudar o posicionamento físico das linhas e os valores de
ROWIDdelas.
- Operações de exportação e importação: quando você exporta uma tabela e a importa de volta, o local físico das linhas pode mudar, resultando em novos valores de
Operações de flashback:
- Comando
FLASHBACK TABLE: restaurar uma tabela para um estado anterior envolve excluir e reinserir linhas, criando novos valores deROWID. FLASHBACK_TRANSACTION_QUERY: semelhante aFLASHBACK TABLE. A reversão de uma transação pode causar mudanças emROWIDse as linhas foram excluídas ou atualizadas na transação.
- Comando
Resolver problemas de preenchimento de tabela de partição do Oracle 11.2.0.4
Se o preenchimento falhar em uma tabela particionada no Oracle 11.2.0.4 com um erro de busca inesperado (índice fora dos limites), isso ocorre devido a um bug de metadados do Oracle em que as consultas a ALL_OBJECTS não retornam subpartições.
- Solução alternativa: revogue temporariamente o privilégio
SELECT ON DBA_EXTENTSdo usuário do Datastream (por exemplo,REVOKE SELECT ON sys.dba_extents FROM USER_NAME;). Isso força o Datastream a usar o preenchimento baseado em índice, ignorando o problema de metadados.
Bancos de dados em espera
Quando você usa um banco de dados em espera do Oracle Active Data Guard como origem,
o Datastream lê os redo logs arquivados. Para garantir que o Datastream processe apenas redo logs que foram aplicados ao banco de dados em espera, filtre as visualizações padrão do Oracle, como V$ARCHIVED_LOG e GV$ARCHIVED_LOG, para incluir apenas registros com o filtro APPLIED = 'YES'.
Para isso, crie visualizações personalizadas. Conceda ao usuário do Datastream o acesso adequado a essas visualizações. Exemplo:
CREATE OR REPLACE VIEW USER_NAME.local_v$archived_log AS
SELECT * FROM sys.v_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE OR REPLACE VIEW USER_NAME.local_gv$archived_log AS
SELECT * FROM sys.gv_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE SYNONYM USER_NAME.v$archived_log FOR USER_NAME.local_v$archived_log;
CREATE SYNONYM USER_NAME.gv$archived_log FOR USER_NAME.local_gv$archived_log;
O uso do filtro APPLIED = 'YES' tem uma implicação na atualização de dados.
O Datastream aguarda até que o processo de recuperação gerenciada (MRP, na sigla em inglês) do banco de dados em espera aplique os registros e atualize a coluna APPLIED para YES antes de extrair as alterações. Se o processo de MRP for atrasado ou pausado, por exemplo, se você
suspender o processo de aplicação em espera, isso vai afetar diretamente a atualização dos
dados replicados. O Datastream entra em um loop de repetição e atrasa o processamento
até que os registros arquivados recém-aplicados fiquem disponíveis.
Essa configuração é muito relevante ao replicar tabelas que incluem colunas de objetos grandes (LOB, na sigla em inglês). Para operações UPDATE, os valores detalhados das colunas LOB
não estão presentes nos redo logs. Portanto, o Datastream precisa
consultar o banco de dados para buscar a linha associada. Se o Datastream
processar um redo log não aplicado e tentar buscar o valor do LOB no
banco de dados em espera, ele poderá buscar um valor incorreto e desatualizado. Ao filtrar os
registros para garantir que eles sejam totalmente aplicados primeiro, o Datastream recupera os
dados corretos.
Versões
O Datastream é compatível com as seguintes versões do banco de dados Oracle:
- Oracle 11g, versão 11.2.0.4 (compatível apenas com o método CDC do Logminer)
- Oracle 12c, versão 12.1.0.2
- Oracle 12c, versão 12.2.0.1
- Oracle 18c
- Oracle 19c
- Oracle 21c
O Datastream é compatível com os seguintes tipos de banco de dados Oracle:
- Auto-hospedado no local ou em qualquer provedor de nuvem
- Amazon RDS para Oracle
- Oracle Cloud
- Oracle Exadata
- Oracle RAC
- Banco de dados em espera do Oracle Active Data Guard
Configuração
Para configurar um banco de dados Oracle de origem para que os dados dele possam ser transmitidos para um destino, é necessário configurar o banco de dados para conceder acesso, configurar a geração de registros e definir uma política de retenção.
Consulte Configurar um banco de dados Oracle de origem para saber como configurar esse banco de dados para que o Datastream possa extrair dados dele para um destino.
Práticas recomendadas
Nesta seção, descrevemos as práticas recomendadas para configurar sua origem do Oracle para uso com o Datastream.
Diferenciação de maiúsculas e minúsculas para leitor binário
Ao configurar uma origem do Oracle com o método CDC de leitor binário e especificar nomes de diretório para redo logs e registros de arquivo, lembre-se de que os nomes diferenciam maiúsculas de minúsculas. Verifique se os nomes de diretório fornecidos no perfil de conexão do Datastream correspondem exatamente aos nomes de diretório no banco de dados Oracle.
Simultaneidade de CDC
Para minimizar o atraso de replicação, verifique se o Datastream pode processar redo logs
com a mesma rapidez com que a origem do Oracle os cria. Ao usar o método CDC do leitor binário, a simultaneidade do Datastream está no nível do arquivo de registro de refazer: cada tarefa definida por maxConcurrentCdcTasks processa um arquivo por vez.
Recomendamos que você use a seguinte metodologia:
- Ajuste a simultaneidade no Datastream:identifique o número médio de trocas de redo log durante o horário de funcionamento de pico e configure o parâmetro
maxConcurrentCdcTasksde acordo. Para mais informações, consulte Número máximo de tarefas de CDC. - Configurar a troca de registros do Oracle:configure o Oracle para trocar registros com frequência, por exemplo, a cada 10 a 20 minutos. Isso cria um fluxo constante de unidades de trabalho menores, permitindo que as tarefas simultâneas do Datastream funcionem em paralelo de maneira eficaz.
Recomendamos que você otimize suas configurações para que haja tarefas simultâneas suficientes no Datastream para lidar com a criação frequente de redo logs menores do Oracle. Para mais informações, consulte controles de simultaneidade de stream.
Limitações conhecidas
Limitações conhecidas para o uso do banco de dados Oracle como fonte incluem:
- Os streams são limitados a 10.000 tabelas. Se um stream incluir mais de 10.000 tabelas, ele poderá apresentar erros.
- O Datastream é compatível com a arquitetura de vários locatários (multi-tenant) da Oracle (CDB/PDB). No entanto, só é possível replicar um único banco de dados plugável em um stream.
- O banco de dados autônomo da Oracle não é compatível.
- Para tabelas que não têm uma chave primária, o Datastream usa o
ROWIDda linha para realizar uma operação de mesclagem no lado do consumidor. OROWIDpode não ser exclusivo. Se você excluir e reinserir uma linha com o utilitário de exportação/importação da Oracle, por exemplo, oROWIDda linha poderá mudar. Se você excluir uma linha, o Oracle poderá reatribuir oROWIDdela a uma nova linha inserida posteriormente. - As tabelas organizadas pelo índice (IOTs) não são compatíveis.
- Tabelas temporárias não são compatíveis.
- Os seguintes tipos de dados do Oracle não são compatíveis e não são replicados. As colunas desses tipos são replicadas como valores
NULLno destino:ANYDATA,ANYDATASET,ANYTYPEVARRAY(matrizes Oracle)BFILE,BFILENAMEINTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTHLONG,LONG RAWUROWIDUDT- Tipos de mídia e espaciais:
ORDAUDIO,ORDDATASOURCE,ORDDICOM,ORDDOC,ORDIMAGE,ORDVIDEO,SDO_GEOMETRY(e todos os outros tipos deMDSYS.SDO_*).
Para transmitir colunas de tipos de dados de objetos grandes, como
XMLTYPE, grandes objetos binários (BLOB), grandes objetos de caracteres (CLOB) e grandes objetos de caracteres nacionais (NCLOB), é necessário incluir a flagstreamLargeObjectsna configuração do stream. Se você não incluir a flag, o Datastream não vai transmitir essas colunas, e elas serão substituídas por valoresNULLno destino. Para mais informações, consulte Ativar o streaming de objetos grandes para origens do Oracle. Ao fazer streaming desses tipos de dados, o Datastream precisa consultar o banco de dados de origem para buscar valores de LOB ausentes em um momento específico (em um processo de pesquisa ativo chamado suplementação). Isso ocorre nos seguintes cenários:- Quando payloads de LOB inalterados são descartados do redo log durante uma operação
UPDATE - Durante qualquer operação de DML que envolva tipos XML binários
- Durante qualquer DML analisada em uma tabela que contenha LOBs, se o stream usar o método LogMiner
Como o Datastream faz streaming dessas colunas consultando o banco de dados, as mudanças intermediárias podem não ser capturadas em cenários que envolvem atualizações rápidas e consecutivas ou uma exclusão rápida após uma inserção. As operações
DELETEnão acionam a suplementação. Essa limitação é particularmente relevante ao usar o modo de gravação somente anexação, que espera que todas as mudanças intermediárias sejam capturadas.- Quando payloads de LOB inalterados são descartados do redo log durante uma operação
Para o Oracle 11g, as tabelas com colunas de tipos de dados
ANYDATAouUDTnão são compatíveis, e a tabela inteira não será replicada.O Oracle Label Security (OLS) não é replicado.
O Datastream busca periodicamente o esquema mais recente da origem à medida que os eventos são processados. Se um esquema mudar, alguns eventos do novo esquema poderão ser lidos enquanto o antigo ainda estiver aplicado. Nesse caso, o Datastream detecta a mudança de esquema, aciona uma busca de esquema e reprocessa os eventos com falha.
Nem todas as alterações no esquema de origem podem ser detectadas automaticamente. Nesse caso, pode ocorrer corrupção de dados. As seguintes mudanças de esquema podem causar corrupção de dados ou falha no processamento dos eventos downstream:
- Como descartar colunas
- Como adicionar colunas no meio de uma tabela
- Como alterar o tipo de dados de uma coluna
- Como reorganizar as colunas
- Como descartar tabelas (relevantes se a mesma tabela for recriada com novos dados adicionados)
- Truncando tabelas
O Datastream não é compatível com a replicação de visualizações.
O Datastream não é compatível com a replicação de colunas virtuais (
GENERATED ALWAYS AS (...) VIRTUAL), porque o Oracle não armazena valores de colunas virtuais no disco nem os grava em redo logs. As colunas virtuais são omitidas do esquema de destino. Se uma coluna virtual fizer parte de uma chave primária composta, o Datastream vai usar apenas as colunas não virtuais como chave primária no destino, o que pode causar substituições de chaves duplicadas se as colunas restantes não forem exclusivas.O Datastream é compatível com visualizações materializadas. No entanto, as novas visualizações criadas enquanto o stream está em execução não são preenchidas automaticamente.
Ao usar o método Oracle LogMiner, as instruções
SAVEPOINTnão são compatíveis e podem causar discrepância de dados em caso de reversão.Ao usar o método de leitor binário, as tabelas particionadas dinamicamente não são compatíveis.
Ao usar o método Oracle LogMiner, o Datastream não oferece suporte à replicação de tabelas e colunas com nomes que excedam 30 caracteres.
O Datastream é compatível com as seguintes codificações de conjunto de caracteres para bancos de dados Oracle:
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
O Datastream não oferece suporte à replicação de valores de data zero. Essas datas são substituídas por valores
NULL.O Datastream não é compatível com a conectividade direta a bancos de dados usando o recurso Single Client Access Name (SCAN) em ambientes do Oracle Real Application Clusters (RAC). Para informações sobre possíveis soluções, consulte Comportamento e limitações da origem do Oracle.
Se a origem for um banco de dados em espera do Oracle Active Data Guard, o Datastream será compatível apenas com a criptografia no nível do espaço de tabela, e não com a criptografia no nível da coluna.
Outras limitações ao usar o leitor binário
O método de leitor binário de alto desempenho é compatível apenas com o Oracle 12c e versões mais recentes. Para o Oracle 11g e versões anteriores, use o LogMiner.
O leitor binário não é compatível com os seguintes recursos:
- Criptografia transparente de banco de dados (TDE)
- Compactação de coluna híbrida
- Proteger arquivos
- O ASM não é compatível com origens do Amazon RDS.
- O método CDC do leitor binário não é compatível com o Oracle 11g e versões anteriores.
A seguir
- Saiba como configurar uma origem do Oracle para uso com o Datastream.