Esegui la migrazione di un database Oracle a Cloud SQL per PostgreSQL utilizzando Striim

Last reviewed 2021-06-28 UTC

In questo tutorial utilizzerai Striim per eseguire la migrazione di Oracle® Database Enterprise Edition 18c o versioni successive da un ambiente on-premise o cloud a un'istanza Cloud SQL per PostgreSQL su Google Cloud. Il tutorial utilizza le tabelle nello schema di esempio di Oracle HR.

Questo tutorial è rivolto agli architect di database, ai database engineer e ai proprietari di dati aziendali che prevedono di utilizzare Striim per eseguire la migrazione o replicare i database Oracle in Cloud SQL per PostgreSQL. Dovresti avere una conoscenza di base di come usare Striim per creare pipeline. Dovresti anche acquisire familiarità con l'interfaccia utente web di Sttriim, i concetti chiave di Sttriim e come creare un'applicazione utilizzando il Designer Flow di Striim.

Striim è un partner tecnologico per la migrazione dei database di Google Cloud. Striim semplifica le migrazioni online utilizzando un'interfaccia di trascinamento per configurare lo spostamento continuo dei dati tra i database. Per le migrazioni a Google Cloud, Striim offre una piattaforma di inserimento di flussi di dati non invasiva per l'estrazione, la trasformazione e il caricamento (ETL), efficiente per il deployment e facile da eseguire. Per creare la pipeline di migrazione, utilizzerai flow Designer di Striim in questo tutorial.

Se la migrazione del database non è una cosa che conosci, consulta questa presentazione tecnica di Cloud Next '19.

Architettura

La migrazione del database tramite Striim prevede due fasi di spostamento sequenziale dei dati:

  • Fase 1: replica iniziale una tantum del database Oracle.
  • Fase 2: la replica continua di ogni modifica sottoposta a commit sul sistema di database di origine in seguito utilizzando Change Data Capture (CDC).

Il seguente diagramma illustra un'architettura di deployment di base:

L'architettura di deployment si connette a un database Oracle e scrive dati in un'istanza Cloud SQL per PostgreSQL su Google Cloud.

Questa architettura prevede l'esecuzione dell'applicazione Striim su un'istanza di Compute Engine. Si connette a un database Oracle ospitato on-premise o nel cloud e scrive dati in un'istanza Cloud SQL per PostgreSQL su Google Cloud.

Per evitare problemi di rete o di connettività tra le istanze Striim e Cloud SQL, utilizza la stessa rete per entrambe le istanze. Puoi eseguire il deployment di Striim da Google Cloud Marketplace su un'istanza Compute Engine oppure, se hai bisogno di una disponibilità elevata, puoi eseguire il deployment di Striim come cluster.

Per questo tutorial, esegui il deployment da Cloud Marketplace.

Il vantaggio del deployment di Striim da Cloud Marketplace è che ti consente di connetterti a vari database e origini dati utilizzando i loro adattatori integrati. Puoi collegare gli adattatori utilizzando Flow Designer, l'interfaccia interattiva di trascinamento di Striim, in modo da formare un grafico aciclico. Questo grafico è noto anche come pipeline Spark o applicazione Sttriim.

Il caso d'uso della migrazione in questo tutorial utilizza tre adattatori Striim:

  • Lettore database: legge i dati dal database di origine Oracle durante la fase di caricamento iniziale.
  • Lettore Oracle: legge i dati utilizzando LogMiner dal database di origine Oracle durante la fase di replica continua dei dati.
  • Database Writer: scrive i dati nel database Cloud SQL per PostgreSQL durante il caricamento iniziale e la replica continua dei dati.

Obiettivi

  • Prepara il tuo database Oracle come database di origine per la migrazione o la replica.

  • Prepara un database Cloud SQL per PostgreSQL come database di destinazione per la migrazione o la replica.

  • Soddisfare i prerequisiti per l'installazione e l'esecuzione di Striim.

  • Converti lo schema del database Oracle nello schema corrispondente in PostgreSQL.

  • Esegui il caricamento iniziale dal database Oracle a Cloud SQL per PostgreSQL.

  • Configura la replica continua dal tuo database Oracle a Cloud SQL per PostgreSQL.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

La soluzione Striim in Cloud Marketplace offre una licenza di prova gratuita a tempo limitato. Alla scadenza della prova, i costi di utilizzo vengono addebitati sul tuo account Google Cloud. Puoi anche ottenere licenze Striim direttamente da Striim per il deployment on-premise e in una macchina virtuale (VM) di Compute Engine. Potrebbero essere applicati costi associati all'esecuzione di un database Oracle al di fuori di Google Cloud.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

Questo tutorial presuppone che tu disponga già di quanto segue:

  • Un Oracle Database Enterprise Edition 18c o versioni successive per Linux x86-64 di cui vuoi eseguire la migrazione.
  • Un Compute Engine che esegue CentOS in cui è installato Striim. Puoi eseguire il deployment di Striim tramite la soluzione Google Cloud Marketplace.

Preparazione del database Oracle

Le seguenti sezioni illustrano le modifiche alla configurazione che potrebbero essere necessarie per la connessione al database Oracle e per la migrazione con Striim. Per i dettagli di configurazione, consulta Attività di configurazione Oracle di base.

Scegli l'origine per Oracle CDC

Anche se esistono diverse origini CDC Oracle, questo tutorial utilizza LogMiner. Per informazioni sulle opzioni alternative, consulta la pagina Origini CDC Oracle alternative.

Prepara Oracle Database Enterprise Edition 18c (o versioni successive)

Per preparare il database Oracle, segui le istruzioni nella pagina della documentazione di Sttriim per i seguenti passaggi:

  1. Attiva archivelog di Striim.
  2. Abilita dati di log supplementari Striim.
  3. Abilita la registrazione della chiave primaria Striim.
  4. Crea un utente Oracle con privilegi di LogMiner per Striim.

    Per eseguire questi passaggi, devi disporre di una connessione al database del container (CDB), indipendentemente dal fatto che tu stia eseguendo la migrazione di un database CDB o di un database modulare (PDB). Ti consigliamo di installare e utilizzare SQL*Plus per interagire con il database Oracle.

  5. Crea una tabella quiescemarker Striim.

    L'adattatore Oracle Reader per CDC di Striim richiede una tabella per l'archiviazione dei metadati quando chiude un'applicazione. Se utilizzi LogMiner come origine per CDC (come in questo tutorial), hai bisogno della tabella quiescemark. Devi essere connesso alla CDB quando segui i passaggi per creare la tabella.

  6. Stabilisci la connettività di rete tra il tuo database Oracle e l'istanza Striim.

    Per impostazione predefinita, il Listener Oracle si trova sulla porta 1521. Assicurati che l'indirizzo IP per l'istanza Striim possa connettersi alla porta del listener Oracle e che nessuna regola firewall lo blocchi. La porta su cui è configurato il listener Oracle si trova nel file $ORACLE_HOME/network/admin/tnsnames.ora.

  7. Prendi nota del numero di modifica del sistema (SCN) per il database Oracle.

    La SCN è un timestamp interno utilizzato per fare riferimento alle modifiche apportate a un database.

    Nel tuo database Oracle, recupera la SCN meno recente:

    SELECT MIN(start_scn) FROM gv$transaction;
    

    Copia questo numero. Ti servirà in un secondo momento nei passaggi della pipeline di replica continua.

Preparazione dell'istanza Striim

Per informazioni sui sistemi operativi supportati da Striim, consulta i requisiti di sistema. Per utilizzare il lettore Oracle con LogMiner, inserisci il driver JDBC Oracle nel classpath Java nella tua istanza Striim. Completa i seguenti passaggi su ogni server Striim che esegue un adattatore Oracle Reader:

  1. Accedi al tuo account Oracle, quindi scarica il file ojdbc8.jar sulla tua macchina locale.
  2. Fai clic sul link Scarica per il file ojdbc8.jar.

    • Fai clic su Ho esaminato e accetto il contratto di licenza Oracle per scaricare il file, se accetti i termini di licenza.
  3. In Cloud Shell, crea un bucket Cloud Storage e carica al suo interno il file .jar:

    gsutil mb -b on -l REGION gs://BUCKET_NAME
    gsutil cp PATH/ojdbc8.jar gs://BUCKET_NAME
    

    Sostituisci quanto segue:

    • REGION: la regione in cui vuoi creare il bucket Cloud Storage
    • BUCKET_NAME: nome del bucket Cloud Storage in cui vuoi archiviare il file ojdbc8.jar
    • PATH: il percorso in cui hai scaricato il file ojdbc8.jar

    Dopo aver salvato il file sulla macchina locale, ti consigliamo di caricare il file .jar in un bucket Cloud Storage per poterlo scaricare in qualsiasi istanza.

  4. Apri una sessione SSH con l'istanza Striim, quindi scarica il file .jar sull'istanza Striim e posizionalo nella directory /opt/striim/lib:

    sudo su - striim gsutil cp gs://BUCKET_NAME/ojdbc8.jar /opt/striim/lib
    
  5. Verifica che le autorizzazioni del file ojdbc8.jar siano corrette:

     sudo ls -l /opt/striim/lib/ojdbc8.jar
    

    L'output dovrebbe essere visualizzato come segue:

    -rwxrwx--- striim striim

  6. (Facoltativo) Se il file .jar non dispone delle autorizzazioni precedenti, imposta le autorizzazioni corretta:

    sudo chmod 770 /opt/striim/lib/ojdbc8.jar
    sudo chown striim /opt/striim/lib/ojdbc8.jar
    sudo chgrp striim /opt/striim/lib/ojdbc8.jar
    
  7. Interrompi e riavvia Striim.

    Dopo aver apportato eventuali modifiche alla configurazione (ad esempio le modifiche alle autorizzazioni precedenti), devi riavviare Striim.

    • Se utilizzi la distribuzione Linux CentOS 7, interrompi Striim:

      sudo systemctl stop striim-node
      sudo systemctl stop striim-dbms
      
    • Se utilizzi la distribuzione Linux CentOS 7, avvia Striim:

      sudo systemctl start striim-dbms
      sudo systemctl start striim-node
      

    Per ulteriori informazioni sull'arresto e sul riavvio di Striim per un altro sistema operativo, consulta Avvio e arresto di Striim

  8. Installa il client psql sull'istanza Striim.

    Puoi utilizzare questo client per connetterti all'istanza Cloud SQL e creare schemi più avanti in questo tutorial.

Preparazione dello schema di Cloud SQL per PostgreSQL

Quando copi o replichi continuamente i dati tabulari da un database all'altro, Striim richiede in genere che il database di destinazione contenga tabelle corrispondenti con lo schema corretto. Google Cloud non dispone di un'utilità per preparare lo schema, ma puoi utilizzare l'utilità di conversione dello schema di Striim o un'utilità open source come ora2pg.

Mantieni le chiavi esterne durante il caricamento iniziale

Durante la fase di caricamento iniziale, presta attenzione al trattamento delle chiavi esterne. Le chiavi esterne stabiliscono la relazione tra le tabelle in un database relazionale. La creazione o l'inserimento fuori ordine di una chiave esterna nel database di destinazione potrebbe eliminare la relazione tra le due tabelle. Se l'integrità tra i due database viene compromessa, potrebbero verificarsi errori. Di conseguenza, è importante generare tutte le dichiarazioni di chiave esterna in un file separato durante l'esportazione dello schema più avanti in questa sezione.

Durante la replica continua nelle pipeline CDC, gli eventi del database di origine vengono propagati al database di destinazione nell'ordine in cui si verificano. Se gestisci correttamente le chiavi esterne nell'origine, le operazioni chiave esterna vengono replicate dall'origine nel database di destinazione nello stesso ordine.

Al contrario, per impostazione predefinita, la pipeline di caricamento iniziale carica le tabelle in ordine alfabetico. Se non disabiliti le chiavi esterne prima del caricamento iniziale, si verificheranno errori di violazione delle chiave esterna. Per replicare i dati durante il caricamento iniziale dalle tabelle del database di origine alle tabelle di destinazione su Cloud SQL per PostgreSQL, devi disabilitare i vincoli delle chiave esterna nelle tabelle. In caso contrario, i vincoli potrebbero essere violati durante il processo di replica.

A partire da giugno 2021, Cloud SQL per PostgreSQL non supporta le opzioni di configurazione per disabilitare i vincoli di chiave esterna.

Per gestire i vincoli di chiave esterna:

  1. Esporta tutte le dichiarazioni di chiave esterna in un file separato durante l'esportazione dello schema.
  2. Crea schemi di tabelle nel database Cloud SQL per PostgreSQL senza i vincoli di chiave esterna.
  3. Completa la replica iniziale dei dati.
  4. Applica i vincoli di chiave esterna alle tabelle.
  5. Crea la pipeline di replica continua.

Questo tutorial offre due opzioni per la conversione dello schema, illustrate nelle seguenti sezioni:

Convertire lo schema utilizzando l'utilità di conversione dello schema di Striim

Utilizza l'utilità di conversione dello schema di Striim per preparare Cloud SQL per PostgreSQL in modo da integrare i dati con lo schema di destinazione e creare tabelle che riflettano il database Oracle di origine.

Lo strumento di conversione dello schema Striim converte i seguenti oggetti di origine in oggetti target equivalenti:

  • Tables
  • Chiavi primarie
  • Tipi di dati
  • Vincoli univoci
  • NOT NULL vincoli
  • Chiavi esterne

Utilizzando l'utilità di conversione dello schema di Striim, puoi analizzare il database di origine e generare script DDL per creare schemi equivalenti nel database di destinazione.

Ti consigliamo di creare manualmente lo schema nel database di destinazione utilizzando gli script DDL generati. Il modo più semplice è selezionare un sottoinsieme delle tabelle, esportare lo schema e poi importarlo nel database Cloud SQL per PostgreSQL di destinazione.

L'esempio seguente mostra come preparare il database Cloud SQL per PostgreSQL di destinazione per il caricamento iniziale importando lo schema utilizzando l'utilità di conversione dello schema di Striim:

  1. Apri una connessione SSH all'istanza Striim.

  2. Vai alla directory /opt/striim:

    cd /opt/striim
    
  3. Elenca tutti gli argomenti:

    bin/schemaConversionUtility.sh --help
    
  4. Esegui l'utilità di conversione dello schema e includi i flag appropriati per il tuo caso d'uso:

    bin/schemaConversionUtility.sh \
    -s=oracle \
    -d=SOURCE_DATABASE_CONNECTION_URL \
    -u=SOURCE_DATABASE_USERNAME \
    -p=SOURCE_DATABASE_PASSWORD \
    -b=SOURCE_TABLES_TO_CONVERT \
    -t=postgres \
    -f=false
    

    Sostituisci quanto segue:

    • SOURCE_DATABASE_CONNECTION_URL: URL di connessione per il database Oracle, ad esempio "jdbc:oracle:thin:@12.123.123.12:1521/APPSPDB.WORLD" o "jdbc:oracle:thin:@12.123.123.12:1521:XE"
    • SOURCE_DATABASE_USERNAME: nome utente Oracle da utilizzare per la connessione al database Oracle
    • SOURCE_DATABASE_PASSWORD: password Oracle da utilizzare per la connessione al database Oracle
    • SOURCE_TABLES_TO_CONVERT: nomi di tabelle del database di origine utilizzati per convertire gli schemi

    Assicurati di utilizzare l'argomento -f=false. Questo argomento esporta le dichiarazioni delle chiave esterna in un file separato.

    La cartella di output potrebbe contenere alcuni o tutti i seguenti file. Per ulteriori dettagli su questi file, consulta la documentazione dell'utilità di conversione dello schema di Sttriim.

    Nome file di output Descrizione
    converted_tables.sql Contiene tutte le tabelle convertite che non richiedono alcuna coercizione
    converted_tables_with_striim_intelligence.sql Contiene tutte le tabelle convertite che sono state convertite con una certa coercizione
    conversion_failed_tables.sql Contiene tabelle in cui è stato eseguito il tentativo di conversione, ma non è stata ottenuta una mappatura
    converted_foreignkey.sql Contiene tutte le dichiarazioni del vincolo di chiave esterna
    conversion_failed_foreignkey.sql Contiene tutte le conversioni di chiave esterna non riuscite
    conversion_report.txt Contiene un report dettagliato sulla conversione dello schema

    In questo tutorial utilizzerai il file converted_tables.sql per creare tabelle equivalenti nel database Cloud SQL per PostgreSQL senza vincoli di chiave esterna. Dopo la replica iniziale, puoi utilizzare il file converted_foreignkey.sql per applicare i vincoli di chiave esterna.

Converti lo schema utilizzando Ora2Pg

Un'altra opzione per convertire gli schemi delle tabelle Oracle in schemi PostgreSQL equivalenti è l'utilità Ora2Pg. Puoi installare questa utilità su una VM Google Cloud separata.

L'utilità Ora2Pg converte lo schema Oracle ed esporta le istruzioni DDL necessarie per creare tabelle equivalenti nel database PostgreSQL. Queste istruzioni DDL vengono esportate in un file di output denominato output.sql.

Durante l'esportazione dello schema, esporta e salva tutte le dichiarazioni di chiave esterna in un file separato utilizzando il seguente flag nel file di configurazione Ora2Pg:

FILE_PER_FKEYS 1

Per impostazione predefinita, le chiavi esterne vengono esportate nel file di output principale (output.sql). Quando attivi il flag FILE_PER_FKEYS (1), le chiavi esterne vengono esportate in un file separato denominato FKEYS_output.sql.

In questo tutorial utilizzerai il file output.sql per creare tabelle equivalenti nel database Cloud SQL per PostgreSQL senza vincoli di chiave esterna. Dopo la replica iniziale, utilizza il file FKEY_output.sql per applicare i vincoli di chiave esterna.

Preparazione dell'istanza Cloud SQL per PostgreSQL

Per abilitare Striim a scrivere dati in un'istanza Cloud SQL per PostgreSQL, devi creare un'istanza Cloud SQL. Devi inoltre creare le tabelle di database e lo schema in cui Striim scrive:

  1. In Cloud Shell, crea un'istanza Cloud SQL per PostgreSQL. Ti consigliamo di configurare Cloud SQL in modo da utilizzare un indirizzo IP privato. Utilizza il parametro --network per configurare questo indirizzo:

    $INSTANCE_NAME=INSTANCE_NAME
    
    gcloud beta sql instances create INSTANCE_NAME \
        --database-version=POSTGRES_12 \
        --network=NETWORK \
        --cpu=NUMBER_CPUS \
        --memory=MEMORY_SIZE \
        --region=REGION
    

    Sostituisci quanto segue:

    • INSTANCE_NAME: il nome dell'istanza
    • NETWORK: il nome della rete VPC che utilizzi per questa istanza
    • NUMBER_CPUS: numero di vCPU nell'istanza
    • MEMORY_SIZE: quantità di memoria per l'istanza. Ad esempio, 3072MiB o 9GiB. Se non specifichi l'unità, vengono utilizzati GiB.
    • REGION: la regione in cui hai creato il bucket Cloud Storage
  2. Crea un nome utente e una password nell'istanza Cloud SQL:

    CLOUD_SQL_USERNAME=CLOUD_SQL_USERNAME
    
    gcloud sql users create $CLOUD_SQL_USERNAME \
      --instance=$INSTANCE_NAME \
      --password=CLOUD_SQL_PASSWORD
    

    Sostituisci quanto segue:

    • CLOUD_SQL_USERNAME: un nome utente per la tua istanza Cloud SQL
    • CLOUD_SQL_PASSWORD: la password per il nome utente Cloud SQL

    A questo utente è stata concessa la proprietà delle tabelle PostgreSQL. Striim utilizza anche le credenziali di questo utente per connettersi al database Cloud SQL per PostgreSQL.

    I file di schema esportati durante il passaggio di conversione dello schema potrebbero avere un'istruzione DDL che concede la proprietà a un utente, come nell'esempio seguente:

    CREATE SCHEMA <SCHEMA_NAME>;
    ALTER SCHEMA <SCHEMA_NAME> OWNER TO <USER>;
    

    Potrebbe essere necessario sostituire SCHEMA_NAME con CLOUD_SQL_SCHEMA e USER con la CLOUD_SQL_USERNAME creata in precedenza.

  3. Crea un database PostgreSQL

    CLOUD_SQL_DATABASE_NAME=CLOUD_SQL_DATABASE_NAME
    
    gcloud sql databases create $CLOUD_SQL_DATABASE_NAME \
      --instance=$INSTANCE_NAME
    

    Sostituisci quanto segue:

    • CLOUD_SQL_DATABASE_NAME: nome del database PostgreSQL
  4. Configurare il database Cloud SQL per PostgreSQL per consentire l'accesso dall'istanza Striim. Le opzioni di connettività dipendono dal fatto che tu abbia configurato l'istanza Cloud SQL per utilizzare un indirizzo IP pubblico o privato.

    1. Se hai configurato un indirizzo IP pubblico, aggiungi l'indirizzo IP dell'istanza di Striim come indirizzo autorizzato nell'istanza Cloud SQL. Il seguente screenshot mostra come eseguire questa operazione dalla console Google Cloud:

      Configurare il database Cloud SQL per PostgreSQL per consentire l'accesso dall'istanza Striim.

    2. Se hai configurato un indirizzo IP privato, le opzioni di connettività disponibili dipendono dalla presenza o meno dell'istanza Cloud SQL e di Striim sulla stessa rete VPC.

      1. Se la tua istanza Striim si trova sulla stessa rete VPC dell'istanza Cloud SQL, l'istanza Striim può stabilire una connessione con l'istanza Cloud SQL.

        Lo screenshot seguente mostra che l'istanza Cloud SQL è associata alla rete VPC predefinita. Se l'istanza Striim è stata creata anche sulla rete VPC predefinita, può connettersi privatamente con l'istanza Cloud SQL.

        l'istanza Cloud SQL è associata alla rete VPC predefinita.

      2. Se la tua istanza Striim si trova su una rete VPC diversa dall'istanza Cloud SQL, configura l'accesso privato ai servizi sulla rete VPC dell'istanza Striim.

  5. Crea schemi di tabelle senza vincoli di chiave esterna nel database Cloud SQL per PostgreSQL.

    1. Per esportare output.sql durante il passaggio di conversione dello schema, utilizza il file output.sql per creare gli schemi.

    2. Per esportare converted_tables.sql durante la fase di conversione dello schema, utilizza il file converted_tables.sql per creare gli schemi.

      Puoi eseguire entrambi gli script utilizzando qualsiasi client PostgreSQL con connettività all'istanza Cloud SQL per PostgreSQL. Tuttavia, ti consigliamo di utilizzare il client PostgreSQL installato in precedenza sull'istanza di Sttriim.

    3. Apri una sessione SSH con l'istanza Striim.

    4. Crea gli schemi:

      psql -h HOSTNAME -p CLOUD_SQL_PORT -d CLOUD_SQL_DATABASE_NAME -U CLOUD_SQL_USERNAME -f PATH_TO_MAIN_SQL_FILE
      

      Sostituisci quanto segue:

      • HOSTNAME: indirizzo IP dell'istanza Cloud SQL
      • CLOUD_SQL_PORT: porta dell'istanza Cloud SQL a cui connettersi, per impostazione predefinita questa porta è 5432
      • PATH_TO_MAIN_SQL_FILE: percorso dello script principale nell'istanza Striim

      Ad esempio:

      psql -h 12.123.123.123 -d testdb -U hr -p 5432 -f output.sql

  6. Verifica che le tabelle siano state create:

    1. Connettiti al database Cloud SQL per PostgreSQL:

      psql -h HOSTNAME -p 5432 -d CLOUD_SQL_DATABASE_NAME -U
      CLOUD_SQL_USERNAME
      
    2. Elenca le tabelle in questo database:

      \dt
      

      L'output è un elenco di tabelle create dallo script di conversione dello schema delle tabelle nel passaggio precedente.

  7. Crea una tabella di checkpoint nel database Cloud SQL per PostgreSQL:

    1. Connettiti al database Cloud SQL per PostgreSQL:

      psql -h HOSTNAME -p 5432 -d CLOUD_SQL_DATABASE_NAME -U
      CLOUD_SQL_USERNAME
      
    2. Crea la tabella:

      CREATE TABLE chkpoint (
      id character varying(100) primary key,
      sourceposition bytea,
      pendingddl numeric(1),
      ddl text);
      

      Striim ha bisogno di questa tabella per mantenere i checkpoint durante il processo di replica continua.

Caricamento del database Oracle nel database Cloud SQL per PostgreSQL

Questa sezione descrive la replica iniziale e una tantum del database Oracle nel database Cloud SQL per PostgreSQL.

Stabilisci una connessione a Oracle da Striim

Segui le indicazioni in Esecuzione di Striim in Google Cloud. Per il caricamento iniziale, utilizza l'adattatore Lettore database Striim per connetterti a Oracle da Striim. Puoi anche utilizzare la procedura guidata CDC di Striim.

  1. Nell'adattatore Lettore database Striim, vai a Origini, quindi cerca e seleziona Database dall'elenco.

  2. Imposta le seguenti proprietà nella finestra Database:

    • Nome: identifica il componente della pipeline di migrazione.
    • Alimentatore: DatabaseReader
    • URL di connessione: inserisci una stringa univoca per la connessione al database Oracle:

      jdbc:oracle:thin:@HOSTNAME:ORACLE_PORT:SID
      

      OPPURE

      jdbc:oracle:thin:@HOSTNAME:ORACLE_PORT/PDB_OR_CDB_SERVICE_NAME
      

      Sostituisci quanto segue:

      • ORACLE_PORT: porta del database Oracle (1521 per impostazione predefinita)
      • SID: SID del database Oracle
      • PDB_OR_CDB_SERVICE_NAME: nome del servizio Oracle PDB o CDB: se le tabelle si trovano in un PDB, utilizza PDB_SERVICE_NAME; se sono in un CDB, utilizza CDB_SERVICE_NAME.

      Puoi trovare la porta e il nome del servizio nel file tnsnames.ora che si trova in $ORACLE_HOME/network/admin/tnsnames.ora sull'istanza Oracle.

    • Nome utente e password: utilizza l'utente Oracle (c##striimutente) che hai creato nei passaggi preliminari. Striim utilizza questo nome utente e questa password per connettersi al database Oracle e leggere le tabelle.

    • Tabelle: per Oracle, il lettore di database richiede anche un elenco di nomi di tabella da replicare. Questa proprietà è specificata nel campo Tabelle in Mostra proprietà facoltative. Il formato di questa proprietà è il seguente:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      Sostituisci quanto segue:

      • ORACLE_SCHEMA: nome schema Oracle
      • ORACLE_TABLE_NAME: nomi delle tabelle Oracle in quello schema

      Puoi anche specificare più tabelle e viste materializzate come un elenco separato da punti e virgola o con i seguenti caratteri jolly:

      %: qualsiasi serie di personaggi

      _: qualsiasi carattere singolo

      Ad esempio, HR.% legge tutte le tabelle nello schema RU. Almeno una tabella deve corrispondere al carattere jolly. In caso contrario, il lettore di database ha esito negativo e genera il seguente errore:

      Could not find tables specified in the database

      • Silenzioso al completamento dell'IL:imposta questo campo sul colore verde facendolo scorrere verso destra per mettere in pausa la pipeline al termine del caricamento iniziale.

      • Output in: assegna un nome all'output di questo adattatore. Utilizza una stringa sensibile alle maiuscole e senza caratteri speciali o spazi.

  3. Fai clic su Salva. Le proprietà dell'adattatore mostrano:

    Proprietà di Striim Database Reader Adapter.

Testa la connessione

Ora che hai effettuato la connessione a Oracle da Striim, testa la connessione.

  1. Fai clic sull'elenco a discesa Creato per verificare la connettività di Striim al database Oracle.

  2. Fai clic su Esegui il deployment dell'app.

  3. Seleziona l'output di questo adattatore, quindi fai clic su Anteprima per visualizzare i dati in tempo reale mentre Striim li legge dall'origine.

    visualizzazione in tempo reale dei dati sorgente nell'interfaccia di Striim.

  4. Fai clic sull'elenco a discesa Deployment eseguito e quindi su Avvia app.

  5. (Facoltativo) Fai clic sull'elenco a discesa Deployment eseguito e poi su Annulla deployment app per correggere eventuali errori che si verificano.

  6. (Facoltativo) Fai clic su Riprendi app dopo aver corretto tutti gli errori per riavviare l'app.

  7. Fai clic sul gruppo di deployment predefinito.

  8. Verifica che l'opzione Convalida mapping delle tabelle sia attivata, quindi fai clic su Esegui il deployment.

    Il riquadro dei dati di anteprima e lo stato della pipeline cambiano in Quiesced.

A questo punto del tutorial, hai verificato che Striim è in grado di stabilire una connessione al tuo database Oracle e di leggere i dati al suo interno.

Aggiungi un database Cloud SQL per PostgreSQL come destinazione

Per questa migrazione, scriverai dati nell'istanza Cloud SQL per PostgreSQL. Striim fornisce un adattatore generico per la scrittura di database, chiamato Database Writer, che puoi utilizzare per la migrazione.

  1. In Striim Flow Designer, vai a Target (Obiettivi). Cerca e seleziona Cloud SQL Postgres dall'elenco.
  2. Trascina Database Writer nella pipeline.
  3. Imposta le seguenti proprietà:

    • Alimentatore: DatabaseWriter

    • URL di connessione: inserisci una stringa univoca per stabilire una connessione all'istanza Cloud SQL:

      jdbc:postgresql://CLOUD_SQL_IP_ADDRESS:CLOUD_SQL_PORT/CLOUD_SQL_DATABASE_NAME?stringtype=unspecified
      

      Sostituisci quanto segue:

      • CLOUD_SQL_IP_ADDRESS: indirizzo IP dell'istanza Cloud SQL

      Ad esempio:

      jdbc:postgresql://12.123.12.12:5432/postgres?stringtype=unspecified
      
    • Nome utente e password: inserisci il nome utente e la password Cloud SQL che hai creato in precedenza.

    • Tabelle: crea un mapping dai nomi delle tabelle del database Oracle ai nomi delle tabelle Cloud SQL. Specifica quale tabella del database Oracle viene scritta in una tabella Cloud SQL. Questo mapping utilizza il seguente formato:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME,CLOUD_SQL_SCHEMA.CLOUD_SQL_TABLE_NAME
      

      Sostituisci quanto segue:

      • CLOUD_SQL_SCHEMA: nome schema PostgreSQL
      • CLOUD_SQL_TABLE_NAME: nome tabella PostgreSQL

      Per mappare più tabelle, puoi utilizzare il carattere jolly (%) nel campo Tabelle, ad esempio:

      HR.%,hr.%
      

      I campi obbligatori per Database Writer sono contrassegnati nel seguente screenshot: Campi obbligatori per Database Writer.

Esegui il deployment della pipeline di migrazione

Quando la pipeline di migrazione è pronta, esegui il deployment da Striim Flow Designer e avvia l'applicazione. Puoi anche visualizzare l'anteprima dei dati replicati in tempo reale. Utilizza Monitora i report per tenere traccia dell'avanzamento della replica. Per monitorare l'avanzamento, seleziona l'icona Avanzamento dell'applicazione.

Fai clic sull'icona di avanzamento dell'applicazione per visualizzare l'avanzamento della replica databaase.

  1. In Striim Flow Designer, esegui il deployment della pipeline di migrazione. Fai clic sull'elenco a discesa Creato, quindi su Esegui il deployment dell'app. Una volta completato il caricamento iniziale, lo stato della pipeline diventa Quiesced.

  2. Fai clic su Annulla deployment dell'app per eseguire il rollback del deployment.

  3. Verifica che il caricamento dei dati sia riuscito controllando il conteggio delle righe:

    SELECT COUNT(*) FROM <TARGET CLOUD SQL TABLE>;
    

    Dovresti vedere un output diverso da zero. In caso contrario, il caricamento dei dati non è riuscito.

Il caricamento iniziale dei dati dal database Oracle a Cloud SQL per PostgreSQL è atomico. Il caricamento dei dati ha esito positivo oppure l'intero caricamento dei dati non va a buon fine. Se il caricamento iniziale non va a buon fine, devi caricare di nuovo i dati.

Abilitazione dei vincoli di chiave esterna nelle tabelle Cloud SQL per PostgreSQL

Una volta completato il caricamento iniziale, abilita i vincoli della chiave esterna nelle tabelle di destinazione. Utilizza il file con le dichiarazioni di chiave esterna (FKEY_output.sql o converted_foreignkey.sql) che hai creato durante la conversione dello schema.

  1. In Striim, apri una sessione SSH.

  2. Crea vincoli di chiave esterna nelle tabelle:

    psql -h HOSTNAME -d CLOUD_SQL_DATABASE_NAME -U CLOUD_SQL_USERNAME -p
    CLOUD_SQL_PORT -f PATH_TO_FOREIGN_KEY_FILE
    

    Sostituisci quanto segue:

    • CLOUD_SQL_USERNAME: nome utente Cloud SQL per PostgreSQL
    • PATH_TO_FOREIGN_KEY_FILE: percorso dello script con vincoli di chiave esterna nell'istanza Striim

      Ad esempio:

      psql -h 12.123.123.123 -d testdb -U hr -p 5432 -f output.sql

Replica continua del database Oracle in Cloud SQL per PostgreSQL

Dopo aver completato il caricamento iniziale dei dati, crea una pipeline separata per replicare le modifiche al database Oracle. Finché rimane in esecuzione, questa pipeline mantiene sincronizzato anche il database di origine con il database di destinazione.

Stabilisci una connessione a Oracle da Striim

Per la replica continua, utilizza l'adattatore Oracle Reader Striim per connetterti da Striim al database Oracle. Questo adattatore Striim può leggere i dati CDC da Oracle.

  1. Nell'adattatore Oracle Reader Striim, vai a Sources (Origini).
  2. Cerca Oracle e seleziona Oracle CDC dall'elenco visualizzato.

  3. Imposta le seguenti proprietà:

    1. URL di connessione:

      HOSTNAME:ORACLE_PORT/SID
      

      OPPURE

      HOSTNAME:ORACLE_PORT/CDB_SERVICE_NAME
      

      Sostituisci quanto segue:

      • CDB_SERVICE_NAME: nome del servizio CDB di Oracle

      L'URL di connessione è una stringa univoca utilizzata per connettersi al database Oracle. A differenza dell'adattatore Lettore di database utilizzato per il caricamento iniziale, puoi utilizzare il nome del servizio CDB, indipendentemente dal fatto che le tabelle del database siano in un PDB o CDB.

      Ad esempio: 12.123.123.12:1521/ORCLCDB.WORLD.

    2. Nome utente/password: utilizza il nome utente Oracle (c##striimutente) che hai creato nei passaggi preliminari.

      Questo utente Oracle deve disporre dei privilegi per leggere le tabelle.

    3. Tabelle:è necessario anche un elenco di nomi delle tabelle da replicare. Il nome viene specificato nel formato seguente, a seconda che le tabelle siano in formato CDB o PDB.

      Per la tabella CDB:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      Per la tabella PDB:

      PDB_NAME.ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      Sostituisci quanto segue:

      • PDB_NAME: nome Oracle PDB

      Questo comando replica le tabelle CDB o PDB. Puoi trovare PDB_NAME nel file tnsnames.ora che si trova in $ORACLE_HOME/network/admin/tnsnames.ora nell'istanza Oracle.

      Ricorda che PDB_NAME e PDB_SERVICE_NAME sono due cose diverse. Hai usato PDB_SERVICE_NAME in precedenza nella sezione. Visualizza il file tnsnames.ora per ottenere il nome PDB:

      sudo su - oracle // Login as oracle user
      cat  ORACLE_HOME/network/admin/tnsnames.ora
      

      Di seguito è riportato un esempio di PDB_NAME (APPSPDB) nel file tnsnames.ora:

        APPSPDB =
          (DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP) (HOST = orainst) (PORT = 1521))
            )
            (CONNECT_DATA =
              (SERVICE NAME = APPSPDB.WORLD)
            )
          )
      

      Per specificare più tabelle e viste materializzate come elenco, separa i nomi delle tabelle o delle viste con punti e virgola o caratteri jolly. Almeno una tabella deve corrispondere al carattere jolly; in caso contrario, il lettore Oracle non riesce e restituisce un errore Could not find tables specified in the database.

    4. Avvia SCN: per la pipeline continua, devi fornire la SCN del database Oracle. Striim ne ha bisogno per iniziare a replicare tutte le transazioni. Inserisci il valore SCN generato in precedenza.

      1. Supporto PDB e CDB: puoi utilizzare un CDB o un PDB; espandi Mostra proprietà facoltative e attiva l'opzione a destra.

      2. Tabella degli indicatori quiesce: utilizza il nome della tabella che hai creato in precedenza.

        Lo screenshot seguente fornisce una panoramica dei campi obbligatori per l'adattatore Oracle Reader:

        I campi obbligatori per l'adattatore Oracle Reader.

  4. Verifica connessione: fai clic su Verifica connessione. L'URL di connessione, il nome utente e la password sono obbligatori per testare la connettività del database. Se Striim riesce a stabilire una connessione, viene visualizzato un segno di spunta verde.

  5. Testa la capacità di Striim di leggere le tabelle di database Oracle:

    1. Nell'adattatore Oracle Reader, seleziona Esegui il deployment dell'app.
    2. Seleziona il gruppo di deployment predefinito.
    3. Fai clic su Esegui il deployment.
  6. Fai clic sull'icona a forma di onda (Output) per questo adattatore. L'icona a forma di occhio (Anteprima) visualizzata viene utilizzata per visualizzare l'anteprima dei dati in tempo reale mentre Striim li legge dalla fonte.

  7. Fai clic su Avvia app nel menu a discesa Distribuito.

    Se si verificano errori, seleziona Annulla deployment app dallo stesso menu a discesa e correggi gli errori. Dopo aver corretto gli errori, fai clic su Riprendi app per riavviare l'applicazione.

    All'avvio della pipeline, lo stato viene aggiornato in Running. Eventuali nuove modifiche alla tabella di origine vengono visualizzate nella finestra di anteprima. Poiché l'adattatore Oracle Reader utilizza la CDC, le uniche modifiche alla tabella visualizzate nel riquadro dei dati di anteprima sono quelle che si verificano dopo l'avvio dell'applicazione.

    La scheda Anteprima dati mostra le nuove modifiche alla tabella di origine in tempo reale.

Verifica la possibilità di leggere i dati CDC da Oracle

Per verificare se l'adattatore è in grado di leggere le nuove modifiche, segui queste istruzioni:

  1. Utilizza le istruzioni SQL per inserire nuove transazioni nelle tabelle di origine Oracle.
  2. Verifica che le nuove transazioni vengano visualizzate nella scheda Dati di anteprima dell'adattatore Oracle Reader.
  3. Arresta l'applicazione e fai clic su Annulla deployment. Ora sei pronto per il prossimo passaggio.

Fino a questo punto non hai aggiunto un adattatore di destinazione alla pipeline. Nessun dato viene copiato se non aggiungi un adattatore di destinazione. Nella sezione successiva aggiungerai un adattatore di destinazione.

Aggiungi un database Cloud SQL per PostgreSQL come destinazione

Per scrivere dati nel database Cloud SQL per PostgreSQL, devi aggiungere un adattatore Database Writer alla pipeline. Per la pipeline di replica continua, utilizza lo stesso adattatore utilizzato nella pipeline di caricamento iniziale.

  1. In Striim Flow Designer, vai a Destinazioni, quindi cerca e seleziona Cloud SQL Postgres dall'elenco.
  2. Trascina Database Writer nella pipeline.
  3. Imposta le seguenti proprietà:

    • Alimentatore: DatabaseWriter.

    • URL di connessione: inserisci l'URL di connessione inserito per stabilire una connessione all'istanza Cloud SQL:

    jdbc:postgresql://CLOUD_SQL_IP_ADDRESS:CLOUD_SQL_PORT/CLOUD_SQL_DATABASE_NAME?stringtype=unspecified
    

    Ad esempio:

    jdbc:postgresql://12.123.12.12:5432/postgres?stringtype=unspecified
    
    • Nome utente e password: inserisci il nome utente e la password Cloud SQL che hai creato in precedenza.

    • Tabelle: crea un mapping dai nomi delle tabelle del database Oracle ai nomi delle tabelle Cloud SQL. Specifica quale tabella di database Oracle viene scritta in una determinata tabella Cloud SQL. Questa mappatura utilizza il seguente formato:

    ORACLE_SCHEMA.ORACLE_TABLE_NAME,CLOUD_SQL_SCHEMA.CLOUD_SQL_TABLE_NAME
    

    Per mappare più tabelle, è possibile utilizzare il carattere jolly (%) nel campo Tabelle. Ad esempio:

    HR.%,hr.%
    

    Oltre a queste proprietà, devi impostare anche le seguenti proprietà per la pipeline di replica continua:

  4. Fai clic su Mostra proprietà facoltative.

  5. Seleziona il seguente valore nel campo Codice di eccezione ignorabile:

    23505,NO_OP_UPDATE,NO_OP_DELETE
    

    Poiché stai avviando la pipeline CDC da un punto storico, potrebbero esserci duplicati. Striim esegue la deduplicazione dei dati sul tuo target utilizzando le precedenti proprietà del codice di eccezione ignorabile. I dettagli sui codici di eccezione sono disponibili nella seguente tabella:

    Codice eccezione Dettagli
    23505 Il valore di chiave primaria duplicato viola il vincolo univoco
    NO_OP_UPDATE Impossibile aggiornare una riga nella destinazione (in genere perché non era presente una chiave primaria corrispondente)
    NO_OP_DELETE Impossibile eliminare una riga nella destinazione (in genere perché non era presente una chiave primaria corrispondente)
  6. Inserisci chkpoint nel campo Verifica tabella dei punti. Striim utilizza questa tabella per archiviare i metadati associati al checkpoint della pipeline di replica continua.

Attivazione del recupero e della crittografia

Prima di eseguire il deployment della pipeline CDC, ti consigliamo vivamente di abilitare il ripristino. Se l'applicazione Striim o la VM non funziona, l'abilitazione del ripristino aiuta ad assicurare che Striim possa continuare l'elaborazione. Questo passaggio aiuta anche a garantire "esattamente dopo l'elaborazione della semantica". Questa semantica tiene traccia del checkpoint di lettura last-known-good sul database di origine e del checkpoint last-known-good di scrittura sul database di destinazione. In caso di errore di un'applicazione o di una VM, Striim coordina i due punti di controllo per garantire che nessun dato sia stato perso o duplicato. Il ripristino non si applica alle applicazioni di caricamento iniziale.

Abilita ripristino

  1. In Striim Flow Designer, fai clic sull'icona Configuration (Configurazione) e seleziona App Settings (Impostazioni app).
  2. Fai clic su Intervallo di recupero.
  3. Digita 5 e seleziona Secondo dall'elenco a discesa.
  4. Fai clic su Abilita crittografia. Striim cripta tutti i flussi che spostano dati tra i server Striim o da un agente di forwarding a un server Striim.

Attiva crittografia

  • In Striim Flow Designer, fai clic sull'icona Configuration (Configurazione), seleziona App Settings (Impostazioni app), quindi in Encryption (Crittografia) seleziona la casella di controllo.

Visita il sito web di Striim per scoprire di più sui metodi di recupero di Striim.

Abilita eccezioni di logging

Prima di eseguire il deployment della pipeline di replica continua, ti consigliamo di abilitare l'archivio delle eccezioni in Striim. Come parte dell'applicazione CDC, potrebbero esserci duplicati scritti dall'applicazione di caricamento iniziale. L'applicazione Striim ignora questi errori, li scrive in un archivio (in modo che l'utente possa esaminarli ed elaborarli) e continua l'elaborazione.

  1. In Striim Flow Designer, seleziona l'icona Eccezioni. L'icona mostra un punto esclamativo tra due frecce curve.
  2. Fai clic su Attiva.

Esegui il deployment della pipeline

Quando la pipeline è pronta, puoi eseguirne il deployment e avviare l'applicazione. Puoi anche visualizzare l'anteprima dei dati replicati in tempo reale e visualizzare i report di monitoraggio. Quando la pipeline avvia correttamente la replica continua, lo stato della pipeline diventa Running.

  1. Nell'adattatore Oracle Reader, seleziona Esegui il deployment dell'app.
  2. Seleziona il gruppo di deployment predefinito.
  3. Fai clic su Esegui il deployment.

Puoi mantenere la pipeline in esecuzione per tutto il tempo che vuoi mantenere sincronizzate le tabelle Oracle con le tabelle Cloud SQL.

Hai terminato il tutorial. Se ti interessa saperne di più su altre origini CDC Oracle, consulta la seguente sezione.

Origini Oracle CDC alternative

Oltre a LogMiner, l'adattatore di Striim può leggere i database Oracle da XStream o file di trail Oracle Golden Gate.

Per leggere da XStream, utilizza l'adattatore Oracle Reader di Striim. XStream potrebbe avere prestazioni migliori, ma richiede una licenza Golden Gate ed è supportato solo per Oracle Database 11.2.0.4.

Per leggere i file dei trail Golden Gate, utilizza l'adattatore GG Trail Reader di Striim.

La seguente tabella descrive le differenze tra LogMiner e XStream:

Database Oracle
Funzionalità CDC
Supportato da
LogMiner?
Supportato da
XStream Out?
Lettura del linguaggio di definizione dei dati (DDL), ROLLBACK e transazioni non impegnate No
Utilizzare le funzioni DATA() e BEFORE() No
In uso di QUIESCE (vedi Comandi della console) No
Ricezione di eventi CDC Riceve gli eventi in batch come definito dalla proprietà FetchSize del lettore Oracle Ricezione continua degli eventi di modifica dei dati
Lettura da tabelle contenenti tipi non supportati Mancata lettura della tabella Legge le colonne dei tipi supportati

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi

Oracle, Java e MySQL sono marchi registrati di Oracle e/o delle sue società consociate. Altri nomi possono essere marchi dei rispettivi proprietari.