Migra le colonne virtuali generate da Oracle a Postgre SQL - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Migra le colonne virtuali generate da Oracle a Postgre SQL

Creato da Veeranjaneyulu Grandhi (AWS), Rajesh Madiwale () e Ramesh Pathuri () AWS AWS

Ambiente: produzione

Fonte: Oracle Database

Target: compatibile con Amazon RDS for Postgre o SQL Aurora Postgre SQL

Tipo R: Re-architect

Carico di lavoro: Oracle

Tecnologie: migrazione; database

AWSservizi: Amazon Aurora; Amazon; RDS AWS DMS

Riepilogo

Nella versione 11 e precedenti, Postgre SQL non fornisce una funzionalità direttamente equivalente a una colonna virtuale Oracle. La gestione delle colonne virtuali generate durante la migrazione da Oracle Database a Postgre SQL versione 11 o precedente è difficile per due motivi: 

  • Le colonne virtuali non sono visibili durante la migrazione.

  • Postgre SQL non supporta l'generateespressione prima della versione 12.

Tuttavia, esistono soluzioni alternative per emulare funzionalità simili. Quando si utilizza AWS Database Migration Service (AWSDMS) per migrare i dati da Oracle Database a Postgre SQL versione 11 e precedenti, è possibile utilizzare le funzioni di attivazione per popolare i valori nelle colonne virtuali generate. Questo modello fornisce esempi di SQL codice Oracle Database e Postgre che è possibile utilizzare per questo scopo. SìAWS, puoi usare Amazon Relational Database Service (Amazon) per SQL Postgre o RDS Amazon Aurora Postgre -Compatible Edition per il tuo database SQL Postgre. SQL

A partire dalla versione 12 di Postgre, sono supportate le colonne generate. SQL Le colonne generate possono essere calcolate istantaneamente a partire dai valori di altre colonne oppure calcolate e memorizzate. Le colonne SQL generate da Postgre sono simili alle colonne virtuali Oracle.

Prerequisiti e limitazioni

Prerequisiti

  • Un account attivo AWS

  • Un database Oracle di origine

  • SQLDatabase Postgre di destinazione (su Amazon RDS for Postgre SQL o Aurora Postgre -Compatibile) SQL

  • SQLEsperienza nella codifica PL/pg

Limitazioni

  • Si applica solo alle versioni di Postgre SQL precedenti alla versione 12. 

  • Si applica alla versione 11g o successiva del database Oracle.

  • Le colonne virtuali non sono supportate negli strumenti di migrazione dei dati.

  • Si applica solo alle colonne definite nella stessa tabella.

  • Se una colonna generata virtuale fa riferimento a una funzione deterministica definita dall'utente, non può essere utilizzata come colonna chiave di partizionamento.

  • L'output dell'espressione deve essere un valore scalare. Non può restituire un tipo di dati fornito da Oracle, un tipo definito dall'utente o. LOB LONG RAW

  • Gli indici definiti in base a colonne virtuali sono equivalenti agli indici basati su funzioni in Postgre. SQL

  • Le statistiche delle tabelle devono essere raccolte.

Strumenti

  • pgAdmin 4 è uno strumento di gestione open source per SQL Postgre. Questo strumento fornisce un'interfaccia grafica che semplifica la creazione, la manutenzione e l'uso degli oggetti del database.

  • Oracle SQL Developer è un ambiente di sviluppo gratuito e integrato con cui lavorare SQL nei database Oracle in implementazioni tradizionali e cloud. 

Epiche

AttivitàDescrizioneCompetenze richieste

Creare una tabella del database Oracle di origine.

In Oracle Database, crea una tabella con colonne virtuali generate utilizzando la seguente istruzione.

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 );

In questa tabella di origine, i dati nella STATUS colonna vengono migrati AWS DMS al database di destinazione. La FLAG colonna, tuttavia, viene popolata utilizzando generate by funzionalità, quindi questa colonna non è visibile AWS DMS durante la migrazione. Per implementare la funzionalità digenerated by, è necessario utilizzare i trigger e le funzioni nel database di destinazione per popolare i valori nella FLAG colonna, come illustrato nella prossima epopea.

DBA, Sviluppatore di app

Crea una SQL tabella Postgre di destinazione su. AWS

Crea una SQL tabella Postgre su AWS usando la seguente istruzione.

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

In questa tabella, la status colonna è una colonna standard. La flag colonna sarà una colonna generata in base ai dati contenuti nella status colonna.

DBA, Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Crea un trigger Postgre. SQL

In PostgreSQL, crea un trigger.

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, Sviluppatore di app

Crea una funzione di SQL attivazione di Postgre.

In PostgreSQL, crea una funzione per il trigger. Questa funzione popola una colonna virtuale che viene inserita o aggiornata dall'applicazione o e convalida AWS DMS i dati.

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, Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Creare un'istanza di replica.

Per creare un'istanza di replica, segui le istruzioni nella AWS DMS documentazione. L'istanza di replica deve trovarsi nello stesso cloud privato virtuale (VPC) dei database di origine e di destinazione.

DBA, Sviluppatore di app

Crea endpoint di origine e destinazione.

Per creare gli endpoint, segui le istruzioni nella AWS DMS documentazione.

DBA, Sviluppatore di app

Verifica le connessioni degli endpoint.

È possibile testare le connessioni degli endpoint specificando l'istanza di replica VPC e scegliendo Esegui test.

DBA, Sviluppatore di app

Crea e avvia un'attività a pieno carico.

Per istruzioni, consulta Creazione di un'attività e Impostazioni di caricamento completo dell'attività nella AWS DMS documentazione.

DBA, Sviluppatore di app

Convalida i dati per la colonna virtuale.

Confronta i dati nella colonna virtuale nei database di origine e di destinazione. È possibile convalidare i dati manualmente o scrivere uno script per questo passaggio.

DBA, Sviluppatore di app

Risorse correlate