Eseguire la migrazione delle tabelle senza chiavi primarie

Questa pagina spiega come eseguire la migrazione delle tabelle Oracle senza chiavi primarie.

Panoramica della generazione automatica di chiave primaria

Le tabelle senza chiavi primarie non garantiscono una replica coerente. Database Migration Service esegue la migrazione solo delle tabelle con chiavi primarie. Se il database di origine include tabelle senza chiavi primarie, Database Migration Service può gestirle nei seguenti modi:

  • Quando converti il codice sorgente e lo schema, Database Migration Service può creare automaticamente le chiavi primarie mancanti aggiungendo colonne ROWID nelle tabelle di destinazione. Questo processo automatizzato richiede che le tabelle di origine:
    • Non hanno già chiavi primarie.
    • Non avere un vincolo UNIQUE senza colonne nullable.
    • Non hanno un indice UNIQUE senza colonne che ammettono valori nulli.
    Se le tabelle non soddisfano questi requisiti, devi aggiungere manualmente le chiavi primarie mancanti alle tabelle nello schema PostgreSQL convertito.
  • Nei workspace della conversione legacy, Database Migration Service non crea automaticamente le chiavi primarie. Se utilizzi un workspace della conversione legacy, devi aggiungere manualmente le chiavi primarie mancanti alle tabelle nello schema PostgreSQL convertito.

Aggiungi manualmente le chiavi primarie mancanti

Per eseguire la migrazione delle tabelle Oracle senza chiavi primarie, segui questi passaggi:

  1. Utilizza un workspace della conversione per convertire il codice sorgente e lo schema.
  2. Connettiti all'istanza Cloud SQL di destinazione con un client SQL. Puoi utilizzare i seguenti metodi:
    • psql client. Puoi utilizzare questo metodo per connetterti all'IP privato dell'istanza, ma potrebbe essere necessario creare una macchina virtuale Compute Engine.
    • Comando gcloud sql connect. Questo comando funziona solo per le istanze Cloud SQL per cui è abilitato un indirizzo IP pubblico.
  3. Crea i vincoli di chiave primaria mancanti per le tabelle. Per saperne di più sulle chiavi primarie, consulta Chiavi primarie nella documentazione di PostgreSQL.

    Puoi anche espandere le sezioni seguenti per visualizzare i comandi SQL di esempio:

    Crea chiavi primarie utilizzando le colonne esistenti

    La tabella potrebbe già avere una chiave primaria logica basata su una colonna o su una combinazione di colonne. Ad esempio, potrebbero essere presenti colonne con un indice o un vincolo univoco configurato. Utilizza queste colonne per generare una nuova chiave primaria per le tabelle nel database di origine. Ad esempio:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME);

    Sostituisci quanto segue:

    • TABLE_NAME con il nome della tabella che non ha una chiave primaria.
    • COLUMN_NAME con il nome di una colonna con un vincolo o un indice univoco che puoi utilizzare come chiave primaria.

    Crea una chiave primaria utilizzando tutte le colonne

    Se non hai un vincolo preesistente che potrebbe fungere da chiave primaria, crea chiavi primarie utilizzando tutte le colonne della tabella. Assicurati di non superare la lunghezza massima della chiave primaria consentita dall'istanza PostgreSQL.

    Quando crei una chiave primaria composita in questo modo, devi elencare esplicitamente tutti i nomi delle colonne che vuoi utilizzare. Non è possibile utilizzare un'istruzione per recuperare tutti i nomi delle colonne a questo scopo. Ad esempio:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

    Sostituisci quanto segue:

    • TABLE_NAME con il nome della tabella che non ha una chiave primaria.
    • COLUMN_NAME_1, COLUMN_NAME_2 e così via con i nomi delle colonne che vuoi utilizzare per creare la chiave primaria.

    Crea un vincolo univoco con la pseudocolonna ROWID

    I database Oracle utilizzano la pseudocolonna ROWID per archiviare la posizione di ogni riga in una tabella. Per eseguire la migrazione delle tabelle Oracle che non hanno chiavi primarie, puoi aggiungere una colonna ROWID nel database PostgreSQL di destinazione. Database Migration Service compila la colonna con i valori numerici corrispondenti della pseudocolonna ROWID Oracle di origine.

    Per aggiungere la colonna e impostarla come chiave primaria, esegui questo comando:

    ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL;
    CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid;
    ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq');
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);

    Sostituisci quanto segue:

    • TABLE_NAME con il nome della tabella in cui vuoi aggiungere la colonna.
    • CONSTRAINT_DISPLAY_NAME con l'identificatore del vincolo PRIMARY KEY.

Passaggi successivi