Importazione, esportazione e migrazione dei database
Eseguire la migrazione dei dati da un altro database PostgreSQL a un database OCI con un sistema di database PostgreSQL.
Utilizzo delle utility PostgreSQL, ad esempio pg_dump
La utility pg_dump
viene fornita con un'installazione PostgreSQL per impostazione predefinita e può essere utilizzata per estrarre un database PostgreSQL in un file di script o in un altro file di archivio. These files can be provided to an OCI Database with PostgreSQL with psql
or pg_restore
commands to re-create a database in the same state at the time of its dump.
Quando si crea un database OCI con PostgreSQL, si specifica un utente amministratore. Questo utente può eseguire il ripristino da un file creato utilizzando queste utility. Poiché si tratta di applicazioni client PostgreSQL normali, è possibile eseguire questa procedura di migrazione da qualsiasi host remoto che dispone dell'accesso al database.
In questa guida viene utilizzato
pg_dump
per creare i dump in formato testo normale e la utility psql
per ripristinare il dump. È inoltre possibile creare dump in un formato diverso e utilizzare pg_restore
per ripristinare i dump.Esempio: esportare e importare tutti i database di un sistema di database
L'esempio seguente presuppone che il sistema di database di origine sia un sistema PostgreSQL vanilla, con tre database: db_1, db_2 e db_3. Il sistema di database di origine dispone di molti utenti, alcuni dei quali con privilegi SUPERUSER.
-
Eseguire il dump di solo schema di tutti i database. Eseguire il dump di ogni database in un singolo file con le informazioni sulla proprietà dell'oggetto degli utenti.
/usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -s -E 'UTF8' -d <db_1> -f <db_1_schema_dump>.sql
-U
: utente che crea il dump-h
: indirizzo host del database di origine-s
: esegue il dump solo dello schema, nessun dato-E
: impostare la codifica client del file di dump su UTF-8-d
: database da salvare-f
: file O/p per il dump dello schema di database
Ripetere questa operazione per i database db_2 e db_3.
-
Creare un dump di soli dati di ciascun database in singoli file.
/usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -a -E 'UTF8' -d db_1 -f <db_1_data_dump>.sql
-a
: esegue il dump solo dei dati, non dello schema
Ripetere questa operazione per i database db_2 e db_3.
-
Esegue il dump degli oggetti globali senza informazioni sulla tablespace.
/usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
-g
: esegue il dump solo degli oggetti globali, nessun database--no-role-passwords
: utilizzare questo flag per evitare il dumping delle password.--no-tablespaces
: il database OCI con PostgreSQL supporta solo tablespace in loco.
-
Poiché l'utente amministratore del database OCI con sistema di database PostgreSQL non dispone dei privilegi SUPERUSER, NOSUPERUSER, NOREPLICTION e così via, deve essere rimosso dalle istruzioni
CREATE USER
nel dump.Apportare le modifiche necessarie nel file di dump globale per rimuovere tutti i comandi che richiedono privilegi SUPERUSER. Ad esempio:
ALTER ROLE/USER test WITH NOSUPERUSER NOINHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';
Da modificare in:
ALTER ROLE/USER test WITH LOGIN PASSWORD 'test';
-
Ripristinare il dump globale utilizzando il database OCI con l'utente amministratore PostgreSQL nel database OCI con il sistema di database PostgreSQL per creare tutti i ruoli/utenti:
/usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <all_roles>.sql
-h
: database OCI di destinazione con IP del sistema di database PostgreSQL. Per istruzioni su come trovare l'indirizzo IP di un sistema di database, vedere Informazioni su un sistema di database.
-
Ripristinare i dump del database solo schema:
/usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_schema_dump>.sql
Ripetere questa operazione per i database db_2 e db_3.
Nota
Correggere eventuali errori con privilegi o mancata corrispondenza di oggetti prima di procedere ulteriormente. -
Ripristinare i dump del database solo dati:
/usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_data_dump>.sql
Ripetere questa operazione per i database db_2 e db_3.
- Verificare i conteggi di righe di tutte le tabelle rispetto al database di origine.
- Assicurarsi che tutti i livelli di autorizzazione del sistema di database di origine si riflettano accuratamente nel database OCI con il sistema di database PostgreSQL.
- Impostare le password per gli utenti creati nel database OCI con il sistema di database PostgreSQL.
-
Eseguire
VACUUM ANALYZE
su ogni database o singola tabella per aggiornare le statistiche dei database. Questo comando consente al pianificatore di query PostgreSQL di creare piani di query ottimizzati, migliorando così le prestazioni. Per velocizzare il completamento diVACUUM ANALYZE
, si consiglia di aumentare il valoremaintenance_work_mem
nella sessione PSQL.VACUUM ANALYZE
può anche essere eseguito in sessioni separate in parallelo per ridurre i tempi di completamento.SET maintenance_work_mem = '<a_few_gigabytes_depending_on_shape>';
VACUUM ANALYZE <db_1>;
Ripetere questa operazione per i database db_2 e db_3.
Nota
Si consiglia di eseguire periodicamenteVACUUM ANALYZE
eREINDEX
su tabelle e indici bloccati per mantenere le prestazioni del sistema di database. Eseguire questa operazione durante le ore non di punta per evitare qualsiasi impatto sulle applicazioni.
Uso di GoldenGate
È possibile utilizzare GoldenGate per impostare la replica da un database PostgreSQL di origine a un database OCI con un sistema di database PostgreSQL.
I passi riportati di seguito riguardano la configurazione dell'origine, della destinazione e di GoldenGate per mantenere sincronizzati i database. Puoi scegliere di passare al database OCI con PostgreSQL in qualsiasi momento, senza tempi di inattività, dopo il completamento del processo.
Requisiti indispensabili
Per utilizzare GoldenGate, assicurarsi che vengano soddisfatti I seguenti prerequisiti:
- Verificare che siano presenti le risorse IAM e la rete OCI necessarie. Per ulteriori informazioni, consulta la guida introduttiva al database OCI con PostgreSQL.
-
Creare un sistema di database che possa essere utilizzato come destinazione per la replica GoldenGate.
- Creare istanze di computazione per ospitare il client PostgreSQL in grado di connettersi ai sistemi di database di origine e di destinazione. Quando si creano le istanze:
-
Scaricare la coppia delle chiavi SSH.
Attenzione
Chiunque abbia accesso alla chiave privata può connettersi all'istanza. Conservare la chiave privata in un luogo sicuro. - Selezionare la VCN e la subnet privata utilizzate quando si ha creato il sistema di database.
- Installare una versione del client PostgreSQL compatibile con la versione PostgreSQL del sistema di database seguendo le istruzioni disponibili all'indirizzo https://www.postgresql.org/download/.
-
Preparazione del database di origine
I database di origine devono soddisfare i requisiti utente e di configurazione affinché GoldenGate possa estrarre e replicare i dati.
Requisiti utente
I processi GoldenGate richiedono un utente del database in grado di acquisire i dati di origine e consegnarli al database OCI con PostgreSQL. Si consiglia di creare un utente di database PostgreSQL dedicato sia per Extract GoldenGate che per Replicat GoldenGate. Per ulteriori informazioni sugli utenti del database e su GoldenGate, vedere Privilegi di database per Oracle GoldenGate per PostgreSQL.
Requisiti di configurazione
Qualsiasi database di origine deve essere configurato in modo da soddisfare il processo di estrazione GoldenGate. Di seguito sono riportati i parametri richiesti con i relativi valori per qualsiasi database di origine.
listen_addresses
: per la connettività remota di Extract o Replicat, impostare"listen_addresses = * "
per consentire la connettività del database remoto.wal_level
: il log write-ahead sul database di origine deve essere impostato sulogical
, che aggiunge le informazioni necessarie per supportare la decodifica dei record transazionali.max_replication_slots
: è necessario impostare il numero massimo di slot di replica per uno slot aperto per ogni estrazione GoldenGate. In generale, non sono necessarie più estrazioni GoldenGate per database.Nota
Se il database di origine sta già utilizzando la replica nativa PostgreSQL e tutti gli slot di replica disponibili, aumentare il valore per consentire la registrazione di un'estrazione GoldenGate.max_wal_senders
: impostare il valore massimo dei mittenti write-ahead in modo che corrisponda al valore massimo degli slot di replica.track_commit_timestamp
: facoltativamente, è possibile abilitare gli indicatori orari di commit nel log write-ahead. Se abilitata nello stesso momento in cui è abilitata la registrazione con testata di scrittura logica, i record di commit DML da quel momento in poi vengono acquisiti con il valore di indicatore orario corretto. In caso contrario, il primo record acquisito da GoldenGate avrà un indicatore orario di commit errato.
Per utilizzare Community PostgreSQL come database di origine, l'utente può apportare modifiche alla configurazione nel file postgresql.conf
e riavviare il database per rendere effettive le modifiche:
listen_addresses = *
wal_level = logical
max_replication_slots = 1 (min required for GG)
max_wal_senders = 1 (min required for GG)
track_commit_timestamp = on
In Amazon Aurora PostgreSQL, le impostazioni del database vengono modificate utilizzando i gruppi di parametri. Per informazioni su come modificare le impostazioni del database all'interno di un nuovo gruppo di parametri e assegnarle a un'istanza di database, consulta la documentazione di Amazon AWS.
Assicurarsi che i requisiti di configurazione del database vengano soddisfatti verificando le impostazioni nel gruppo di parametri assegnato all'istanza.
L'impostazione wal_level
per Amazon Aurora è configurata con un parametro denominato rds.logical_replication
. Impostare rds.logical_replication
su 1
per utilizzare il database come origine per GoldenGate Extract.
L'utente del database utilizzato per la migrazione deve disporre dei privilegi di replica. Concedere privilegi all'utente nel sistema Amazon Aurora di origine utilizzando quanto segue:
grant replication to <migration-user>;
In Amazon RDS per PostgreSQL, le impostazioni del database vengono modificate utilizzando i gruppi di parametri. Per informazioni su come modificare le impostazioni del database all'interno di un nuovo gruppo di parametri e assegnarle a un'istanza di database, consulta la documentazione di Amazon AWS.
Assicurarsi che i requisiti di configurazione del database vengano soddisfatti verificando le impostazioni nel gruppo di parametri assegnato all'istanza.
L'impostazione wal_level
per i servizi di database Amazon è configurata con un parametro denominatords.logical_replication
. Impostare rds.logical_replication
su 1
per utilizzare il database come origine per GoldenGate Extract.
L'utente del database utilizzato per la migrazione deve disporre dei privilegi di replica. Concedere privilegi all'utente nel sistema Amazon RDS di origine utilizzando i seguenti elementi:
grant replication to <migration-user>;
In Azure Database for PostgreSQL, le impostazioni del database vengono modificate utilizzando i parametri del server per l'istanza di database. Per informazioni sulla modifica delle impostazioni del database, consultare la documentazione di Azure Database for PostgreSQL.
Assicurarsi che i requisiti di configurazione del database vengano soddisfatti verificando le impostazioni nell'istanza di origine.
Quando si configura GoldenGate per un'estrazione PostgreSQL in un database Azure per un database PostgreSQL, wal_level
deve essere abilitato e impostato su LOGICAL
.
L'utente del database utilizzato per la migrazione deve disporre dei privilegi di replica. Concedere privilegi all'utente nel sistema di origine utilizzando gli elementi riportati di seguito.
ALTER ROLE <migration-user> WITH REPLICATION;
Dumping dello schema del database di origine
Eseguire il test della connettività dall'istanza di computazione al sistema di database di origine, quindi eseguire il dump dello schema del database di origine utilizzando il comando seguente:
/<path-to-binary>/pg_dump -U <user-to-take-dump> -h <IP-of-source-DB> -s -E 'UTF8' -d <source-DB-name> -f schema_only.sql
-U
: utente che crea il dump-h
: indirizzo host del database di origine-s
: esegue il dump solo dello schema, nessun dato-E
: impostare la codifica client del file di dump su UTF-8-d
: database da salvare-f
: file O/p per il dump dello schema di database
Questo schema viene utilizzato quando si prepara il sistema di database di destinazione. See Using PostgreSQL Utilties Such as pg_dump for more information on pg_dump and OCI Database with PostgreSQL.
Preparazione del sistema di database di destinazione
Assicurarsi che vengano soddisfatti i prerequisiti per l'uso di GoldenGate per replicare i dati nel database OCI con PostgreSQL, che il database di origine venga preparato e quindi ripristinare lo schema del database di origine nel database OCI con la destinazione PostgreSQL utilizzando il comando seguente:
/<path-to-binary>/psql -U <user-to-load-dump> -d <target-DB-name> -h <Private_endpoint_of_target_database_system> -f schema_only.sql
-U
: l'utente ripristina il dump-h
: indirizzo host del database di destinazione-d
: database da salvare-f
: file O/p per il dump dello schema di database
Per ulteriori informazioni su psql
e sul database OCI con PostgreSQL, vedere Uso delle utility PostgreSQL come pg_dump.
Per ulteriori informazioni sull'uso di un'istanza per la connessione a un sistema di database, vedere Connessione a un database.
Utilizzo di GoldenGate per la replica
Attenersi alla procedura riportata di seguito per impostare GoldenGate da utilizzare con il database OCI con PostgreSQL. Utilizzare il compartimento che contiene il database OCI di destinazione con il sistema di database PostgreSQL.
- Creare una distribuzione e selezionare PostgreSQL come tecnologia.
- Creare una connessione di origine in base al database di origine e alla connettività di test.
-
Creare una connessione di destinazione del server PostgreSQL e una connettività di test.
Nota
Per la connettività di rete, selezionare Endpoint dedicato come metodo di instradamento del traffico. - Assegnare alla distribuzione sia le connessioni di origine che di destinazione.
- Aggiungere un'estrazione per PostgreSQL alla distribuzione da eseguire sulla connessione di origine ed estrarre o acquisire i dati.
- Abilita il log supplementare a livello di tabella per il database di origine. Utilizzare il nome dello schema creato quando si ha eseguito il dump dello schema del database di origine. Per i dettagli, vedere il passo Abilita log supplementare da Aggiungi un'estrazione per PostgreSQL: Prima di iniziare.
- Aggiungere un'estrazione caricamento iniziale (INI).
- Fornire un nome percorso, ad esempio
xx
. Questo file contiene le modifiche apportate al database di origine. -
Nella pagina File parametri, assicurarsi che nel file siano inclusi i seguenti elementi:
exttrail xx INITIALLOADOPTIONS USESNAPSHOT TABLE *.*;
È necessario aggiungere
INITIALLOADOPTIONS
per garantire uno snapshot coerente del database dopo il completamento dell'estrazione del carico iniziale insieme al numero LSN. - Selezionare Crea ed esegui.
- Monitorare il processo fino al completamento e quindi controllare il file del report per il numero LSN. Registrare il numero LSN per uso futuro.
- Fornire un nome percorso, ad esempio
- Aggiungere un'altra estrazione alla distribuzione. Questa volta, scegliere Modifica estrazione acquisizione dati (CDC) come tipo di estrazione.
- Per Inizia, selezionare Nessuno.
- Specificare un valore per Nome percorso, ad esempio
yy
. -
Nella pagina File parametri, assicurarsi che nel file siano inclusi i seguenti elementi:
exttrail yy TABLE public.*;
È necessario aggiungere
INITIALLOADOPTIONS
per garantire uno snapshot coerente del database dopo il completamento dell'estrazione del carico iniziale insieme al numero LSN. - Selezionare Crea. Non eseguire ancora l'estrazione.
- Nella pagina di distribuzione, dal menu Azione del nuovo CDC, selezionare Inizia con opzione.
- Per Punto di inizio, selezionare Al CSN
- Per CSN, immettere il numero LSN dall'estrazione iniziale e selezionare Inizio. Le transazioni nel database di origine verranno acquisite e visualizzate nella scheda Statistiche di Estrazione CDC.
Nota
Finora, abbiamo lavorato solo con il database di origine. L'inizio dell'estrazione del carico iniziale e del CDC registra le modifiche nell'origine nei rispettivi file trail nella distribuzione. Il processo Replicat fornisce i dati da questi file trail al database OCI di destinazione con il sistema di database PostgreSQL. - Aggiungere Replicat per PostgreSQL alla distribuzione. Replicat per l'estrazione del carico iniziale (REINI).
- Creare una tabella di checkpoint. Per informazioni dettagliate, vedere Aggiungere una replica per PostgreSQL: prima di iniziare.
- Quando si crea Replicat, fornire il nome del percorso dall'interfaccia INI, ad esempio
xx
. - Fornire la tabella Checkpoint per Replicat.
-
Nella pagina File parametri, assicurarsi che nel file sia incluso qualcosa di simile al seguente:
MAP public.* TARGET public.*;
- Selezionare Crea ed esegui. Verificare che i dati abbiano iniziato il caricamento nel database OCI con il sistema di database PostgreSQL.
- Aggiungere Replicat per PostgreSQL alla distribuzione. Replicat per l'estrazione di acquisizione dati di modifica (RECDC).
- Quando si crea Replicat, fornire il nome del percorso dal CDC, ad esempio
yy
. - Fornire la tabella Checkpoint per Replicat.
-
Nella pagina File parametri, assicurarsi che nel file sia incluso qualcosa di simile al seguente:
MAP public.* TARGET public.*;
- Selezionare Crea. Non eseguire il RECDC fino al completamento del REINI. GoldenGate deve avere due processi Extract e due processi Replicat.
- Nella pagina di distribuzione, dal menu Azione del nuovo RECDC, selezionare Avvia.
- Quando si crea Replicat, fornire il nome del percorso dal CDC, ad esempio
- Controllare lo stato nel database OCI di destinazione con il sistema di database PostgreSQL e abbinare i conteggi e i valori dei record.