Migre colunas geradas virtualmente do Oracle para o Postgre SQL - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Migre colunas geradas virtualmente do Oracle para o Postgre SQL

Criado por Veeranjaneyulu Grandhi (AWS), Rajesh Madiwale () e Ramesh Pathuri () AWS AWS

Ambiente: produção

Origem: banco de dados Oracle

Alvo: Compatível com Amazon RDS for Postgre SQL ou SQL Aurora Postgre

Tipo R: redefinir arquitetura

Workload: Oracle

Tecnologias: migração; bancos de dados

AWSserviços: Amazon Aurora; Amazon; RDS AWS DMS

Resumo

Na versão 11 e anteriores, o Postgre SQL não fornece um recurso diretamente equivalente a uma coluna virtual Oracle. Lidar com colunas geradas virtualmente durante a migração do Oracle Database para o Postgre SQL versão 11 ou anterior é difícil por dois motivos: 

  • As colunas virtuais não são visíveis durante a migração.

  • O Postgre SQL não suporta a generate expressão antes da versão 12.

No entanto, existem soluções alternativas para emular funcionalidades semelhantes. Ao usar o AWS Database Migration Service (AWSDMS) para migrar dados do Oracle Database para o Postgre SQL versão 11 e anterior, você pode usar funções de gatilho para preencher os valores nas colunas geradas virtualmente. Esse padrão fornece exemplos do banco de dados Oracle e SQL do código Postgre que você pode usar para essa finalidade. NãoAWS, você pode usar o Amazon Relational Database Service (Amazon) para SQL Postgre ou o RDS Amazon Aurora Postgre -Compatible Edition para seu banco de dados SQL Postgre. SQL

A partir da SQL versão 12 do Postgre, as colunas geradas são suportadas. As colunas geradas podem ser calculadas a partir de outros valores de coluna em tempo real ou calculadas e armazenadas. As colunas SQL geradas pelo Postgre são semelhantes às colunas virtuais da Oracle.

Pré-requisitos e limitações

Pré-requisitos

  • Uma AWS conta ativa

  • Um banco de dados Oracle de origem

  • Bancos de SQL dados Postgre de destino (compatíveis com Amazon RDS para Postgre ou SQL Aurora Postgre) SQL

  • Experiência em codificação PL/Pg SQL

Limitações

  • Aplica-se somente às SQL versões do Postgre anteriores à versão 12. 

  • Aplica-se ao Oracle Database versão 11g ou superior.

  • As colunas virtuais não são suportadas nas ferramentas de migração de dados.

  • Aplica-se somente às colunas definidas na mesma tabela.

  • Se uma coluna virtual gerada se referir a uma função determinística definida pelo usuário, ela não poderá ser usada como uma coluna principal de particionamento.

  • A saída da expressão deve ser um valor escalar. Ele não pode retornar um tipo de dados fornecido pelo Oracle, um tipo definido pelo usuário, LOB ou LONG RAW.

  • Os índices definidos em relação a colunas virtuais são equivalentes aos índices baseados em funções no Postgre. SQL

  • As estatísticas da tabela devem ser coletadas.

Ferramentas

  • pgAdmin 4 é uma ferramenta de gerenciamento de código aberto para o PostgreSQL. Essa ferramenta fornece uma interface gráfica que simplifica a criação, manutenção e uso de objetos de banco de dados.

  • O Oracle SQL Developer é um ambiente de desenvolvimento gratuito e integrado para trabalhar com bancos de dados Oracle SQL em implantações tradicionais e em nuvem. 

Épicos

TarefaDescriçãoHabilidades necessárias

Crie uma tabela de origem do Oracle Database.

No Oracle Database, crie uma tabela com colunas geradas virtuais usando a instrução a seguir.

CREATE TABLE test.generated_column ( CODE NUMBER, STATUS VARCHAR2(12) DEFAULT 'PreOpen', FLAG CHAR(1) GENERATED ALWAYS AS (CASE UPPER(STATUS) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) VIRTUAL VISIBLE );

Nessa tabela de origem, os dados na STATUS coluna são migrados AWS DMS para o banco de dados de destino. No entanto, a FLAG coluna é preenchida usando a generate by funcionalidade, portanto, essa coluna não fica visível AWS DMS durante a migração. Para implementar a funcionalidade de generated by, você deve usar gatilhos e funções no banco de dados de destino para preencher os valores na coluna FLAG, conforme mostrado no próximo épico.

DBA, Desenvolvedor de aplicativos

Crie uma SQL tabela Postgre de destino em. AWS

Crie uma SQL tabela do Postgre AWS usando a seguinte declaração.

CREATE TABLE test.generated_column ( code integer not null, status character varying(12) not null , flag character(1) );

Nessa tabela, a coluna status é uma coluna padrão. A coluna flag será uma coluna gerada com base nos dados da coluna status.

DBA, Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Crie um SQL gatilho do Postgre.

No PostgreSQL, crie um gatilho.

CREATE TRIGGER tgr_gen_column AFTER INSERT OR UPDATE OF status ON test.generated_column FOR EACH ROW EXECUTE FUNCTION test.tgf_gen_column();
DBA, Desenvolvedor de aplicativos

Crie uma função de SQL gatilho do Postgre.

No PostgreSQL, crie uma função para o gatilho. Essa função preenche uma coluna virtual que é inserida ou atualizada pelo aplicativo ou AWS DMS valida os dados.

CREATE OR REPLACE FUNCTION test.tgf_gen_column() RETURNS trigger AS $VIRTUAL_COL$ BEGIN IF (TG_OP = 'INSERT') THEN IF (NEW.flag IS NOT NULL) THEN RAISE EXCEPTION 'ERROR: cannot insert into column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF (NEW.flag::VARCHAR != OLD.flag::varchar) THEN RAISE EXCEPTION 'ERROR: cannot update column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF TG_OP IN ('INSERT','UPDATE') THEN IF (old.flag is NULL) OR (coalesce(old.status,'') != coalesce(new.status,'')) THEN UPDATE test.generated_column SET flag = (CASE UPPER(status) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) WHERE code = new.code; END IF; END IF; RETURN NEW; END $VIRTUAL_COL$ LANGUAGE plpgsql;
DBA, Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Crie uma instância de replicação.

Para criar uma instância de replicação, siga as instruções na AWS DMS documentação. A instância de replicação deve estar na mesma nuvem privada virtual (VPC) dos bancos de dados de origem e destino.

DBA, Desenvolvedor de aplicativos

Criar endpoints de origem e de destino.

Para criar os endpoints, siga as instruções na AWS DMS documentação.

DBA, Desenvolvedor de aplicativos

Testar as conexões do endpoint.

Você pode testar as conexões do endpoint especificando a instância de replicação VPC e escolhendo Executar teste.

DBA, Desenvolvedor de aplicativos

Crie e inicie uma tarefa de carga completa.

Para obter instruções, consulte Criação de uma tarefa e Configurações de tarefa de carga completa na AWS DMS documentação.

DBA, Desenvolvedor de aplicativos

Valide os dados da coluna virtual.

Compare os dados na coluna virtual nos bancos de dados de origem e de destino. Você pode validar os dados manualmente ou escrever um script para essa etapa.

DBA, Desenvolvedor de aplicativos

Recursos relacionados