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à.
Fine del supporto per RDS Custom for Oracle
Nota
Avviso di fine del supporto: il 31 marzo 2027, AWS terminerà il supporto per Amazon RDS Custom for Oracle. Dopo il 31 marzo 2027, non sarà più possibile accedere alla console RDS Custom for Oracle o alle risorse RDS Custom for Oracle. Per ulteriori informazioni, consulta Fine del supporto per RDS Custom for Oracle.
Panoramica di
Dopo un'attenta valutazione, AWS ha deciso di interrompere il servizio Amazon RDS Custom for Oracle. Il servizio diventerà obsoleto a partire dal 31 marzo 2027. Questa guida prescrittiva fornisce strategie di migrazione dettagliate per aiutarti a migrare da RDS Custom for Oracle ai database Oracle autogestiti su Amazon Elastic Compute Cloud (Amazon EC2) Elastic Compute Cloud (Amazon EC2).
Tempistiche chiave
-
Dal 31 marzo 2026 al 31 marzo 2027: ti consigliamo di migrare da RDS Custom for Oracle all'esecuzione di Oracle su EC2. Durante questo periodo, puoi continuare a utilizzare RDS Custom for Oracle con le funzionalità e il supporto esistenti.
-
Dopo il 31 marzo 2027: non sarà più possibile utilizzare il servizio RDS Custom for Oracle.
Destinatari
Questa guida è destinata a:
-
Amministratori di database responsabili delle migrazioni dei database Oracle
-
Architetti del cloud che pianificano strategie di migrazione
-
DevOps ingegneri che gestiscono l'infrastruttura di database
-
Responsabili IT che supervisionano il processo di migrazione
Prerequisiti
Prima di iniziare, assicurati di disporre dei seguenti elementi:
-
Un'istanza Amazon RDS Custom for Oracle attiva che esegue Oracle 19c Enterprise Edition
-
Autorizzazioni IAM ( AWS Identity and Access Management) appropriate per creare e gestire istanze EC2
-
Comprensione dell'architettura del database (CDB non CDB o CDB multitenant con PDB)
-
Pianificazione della connettività di rete tra istanze di origine e di destinazione
-
Strategia di backup e ripristino per la migrazione
Opzioni di migrazione
Come parte del processo di migrazione, puoi scegliere una delle due opzioni di migrazione in base ai requisiti aziendali e al caso d'uso:
Opzione 1: RMAN Active Duplication (migrazione) Online/Offline
Ideale per
-
Carichi di lavoro che possono permettersi tempi di inattività pianificati durante il montaggio finale
-
Requisiti di migrazione più semplici con un minor numero di parti mobili
-
Database per i quali si desidera una migrazione semplice e una tantum
-
Scenari in cui non è necessaria la sincronizzazione continua prima del cutover
Caratteristiche chiave
-
Tempo di inattività: tempo di inattività minimo durante il cutover finale (il database rimane online durante la duplicazione, breve tempo di inattività per il taglio finale)
-
Complessità: minore complessità con la duplicazione diretta del database
-
Durata: il tempo di migrazione dipende dalle dimensioni del database e dalla larghezza di banda della rete
-
Fallback: richiede la manutenzione del database di origine fino al completamento della convalida
-
Funzionalità online: il database di origine rimane online e accessibile durante il processo di duplicazione
Approccio alla migrazione: la duplicazione attiva RMAN crea una copia esatta del database di origine sulla destinazione copiando i file di database dalla rete dal database di origine attivo e in esecuzione. Il database di origine rimane online e accessibile alle applicazioni durante il processo di duplicazione. Per i database multi-tenant, RMAN duplica automaticamente l'intero CDBCDB$ROOT, compresi tutti i database collegabiliPDB$SEED, in un'unica operazione. È necessaria solo una breve finestra di dialogo per reindirizzare le applicazioni alla nuova istanza EC2.
Opzione 2: Oracle Data Guard (migrazione online)
Ideale per
-
Carichi di lavoro di produzione che richiedono tempi di inattività minimi
-
Mission-critical database che devono rimanere disponibili
-
Scenari in cui è necessaria una sincronizzazione continua prima del cutover
-
Migrazioni che richiedono funzionalità di fallback integrate
Caratteristiche chiave
-
Tempo di inattività: tempo di Near-zero inattività (da secondi a minuti per il passaggio al digitale)
-
Complessità: maggiore complessità con la configurazione Data Guard
-
Durata: tempo di configurazione iniziale più sincronizzazione continua fino allo switchover
-
Fallback: funzionalità di Built-in fallback che consente di mantenere la sorgente in standby
Approccio alla migrazione: Oracle Data Guard mantiene un database di standby sincronizzato inviando e applicando continuamente i redo log dal database principale. Quando sei pronto per completare la migrazione, esegui un passaggio che promuove lo standby EC2 a quello primario con tempi di inattività minimi. Per i database multitenant, Data Guard protegge automaticamente l'intero CDB, inclusi tutti i PDB.
Matrice decisionale
Utilizzate la seguente matrice per scegliere l'opzione di migrazione appropriata:
|
Aspetto |
Duplicazione attiva RMAN |
Oracle Data Guard |
|---|---|---|
|
Disponibilità del database di origine |
Online durante la duplicazione | Online durante l'intero processo |
|
Tempi di inattività accettabili |
Da minuti a ore (cutover finale) | Da secondi a minuti (commutazione) |
|
Complessità della migrazione |
Più basso | Più alto |
|
Sincronizzazione continua |
No | Sì |
|
Capacità di fallback |
Manuale (mantieni il codice sorgente) | Built-in (automatico) |
|
Test prima del taglio |
Limitato | Possibilità di test completi |
|
Requisiti di larghezza di banda di rete |
Elevato durante la duplicazione | Moderato (continuo) |
|
Ideale per |
La maggior parte delle migrazioni dev/test, interruzione pianificata | Produzione, mission critical, tempi di inattività quasi nulli |
Considerazioni sull'architettura
Entrambe le opzioni di migrazione supportano due architetture di database Oracle:
Non-CDB
Database Oracle tradizionali a istanza singola senza architettura multitenant. Questi database:
-
Disponi di una singola istanza di database
-
Non utilizzate database collegabili (PDB)
-
Sono più semplici da gestire e migrare
-
In genere denominati ORCL in RDS Custom for Oracle
Multitenant (CDB con PDB)
Database container (CDB) che ospitano più database collegabili (PDB), introdotti in Oracle 12c. Questi database:
-
Disponi di un database di contenitori (CDB) con e
CDB$ROOTPDB$SEED -
Ospita uno o più database collegabili (PDB)
-
Fornisci il consolidamento del database e l'isolamento delle risorse
-
In genere denominato RDSCDB in RDS Custom for Oracle
-
Utilizza Oracle Managed Files (OMF) con le GUID-based sottodirectory per i file di dati PDB
Nota importante per le migrazioni multitenant: il database di destinazione verrà rinominato in ORCL durante il processo di migrazione (fonte: RDSCDB → destinazione: ORCL). Ciò semplifica la configurazione di destinazione e si allinea alle convenzioni di denominazione standard.
Principali differenze nell'approccio alla migrazione
|
Aspetto |
Non-CDB |
Multitenant (CDB con PDB) |
|---|---|---|
|
Ambito di migrazione |
Database singolo | Intero CDB con tutti i PDB |
|
Post-migration state |
Database aperto READ WRITE | CDB aperto READ WRITE; PDB in stato MOUNTED |
|
Gestione PDB |
N/A | È necessario aprire i PDB e configurare l'apertura automatica |
|
Pulizia |
Database singolo | CDB$ROOT(passa a cascata ai PDB); gestisce gli utenti comuni di C## |
|
Connessioni alle applicazioni |
Servizio di database | Servizi PDB (non CDB) |
|
File di parametri |
Parametri standard | Richiede enable_pluggable_database=True |
|
Complessità |
Minore | Maggiore a causa della presenza di più contenitori |
Prerequisiti comuni per entrambe le opzioni di migrazione
Prima di avviare una delle due opzioni di migrazione, completa i seguenti passaggi preliminari:
-
Avvia e configura l'istanza EC2
Avvia un'istanza EC2 tenendo conto delle seguenti considerazioni:
-
Tipo di istanza: scegli un tipo di istanza EC2 che soddisfi i requisiti di risorse del tuo carico di lavoro. Utilizzare la stessa classe di istanza dell'istanza RDS Custom è un buon punto di partenza. Considerate i requisiti di memoria, CPU e larghezza di banda di rete.
-
Sistema operativo: Oracle Linux o Red Hat Enterprise Linux (corrispondente o compatibile con la versione del sistema operativo RDS Custom in uso)
-
Software Oracle: installa il software Oracle Database (stessa versione principale, versione secondaria, Release Update e idealmente le stesse patch singole di RDS Custom). Assicurati che il software Oracle sia installato in/u01/app/oracle/ o nella tua posizione preferita.
-
Storage: configura i volumi Amazon EBS con dimensioni e IOPS appropriati per soddisfare i requisiti del carico di lavoro. Prendi in considerazione l'utilizzo di volumi gp3 per prestazioni convenienti o io2 Block Express per carichi di lavoro ad alte prestazioni.
-
-
Configura l'architettura di storage
-
Storage del file system (consigliato per la maggior parte degli scenari)
-
Utilizza directory di file system standard per i file di dati Oracle
-
Più semplice da gestire e adatto alla maggior parte dei carichi di lavoro
-
Questa guida utilizza esempi di storage dei file system
-
-
Oracle Automatic Storage Management (ASM)
-
Se il tuo carico di lavoro richiede ASM, installa e configura ASM autonomo sull'istanza EC2
-
Modifica di conseguenza tutti i parametri del percorso nel file init per utilizzare i gruppi di dischi ASM (ad esempio, +DATA, +FRA)
-
Il processo di migrazione è simile per ASM, con regolazioni del percorso
-
-
-
Imposta il meccanismo di trasferimento dei file
Crea un meccanismo per trasferire file tra istanze RDS Custom ed EC2. A questo scopo, sono disponibili numerose opzioni:
-
Opzione A: Amazon S3 (consigliato per la maggior parte degli scenari)
-
Crea un bucket Amazon S3 o usane uno esistente
-
Installa e configura la AWS CLI su entrambe le istanze
-
Per istruzioni, consulta Guida introduttiva a. AWS CLI
-
-
Opzione B: Diretta SCP/SFTP
-
Se le porte SSH sono aperte tra le istanze, puoi trasferire direttamente i file
-
Adatto per file di piccole dimensioni come file di parametri e file di password
-
-
Opzione C: Amazon EFS
-
Se hai già installato Amazon EFS su entrambe le istanze, puoi utilizzarlo come file system condiviso.
-
Adatto per ambienti con infrastruttura EFS esistente
Questa guida utilizza Amazon S3 per esempi, ma puoi adattare i comandi al metodo scelto.
-
-
-
Configura la connettività di rete
Garantisci la connettività di rete tra le istanze RDS Custom ed EC2:
-
Stesso VPC: i gruppi di sicurezza devono consentire il traffico bidirezionale sulla porta del listener Oracle (impostazione predefinita 1521 o porta personalizzata)
-
VPC diversi (stesso account): configura il peering VPC e configura tabelle di routing e gruppi di sicurezza
-
Account diversi: configura il peering VPC tra account o utilizza Transit Gateway AWS
-
Verifica della connettività: utilizza ping e telnet per testare la connettività sulla porta del database
-
-
Crea una struttura di directory su EC2
La struttura delle cartelle dipende dall'architettura del database:
Esempio Per Non-CDB:
# Non-CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backupEsempio Per Multitenant (CDB con PDB)
# CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/cdb/datafile mkdir -p /u01/app/oracle/oradata/ORCL/pdbseed/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # PDB directories (RDS Custom uses OMF with GUID-based paths) # Create a generic pdb directory - migration will create subdirectories as needed mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backupNota
RDS Custom for Oracle utilizza Oracle Managed Files (OMF) per i file di dati PDB con sottodirectory (ad es.). GUID-based
/rdsdbdata/db/pdb/RDSCDB_A/Il processo di migrazione creerà automaticamente la struttura di sottodirectory necessaria sulla destinazione. È sufficiente creare le directory principali.{GUID}/datafile/Strategia di storage: prendi in considerazione l'utilizzo di un volume EBS separato per/u01/app/oracle/backup per scollegarlo e rimuoverlo facilmente dopo il completamento della migrazione, liberando i costi di storage.
-
Verifica la configurazione del database di origine
Prima di iniziare la migrazione, verifica la configurazione del database di origine:
-
Accedi all'host del database RDS Custom come utente rdsdb e imposta l'ambiente:
Esempio
# For non-CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE.1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # For multitenant CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE-CDB.1 export ORACLE_SID=RDSCDB export PATH=$ORACLE_HOME/bin:$PATH -
Connect al database e verifica l'architettura:
Esempio
sqlplus / as sysdba SQL> SELECT name, cdb, open_mode, log_mode FROM v$database;Esempio Per Non-CDB, output previsto
NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ ORCL NO READ WRITE ARCHIVELOGEsempio Per Multitenant (CDB), output previsto:
NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ RDSCDB YES READ WRITE ARCHIVELOG -
Se hai un CDB multitenant, elenca tutti i PDB e il loro stato:
Esempio
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;Output previsto (esempio con 1 PDB denominato ORCLDB):
Esempio
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO -
Controlla la dimensione totale del database:
Esempio Per Non-CDB:
SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files;Esempio Per Multitenant:
-- Total CDB size (all containers) SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name, p.con_id ORDER BY p.con_id;
Opzione 1: migrazione fisica tramite RMAN Active Duplication
Argomenti
Questa sezione fornisce i passaggi dettagliati per la migrazione del database Oracle da RDS Custom for Oracle a EC2 utilizzando la duplicazione attiva RMAN. Questo metodo esegue la duplicazione da un database attivo e in esecuzione, mantenendo il codice sorgente online e accessibile durante il processo di migrazione.
Quando utilizzare la duplicazione attiva RMAN
Scegli la duplicazione attiva RMAN quando:
-
Desiderate mantenere il database di origine online e accessibile durante la migrazione
-
Puoi permetterti una breve finestra di dialogo per il reindirizzamento finale dell'applicazione
-
Desiderate un processo di migrazione semplice con un minor numero di parti mobili
-
Le dimensioni del database e la larghezza di banda della rete consentono tempi di duplicazione ragionevoli
-
Non è necessaria una sincronizzazione continua prima del cutover
-
Stai migrando database di produzione, sviluppo o test
Panoramica sulla duplicazione attiva di RMAN
La duplicazione attiva di RMAN non richiede un backup del database di origine o la messa offline del database di origine. Duplica il database di origine attivo e in esecuzione nella destinazione copiando i file del database sulla rete mentre l'origine rimane online e accessibile alle applicazioni.
Principali vantaggi:
-
L'origine rimane online: le applicazioni possono continuare ad accedere al database di origine durante la duplicazione
-
Nessun backup richiesto: elimina la necessità di uno storage di backup intermedio
-
Trasferimento diretto in rete: i file del database vengono copiati direttamente dall'origine alla destinazione
-
Coerenza automatica: RMAN garantisce la coerenza del database duplicato
-
Operazione singola: per il multitenant, duplica l'intero CDB, inclusi tutti i PDB, in un'unica operazione
Il processo di duplicazione crea una copia esatta del database di origine sulla destinazione, inclusi tutti i file di dati, i control file e i redo log. Il database di origine continua a soddisfare le richieste delle applicazioni durante tutto il processo di duplicazione. Alla fine è necessaria solo una breve finestra di dialogo per reindirizzare le applicazioni dall'origine alla destinazione.
Cronologia tipica
-
Fase di duplicazione (la fonte rimane online): da 30 minuti a diverse ore a seconda delle dimensioni del database
-
Fase di convalida (la fonte rimane online): da ore a giorni, in base alle esigenze
-
Fase di transizione (breve periodo di inattività): minuti per reindirizzare le applicazioni a EC2
Flusso di lavoro di migrazione per la duplicazione attiva di RMAN
Procedura dell'istanza DB personalizzata RDS (origine):
-
Metti in pausa l'automazione personalizzata di Amazon RDS
-
Verifica l'architettura del database (non CDB o CDB con PDB)
-
Crea un file di password e un file di parametri dal database di origine
-
Copia il file delle password e il file dei parametri nell'istanza EC2 di destinazione
-
Verifica che il database di origine sia in esecuzione in modalità registro di archiviazione
-
Configurare tnsnames.ora sul server RDS Custom DB
Fasi dell'istanza DB EC2 (destinazione):
-
Modifica il file dei parametri per EC2 (specifico dell'architettura)
-
Configura tnsnames.ora su EC2
-
Configura l'ambiente per l'istanza EC2
-
Configura Oracle Listener su EC2
-
Avvia il database su EC2 nello stato NOMOUNT
Fasi di duplicazione RMAN:
-
Eseguire la duplicazione attiva di RMAN
-
Apri il database (e i PDB per il multitenant)
-
Configura l'apertura automatica del PDB (solo multitenant)
-
Rimuovi utenti e oggetti specifici di RDS Custom
-
Crea SPFILE e configura l'avvio automatico
-
Riprendi l'automazione personalizzata di Amazon RDS all'origine (se la mantieni attiva)
Fase 1: mettere in pausa l'automazione personalizzata di Amazon RDS
Metti in pausa la modalità di automazione sull'istanza RDS Custom prima di procedere con le fasi di migrazione per assicurarti che l'automazione non interferisca con l'attività RMAN. Il parametro --resume-full-automation-mode-minute (240 minuti = 4 ore in questo esempio) deve essere modificato in base alle dimensioni del database e al tempo di duplicazione previsto.
Importante: la sospensione dell'automazione non influisce sulla disponibilità del database. Il database rimane online e accessibile alle applicazioni durante il processo di duplicazione.
Esempio
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 240 \ --region us-east-1 --query 'DBInstances[0].AutomationMode'
Convalida lo stato dell'automazione:
Esempio
aws ds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'
Output previsto: "» all-paused
Fase 2: Creare file di password e parametri
Crea un file di password utilizzandoorapwd. Recupera la password SYS da AWS Secrets Manager (memorizzata durante la creazione dell'istanza RDS Custom).
Esempio
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD>entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD>entries=10
Crea un file di parametri dal database di origine:
Esempio
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant
Il file dei parametri generato conterrà Custom-specific percorsi e parametri RDS. Per il multitenant, i parametri chiave includono:
-
enable_pluggable_database=TRUE(fondamentale per il multitenant) -
noncdb_compatible=TRUE(per compatibilità con le versioni precedenti) -
Percorsi dei file di dati per
CDB$ROOTe tuttiPDB$SEEDi PDB -
db_create_file_destedb_create_online_log_dest_1per OMF
Fase 3: Trasferimento dei file su EC2
Scegli il metodo di trasferimento dei file che preferisci. Questa guida utilizza Amazon S3 a titolo di esempio.
Utilizzando Amazon S3:
Utilizzando Amazon S3:
Esempio Per Non-CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
Esempio Per Multitenant
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL
Convalida i file su EC2:
Esempio
ls -l $ORACLE_HOME/dbs/initORCL.ora ls -l $ORACLE_HOME/dbs/orapwORCL
Fase 4: Modifica il file dei parametri su EC2
Il file dei parametri richiede un'attenta modifica per garantire il successo della migrazione. Questa è una delle fasi più importanti del processo di migrazione.
Esegui la modifica $ORACLE_HOME/dbs/initORCL.ora sull'istanza EC2 e apporta queste modifiche critiche:
-
Aggiorna il nome del database: per il multitenant, modifica tutte le occorrenze di RDSCDB in ORCL
-
Converti i percorsi personalizzati RDS in percorsi EC2: sostituisci /rdsdbdata/ con//oracle/ u01/app
-
Rimuovi Custom-specific i parametri RDS
-
dg_broker_config_file1edg_broker_config_file2(se presente, indica l'esistenza di una replica) -
standby_file_management(se presente) -
spfile(creeremo un nuovo SPFILE più avanti) -
Qualsiasi
log_archive_destparametro che punti a destinazioni in standby (conservare sololog_archive_dest_1per l'archiviazione locale)
-
-
Aggiungi parametri di conversione dei nomi di file (vedi sotto)
-
Regola i parametri di memoria in base alla dimensione dell'istanza EC2 (opzionale ma consigliato)
Informazioni sui parametri di conversione dei nomi di file:
I LOG_FILE_NAME_CONVERT parametri DB_FILE_NAME_CONVERT and sono fondamentali per la duplicazione RMAN. Indicano a RMAN come mappare i percorsi dei file di origine ai percorsi dei file di destinazione durante il processo di duplicazione. Senza questi parametri, RMAN tenterà di creare file negli stessi percorsi dell'origine, operazione che avrà esito negativo su EC2.
Considerazioni chiave:
-
Ogni parametro accetta coppie di stringhe: percorso di origine seguito da percorso di destinazione
-
È possibile specificare più coppie in un singolo parametro
-
Per il multitenant, è necessario mappare i percorsi per e tutti i
CDB$ROOTPDB$SEEDPDB -
L'ordine delle coppie è importante: RMAN le elabora nell'ordine specificato
-
I percorsi fanno distinzione tra maiuscole e minuscole e devono corrispondere esattamente
Mappature dei percorsi:
|
Percorso personalizzato RDS |
Percorso EC2 |
Descrizione |
|---|---|---|
| /rdsdbbin | //oracolo u01/app | Base Oracle |
| /rdsdbdata/db/ORCL_A/datafile/ | /u01/app/oracle/oradata/ORCL/datafile/ | File di dati |
| /rdsdbdata/db/ORCL_A/controlfile/ | /u01/app/oracle/oradata/ORCL/controlfile/ | File di controllo |
| /rdsdbdata/db/ORCL_A/onlinelog/ | /u01/app/oracle/oradata/ORCL/onlinelog/ | Redo log online |
| /rdsdbdata/db/ORCL_A/arch/ | /u01/app/oracle/oradata/ORCL/arch/ | Registri di archivio |
| /rdsdbdata/admin/ORCL/adump | /u01/app/oracle/admin/ORCL/adump | Audit dump |
| /rdsdbdata/log | //oracolo u01/app | Destinazione diagnostica |
|
Percorso personalizzato RDS |
Percorso EC2 |
Descrizione |
|---|---|---|
/rdsdbbin |
/u01/app/oracle |
Base Oracle |
/rdsdbdata/db/cdb/RDSCDB/datafile/ |
/u01/app/oracle/oradata/ORCL/cdb/datafile/ |
File di dati principali CDB |
/rdsdbdata/db/cdb/pdbseed/ |
/u01/app/oracle/oradata/ORCL/pdbseed/datafile/ |
PDB$SEEDfile di dati |
/rdsdbdata/db/pdb/RDSCDB_A/ |
/u01/app/oracle/oradata/ORCL/pdb/datafile/ |
file di dati PDB (OMF con GUID) |
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/ |
/u01/app/oracle/oradata/ORCL/controlfile/ |
File di controllo |
/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/ |
/u01/app/oracle/oradata/ORCL/onlinelog/ |
Redo log online |
/rdsdbdata/db/cdb/RDSCDB_A/arch/redolog |
/u01/app/oracle/oradata/ORCL/arch/ |
Registri di archivio |
/rdsdbdata/admin/RDSCDB/adump |
/u01/app/oracle/admin/ORCL/adump |
Audit dump |
/rdsdbdata/log |
/u01/app/oracle |
Destinazione diagnostica |
Aggiungi parametri di conversione:
Esempio Non-CDB:
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Esempio Multitenant (deve includere le mappature per la radice del CDB e tutti i percorsi PDB): PDB$SEED
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Importante: per il multitenant, ensure = è presente nel file dei parametri. enable_pluggable_database TRUE RDS Custom utilizza OMF per i file di dati PDB con GUID-based sottodirectory: la mappatura dei percorsi lo gestisce automaticamente.
File di parametri di esempio completi:
Esempio File di Non-CDB parametri di esempio (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6039797760 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7449083904 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12385852416 *.memory_target=12385852416 *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1673 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Esempio Esempio di file di parametri Multitenant (): initORCL.ora
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6006243328 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7415529472 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL/pdb/datafile' *.db_create_online_log_dest_1='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.enable_pluggable_database=TRUE *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12361688064 *.memory_target=12361688064 *.noncdb_compatible=TRUE *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1670 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Spiegazioni dei parametri chiave:
-
enable_pluggable_database=TRUE: Richiesto per CDB multitenant. Questo parametro abilita la funzionalità di database collegabile. -
noncdb_compatible=TRUE: impostato da RDS Custom per la compatibilità con le versioni precedenti. Può essere conservato o rimosso in base alle tue esigenze. -
db_create_file_dest: specifica la posizione predefinita per Oracle Managed Files (OMF). Per il multitenant, indica la directory dei file di dati PDB. -
db_create_online_log_dest_1: specifica la posizione per i redo log online quando si utilizza OMF. -
DB_FILE_NAME_CONVERT: fondamentale per la duplicazione di RMAN. Mappa i percorsi dei file di dati di origine sui percorsi di destinazione. -
LOG_FILE_NAME_CONVERT: mappa i percorsi di redo log di origine ai percorsi di destinazione. -
memory_targetememory_max_target: regolali in base alla memoria dell'istanza EC2. I valori mostrati sono esempi. -
processes: numero massimo di processi del sistema operativo che possono connettersi a Oracle. Modifica in base al carico di lavoro.
Linee guida per il dimensionamento della memoria:
Quando si regolano i parametri di memoria per l'istanza EC2:
|
Memoria dell'istanza EC2 |
memory_target consigliata |
Memory_max_target consigliato |
|---|---|---|
| 16 GB | 12 GB (12884901888 byte) | 14 GB (15032385536 byte) |
| 32 GB | 24 GB (25769803776 byte) | 28 GB (30064771072 byte) |
| 64 GB | 48 GB (51539607552 byte) | 56 GB (60129542144 byte) |
| 128 GB | 96 GB (103079215104 byte) | 112 GB (120259084288 byte) |
Lascia circa il 20-25% della memoria di sistema per il sistema operativo e altri processi.
Fase 5: Configurare TNS e listener
In entrambe le istanze, aggiungi le voci TNS a: tnsnames.ora
Esempio Non-CDB:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Esempio Multitenant:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Esempio Configura il listener su EC2 (): $ORACLE_HOME/network/admin/listener.ora
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521))) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL)))
Esempio Avvia il listener:
lsnrctl start
Nota
Per la duplicazione attiva di RMAN, le voci TNS si connettono all'istanza del database utilizzando SID (non SERVICE_NAME). Per il multitenant, si connette al CDB e RMAN duplica automaticamente tutti i PDB.
Passaggio 6: avvia il database su EC2 NOMOUNT
Esempio
export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora';
Esempio Verifica i parametri:
SQL> SHOW PARAMETER db_name SQL> SHOW PARAMETER control_files SQL> SHOW PARAMETER enable_pluggable_database -- For multitenant
Fase 7: Eseguire la duplicazione attiva di RMAN
La duplicazione attiva RMAN copia il database dall'origine attiva e in esecuzione alla destinazione. Il database di origine rimane online e accessibile alle applicazioni durante tutto questo processo.
Connect RMAN sia all'istanza di origine che a quella di destinazione:
Esempio
rman target sys/<password>@DB_SOURCE auxiliary sys/<password>@DB_TARGET
Esempio Output previsto per dispositivi non CDB:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: ORCL (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
Esempio Output previsto per multitenant:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: RDSCDB (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
Esempio Esegui il comando di duplicazione attivo:
RMAN> DUPLICATE DATABASE TO 'ORCL' FROM ACTIVE DATABASE NOFILENAMECHECK;
Nota
-
L'origine rimane online: il database di origine continua a soddisfare le richieste delle applicazioni durante la duplicazione
-
Per gli utenti non CDB: questa operazione duplica l'intero database mentre rimane online
-
Per utenti multitenant: questa soluzione duplica l'intero CDB
CDB$ROOT, compresi tutti i PDB, in un'unicaPDB$SEEDoperazione, mentre il codice sorgente rimane online -
NOFILENAMECHECK: consente a RMAN di procedere anche se i nomi dei file differiscono tra origine e destinazione
-
Durata: dipende dalla dimensione del database e dalla larghezza di banda della rete. Per un database da 100 GB, aspettati 30-60 minuti
-
Impatto sulla rete: utilizzo elevato della larghezza di banda di rete durante la duplicazione, ma il database di origine rimane accessibile
Il processo di duplicazione attiva di RMAN include diverse fasi:
-
Connessione ai database di origine e di destinazione
-
Creazione di un file
SPFILEdalla memoria sulla destinazione -
Ripristino del file di controllo sulla destinazione
-
Montaggio del database di destinazione
-
Copia di tutti i file di dati dall'origine alla destinazione tramite la rete (l'origine rimane online)
-
Ripristino del database di destinazione
-
Apertura del database di destinazione con
RESETLOGS
Durante la duplicazione, il database di origine:
-
Rimane in modalità
READ WRITE -
Continua ad accettare connessioni
-
Elabora le transazioni normalmente
-
Genera normalmente i redo log
-
È completamente accessibile alle applicazioni
Esempio Monitora i progressi in un'altra sessione:
SQL> SELECT sid, serial#, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork;
Monitoraggio e risoluzione dei problemi dettagliati durante la duplicazione di RMAN:
Durante l'esecuzione della duplicazione RMAN, è possibile monitorarne l'avanzamento utilizzando diversi metodi:
-
Monitora l'uscita RMAN:
La sessione RMAN mostrerà informazioni dettagliate sullo stato di avanzamento, tra cui:
-
Allocazione dei canali
-
Avanzamento della copia dei file di dati
-
Tempo di completamento stimato
-
Byte elaborati
channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000Esempio Output di esempio:
channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000 -
-
Monitora le operazioni di lunga durata:
Esempio In una sessione SQL*Plus separata sull'istanza EC2 di destinazione:
SQL> SELECT sid, serial#, opname, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete, time_remaining, elapsed_seconds FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork ORDER BY start_time;Questa query mostra:
-
opname: nome dell'operazione (ad esempio, «RMAN: ripristino completo dei file di dati») -
sofar: Blocchi elaborati finora -
totalwork: Blocchi totali da elaborare -
pct_complete: Percentuale di completamento -
time_remaining: secondi rimanenti stimati -
elapsed_seconds: Tempo trascorso finora
-
-
Monitora i canali RMAN:
Esempio
SQL> SELECT sid, serial#, context, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE opname LIKE 'RMAN%' AND totalwork > 0 AND sofar <> totalwork; -
Controlla il registro degli avvisi:
Esempio Sull'istanza EC2 di destinazione, monitora il registro degli avvisi per eventuali errori o avvisi:
tail -f $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.logProblemi comuni durante la duplicazione di RMAN:
-
Timeout di rete
RMAN-03009: failure of duplicate command on ORA_AUX_DISK_1 channel ORA-03135: connection lost contactSoluzione: aumenta i valori di timeout di rete in entrambe le
sqlnet.oraistanze:SQLNET.RECV_TIMEOUT=600 SQLNET.SEND_TIMEOUT=600 -
Spazio insufficiente sull'obiettivo
RMAN-03009: failure of duplicate command ORA-19504: failed to create file "/u01/app/oracle/oradata/ORCL/datafile/users01.dbf" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 28: No space left on deviceSoluzione: controlla lo spazio disponibile e aggiungi ulteriore capacità di volume EBS:
df -h /u01/app/oracle/oradata -
Errori nel file dei parametri
RMAN-05021: this configuration cannot be used RMAN-06004: ORACLE error from auxiliary database: ORA-01261: Parameter db_create_file_dest destination string cannot be translatedSoluzione: verificate che tutte le directory nel file dei parametri esistano e dispongano delle autorizzazioni appropriate.
-
Mancata corrispondenza del file di password
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of duplicate command at 03/03/2026 12:00:00 RMAN-06136: ORACLE error from auxiliary database: ORA-01017: invalid username/password; logon deniedSoluzione: assicuratevi che il file delle password sulla destinazione corrisponda all'origine e abbia il nome corretto (
orapwORCL).
-
Fase 8: Aprire i PDB (solo multitenant)
Una volta completata la duplicazione RMAN, il CDB su EC2 è aperto in READ WRITE modalità, ma tutti i PDB sono attivi. MOUNTED Si tratta di un comportamento previsto: è necessario aprirli manualmente.
Controlla lo stato attuale del PDB:
SQL> SELECT con_id, name, open_mode FROM v$pdbs;
Output previsto (esempio con un solo PDB denominatoORCLDB):
CON_ID NAME OPEN_MODE ---------- ------------------------------ ---------- 2 PDB$SEED READ ONLY 3 ORCLDB MOUNTED
Apri tutti i PDB:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN; Pluggable database altered.
Verifica che tutti i PDB siano ora aperti in READ WRITE modalità:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Output previsto:
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
Configura l'apertura automatica all'avvio utilizzando il metodo save state (consigliato per Oracle 19c):
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.
Questo indica a Oracle di ricordare lo stato attuale di apertura dei PDB e di ripristinarlo all'avvio del CDB.
Verifica lo stato salvato:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Verifica che i servizi PDB siano registrati con il listener:
lsnrctl services
L'output previsto dovrebbe mostrare i servizi per il CDB e ogni PDB. Se i servizi non vengono visualizzati:
SQL> ALTER SYSTEM REGISTER;
Quindi ricontrolla conlsnrctl services.
Passaggio 9: rimuovere gli oggetti RDS Custom
Poiché ora si tratta di un database autogestito su EC2, è necessario rimuovere gli utenti e gli oggetti RDS. Custom-specific Il processo di pulizia differisce tra le architetture non CDB e quelle multitenant.
Importante
Prima di eliminare RDS-specific utenti e tablespace, verificate che non esistano oggetti applicativi in base a questi schemi:
SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;
Se vengono trovati oggetti applicativi, migrateli negli schemi applicativi appropriati prima di procedere.
Esempio Non-CDB:
SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Output previsto: no rows selected
Multitenant:
In un ambiente multitenant, RDS Custom crea utenti comuni visibili su tutti i PDB. CDB$ROOT È necessario ripulire da. CDB$ROOT
-- Connect to CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE '%RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- SQL> DROP USER C##RDSADMIN CASCADE ; -- Drop directories and tablespace SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB SQL> ALTER SESSION SET CONTAINER =<PDB_NAME>; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Output previsto per tutte le query: no rows selected
Fase 10: Configurazione dell'avvio automatico
CreaSPFILE:
SQL> CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
Per chi utilizza più tenant, assicurati che i PDB siano aperti:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
/etc/oratabModifica:
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Fase 11: Convalida finale
Esempio Non-CDB:
SQL> SELECT name, open_mode, log_mode FROM v$database; SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';
Esempio Multitenant:
SQL> SELECT name, open_mode, log_mode, cdb FROM v$database; SQL> SELECT con_id, name, open_mode FROM v$pdbs; SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; SQL> SELECT con_id, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id;
Test application connectivity: # Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Fase 12: Riprendere l'automazione RDS Custom
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1
Opzione 2: migrazione fisica con Oracle Data Guard
Questa sezione fornisce i passaggi dettagliati per la migrazione del database Oracle da RDS Custom for Oracle a EC2 utilizzando Oracle Data Guard. Questo metodo è adatto per le migrazioni che richiedono tempi di inattività minimi.
Quando utilizzare Oracle Data Guard
Scegli Oracle Data Guard quando:
-
Sono necessari tempi di inattività minimi (da secondi a minuti per il passaggio al digitale)
-
Stai migrando database di produzione o mission-critical
-
È necessaria una sincronizzazione continua prima del cutover
-
Desiderate una funzionalità di fallback integrata
-
È necessario testare il database di destinazione prima di effettuare la migrazione
Panoramica di Oracle Data Guard
Oracle Data Guard mantiene un database di standby sincronizzato inviando e applicando continuamente i redo log dal database principale. Quando sei pronto per completare la migrazione, esegui un passaggio che porta lo standby EC2 a quello principale con tempi di inattività minimi (da secondi a minuti). Per i database multitenant, Data Guard protegge automaticamente l'intero CDB, inclusi tutti i PDB. Il ripristino generato da qualsiasi PDB viene inviato allo standby e applicato al PDB corrispondente in standby.
Flusso di lavoro di migrazione per Oracle Data Guard
Fasi (principali) dell'istanza DB personalizzata RDS:
-
Metti in pausa l'automazione personalizzata di Amazon RDS
-
Verifica l'architettura del database (non CDB o CDB con PDB)
-
Verifica che il database principale sia in esecuzione in modalità di registro di archivio e sia abilitato
FORCE_LOGGING -
Crea un file di password
-
Esegui un backup online RMAN del database principale (o usa la duplicazione attiva)
-
Crea un file di parametri dal database di origine
-
Copia i set di backup, il file dei parametri e il file delle password nell'istanza EC2 di destinazione
Fasi dell'istanza DB EC2 (standby):
-
Copia tutti i file dall'origine all'istanza EC2
-
Copia il file delle password nell'istanza EC2
-
Modifica il file dei parametri per EC2 (specifico dell'architettura)
-
Crea il file dei parametri del server dal file dei parametri
-
Ripristina il file di controllo e il database in standby
Fasi di configurazione di Data Guard:
-
Configura i listener Oracle su entrambe le istanze
-
Configura tnsnames.ora su entrambe le istanze
-
Avvia il broker Oracle Data Guard su entrambe le istanze (facoltativo ma consigliato)
-
Abilita la configurazione di Oracle Data Guard
-
Configura fal_server e fal_client sull'istanza di standby EC2
-
Configura i redo log file in standby su entrambe le istanze
-
Ripristina l'istanza in standby
-
Esegui la commutazione manuale
-
Apri il database (e i PDB per il multitenant)
-
Configura l'apertura automatica del PDB (solo multitenant)
-
Rimuovi utenti e oggetti specifici di RDS Custom
-
Crea SPFILE e configura l'avvio automatico
Fase 1: mettere in pausa l'automazione personalizzata di Amazon RDS
Metti in pausa la modalità di automazione sulla tua istanza RDS Custom. Il --resume-full-automation-mode-minute parametro deve essere modificato in base alle dimensioni del database e al tempo di configurazione di Data Guard previsto.
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 480 \ --region us-east-1
Convalida lo stato dell'automazione:
aws rds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'
Output previsto: "» all-paused
Passaggio 2: confermare la modalità di registro di archivio e FORCE_LOGGING
Oracle Data Guard richiede che il database primario sia in modalità di registro di archivio con la registrazione forzata abilitata:
sqlplus / as sysdba SQL> SELECT log_mode, force_logging FROM v$database;
Output previsto:
LOG_MODE FORCE_LOGGING ------------ ------------- ARCHIVELOG YES
Se la registrazione forzata non è abilitata, esegui:
SQL> ALTER DATABASE FORCE LOGGING;
Fase 3: Creare file di password e parametri
Crea un file di password utilizzandoorapwd. Recupera la password SYS da AWS Secrets Manager.
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD>entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD>entries=10
Crea un file di parametri dal database di origine:
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant
Fase 4: Eseguire il backup RMAN o utilizzare la duplicazione attiva
Sono disponibili due opzioni per creare il database di standby:
Opzione A: backup online RMAN (consigliato per la maggior parte degli scenari)
Crea una directory di backup ed esegui il backup del database:
mkdir -p /rdsdbdata/backup rman target / RMAN> run { backup as compressed backupset filesperset 2 format '/rdsdbdata/backup/db_%U' database; sql 'alter system archive log current'; backup as compressed backupset filesperset 50 format '/rdsdbdata/backup/arch_%U' archivelog all; } RMAN> backup current controlfile for standby format '/rdsdbdata/backup/standby.ctl';
Nota
Per il multitenant, la parola chiave del database esegue automaticamente il backup dell'intero CDB, inclusi tutti i PDB.
Opzione B: duplicazione attiva (metodo alternativo)
Salta la fase di backup e utilizza la duplicazione attiva RMAN per creare lo standby direttamente sulla rete. Ciò elimina la necessità di archiviazione di backup e trasferimenti di file. Dopo aver configurato TNS e i listener (vedi sotto), esegui:
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;
Questa guida si concentra sull'opzione A (basata sul backup), ma l'opzione B è un'alternativa valida.
Fase 5: Trasferimento dei file su EC2
Scegli il metodo di trasferimento dei file che preferisci. Questa guida utilizza Amazon S3 a titolo di esempio.
Utilizzando Amazon S3:
Esempio Per Non-CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
Esempio Per Multitenant:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL
Passaggio 6: modifica del file dei parametri su EC2
Modifica $ORACLE_HOME/dbs/initORCL.ora sull'istanza EC2 e apporta queste modifiche critiche:
-
Aggiorna il nome del database: per il multitenant, modifica tutte le occorrenze di in
RDSCDBORCL -
Cambia db_unique_name: Da (o) a
ORCL_ARDSCDB_AORCL_B -
Converti i percorsi personalizzati RDS in percorsi EC2: sostituisci con
/rdsdbdata//u01/app/oracle/ -
Rimuovi i parametri RDS Custom-specific
-
dg_broker_config_file1edg_broker_config_file2(se presente) -
standby_file_management(se presente) -
spfile(ne creeremo una nuovaSPFILEpiù tardi) -
Qualsiasi
log_archive_destparametro che punti a destinazioni in standby
-
-
Regola i parametri di memoria in base alla dimensione dell'istanza EC2 (opzionale ma consigliato)
Mappature dei percorsi:
Non-CDB:
-
/rdsdbdata/db/ORCL_A/datafile/→/u01/app/oracle/oradata/ORCL/datafile/ -
/rdsdbdata/db/ORCL_A/controlfile/→/u01/app/oracle/oradata/ORCL/controlfile/ -
/rdsdbdata/db/ORCL_A/onlinelog/→/u01/app/oracle/oradata/ORCL/onlinelog/ -
/rdsdbdata/admin/ORCL/adump→/u01/app/oracle/admin/ORCL/adump
Multitenant:
-
/rdsdbdata/db/cdb/RDSCDB/datafile/→/u01/app/oracle/oradata/ORCL/cdb/datafile/ -
/rdsdbdata/db/cdb/pdbseed/→/u01/app/oracle/oradata/ORCL/pdbseed/datafile/ -
/rdsdbdata/db/pdb/RDSCDB_A/→/u01/app/oracle/oradata/ORCL/pdb/datafile/ -
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/→/u01/app/oracle/oradata/ORCL/controlfile/ -
/rdsdbdata/admin/RDSCDB/adump→/u01/app/oracle/admin/ORCL/adump
Importante: per il multitenant, ensure enable_pluggable_database = TRUE è presente nel file dei parametri.
Fase 7: Creare SPFILE e ripristinare il database in standby
Avvia l'istanza e crea SPFILE:
sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> CREATE SPFILE='/u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora' FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE;
Crea un link simbolico:
ln -sfn /u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora $ORACLE_HOME/dbs/spfileORCL.ora
Avvia l'istanza e ripristina:
SQL> STARTUP NOMOUNT; rman target /
Se i file di backup si trovano in un percorso diverso da quello di origine, catalogali prima:
RMAN> catalog start with '/u01/app/oracle/backup/';
Ripristina il file di controllo in standby e monta:
RMAN> restore standby controlfile from '/u01/app/oracle/backup/standby.ctl'; RMAN> alter database mount;
Se i percorsi dei file di dati sono diversi (ad esempio, utilizzando ASM), usaSET NEWNAME:
RMAN> run { set newname for database to '+DATA/%b'; restore database; switch datafile all; }
Altrimenti, ripristina semplicemente:
RMAN> restore database;
Ripristina il database fino all'ultima sequenza disponibile:
RMAN> list backup of archivelog all; RMAN> recover database until sequence <LAST_SEQ + 1>;
Nota
Per il multitenant, RMAN ripristina e recupera automaticamente tutti i PDB. Non è necessario ripristinare ogni PDB separatamente.
Fase 8: Configurare TNS e ascoltatori
In entrambe le istanze, aggiungi le voci TNS a: tnsnames.ora
Esempio Non-CDB:
ORCL_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Esempio Multitenant:
RDSCDB_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =<EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Configura i listener su entrambe le istanze. Su RDS Custom, aggiungi a: listener.ora
Esempio Per: Non-CDB
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE.1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<RDS_CUSTOM_IP>)))
Esempio Per Multitenant:
SID_LIST_L_RDSCDB_DG=(SID_LIST = (SID_DESC = (SID_NAME = RDSCDB)(GLOBAL_DBNAME = RDSCDB) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE-CDB.1))) L_RDSCDB_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<RDS_CUSTOM_IP>)))
Avvia l'ascoltatore:
$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG # or L_RDSCDB_DG for multitenant
Su EC2, crea: $ORACLE_HOME/network/admin/listener.ora
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST =<EC2_IP>)))
Avvia l'ascoltatore:
$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG
Nota
Se preferisci, puoi utilizzare il listener esistente su RDS Custom, ma la creazione di un listener Data Guard separato offre un isolamento migliore.
Importante
Se tnsping la nostra listener connettività fallisce, controlla iptables le regole su EC2. Molte istanze Linux EC2 hanno iptables regole predefinite che bloccano la porta 1521. Aggiungi una regola: sudo iptables -I INPUT 5 -p
tcp --dport 1521 -j ACCEPT
Passaggio 9: abilitare il broker e la configurazione di Data Guard
In entrambe le istanze, abilita il broker Data Guard:
sqlplus / as sysdba SQL> ALTER SYSTEM SET dg_broker_start=true;
Sul primario RDS Custom, connettiti al broker Data Guard e crea la configurazione:
dgmgrl /
Esempio Per Non-CDB:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS ORCL_A CONNECT IDENTIFIER IS ORCL_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;
Esempio Per Multitenant:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS RDSCDB_A CONNECT IDENTIFIER IS RDSCDB_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;
Imposta gli identificatori di connessione statici e abilita:
Esempio Per Non-CDB:
DGMGRL> edit database orcl_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
Esempio Per Multitenant:
DGMGRL> edit database rdscdb_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=RDSCDB)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
Nota
Il broker Data Guard è facoltativo ma consigliato per una gestione più semplice. Per migrazioni semplici, puoi configurare Data Guard manualmente senza il broker.
Nota
Quando abiliti Data Guard per un CDB, protegge automaticamente tutti i PDB. Il ripristino generato da qualsiasi PDB viene inviato allo standby e applicato al PDB corrispondente in standby.
Passaggio 10: configura i redo log in standby e avvia il ripristino
Nell'istanza di standby EC2, aggiungi i redo log file in standby (n+1 dove n è il numero di gruppi di redo log online):
ALTER DATABASE ADD STANDBY LOGFILE ('slog1.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog2.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog3.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog4.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog5.rdo') SIZE 128M;
Nota
Per i sistemi multitenant, i redo log in standby vengono creati a livello di CDB e sono condivisi da tutti i PDB.
Configura i parametri FAL in standby:
Esempio Per: Non-CDB
SQL> alter system set fal_server = 'ORCL_A'; SQL> alter system set fal_client = 'ORCL_B';
Esempio Per Multitenant:
SQL> alter system set fal_server = 'RDSCDB_A'; SQL> alter system set fal_client = 'ORCL_B';
Avvia il ripristino gestito:
SQL> recover managed standby database disconnect from session;
Monitora il ritardo di applicazione:
SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag';
Monitoraggio e gestione dettagliati della sincronizzazione di Data Guard:
Il monitoraggio di Data Guard è fondamentale per garantire una migrazione di successo. Ecco alcune tecniche di monitoraggio complete:
-
Monitora le statistiche di Data Guard:
-- Comprehensive Data Guard statistics SQL> SELECT name, value, unit, time_computed, datum_time FROM v$dataguard_stats ORDER BY name;Metriche chiave da monitorare:
-
ritardo di trasporto: differenza di tempo tra il momento in cui il ripristino è stato generato sul sistema primario e quello in cui è stato ricevuto in standby
-
apply lag: differenza di tempo tra il momento in cui il ripristino è stato generato e l'applicazione in standby
-
apply rate: Frequenza con cui viene applicato il ripristino () MB/sec
-
ripristino ricevuto: ripristino totale ricevuto in modalità standby
-
ripristino applicato: ripristino totale applicato in modalità standby
-
-
Monitora la spedizione dei log di archivio:
Sul primario (RDS Custom):
-- Check archive log generation rate SQL> SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') AS hour, COUNT(*) AS log_count, ROUND(SUM(blocks * block_size)/1024/1024/1024, 2) AS size_gb FROM v$archived_log WHERE first_time > SYSDATE - 1 GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24') ORDER BY hour; -- Check archive log destination status SQL> SELECT dest_id, status, error, destination FROM v$archive_dest WHERE status != 'INACTIVE';In standby (EC2):
-- Check archive log apply status SQL> SELECT sequence#, first_time, next_time, applied FROM v$archived_log WHERE applied = 'NO' ORDER BY sequence#; -- Check archive log gap SQL> SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap; -
Monitora il processo di ripristino gestito:
-- Check if managed recovery is running SQL> SELECT process, status, thread#, sequence#, block#, blocks FROM v$managed_standby WHERE process LIKE 'MRP%' OR process LIKE 'RFS%'; -- Check recovery progress SQL> SELECT process, status, sequence#, TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS timestamp FROM v$managed_standby ORDER BY process; -
Monitora la frequenza di ripetizione delle applicazioni per più tenant:
Per i database multitenant, monitora la frequenza di applicazione per PDB:
-- Check redo apply rate per container SQL> SELECT con_id, name, ROUND(SUM(value)/1024/1024, 2) AS redo_applied_mb FROM v$con_sysstat cs, v$containers c WHERE cs.con_id = c.con_id AND cs.name = 'redo size' GROUP BY con_id, name ORDER BY con_id; -
Monitora i registri di ripristino in standby:
-- Check standby redo log status SQL> SELECT group#, thread#, sequence#, bytes/1024/1024 AS size_mb, status FROM v$standby_log ORDER BY group#; -- Check if standby redo logs are being used SQL> SELECT group#, thread#, sequence#, status, archived FROM v$standby_log WHERE status = 'ACTIVE'; -
Stima del completamento della sincronizzazione:
Calcola il tempo rimanente in base alla tariffa di applicazione:
-- Calculate estimated time to catch up SQL> SELECT ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply lag')/60, 2) AS lag_minutes, ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate')/1024, 2) AS apply_rate_mbps, ROUND( (SELECT value FROM v$dataguard_stats WHERE name = 'apply lag') / NULLIF((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate'), 0) / 60, 2 ) AS estimated_catchup_minutes FROM dual;
Problemi comuni di sincronizzazione di Data Guard:
Problema 1: ritardo di applicazione elevato
Caratteristiche:
SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag'; NAME VALUE -------------------------------- ----- apply lag +00 01:30:00
Cause e soluzioni:
-
Insufficiente CPU/IO in standby: aggiorna il tipo di istanza EC2 o aumenta gli IOPS EBS
-
Limitazione della larghezza di banda di rete: utilizza reti avanzate o tipi di istanze con larghezza di banda superiore
-
PDB multipli con elevata velocità di transazione: valuta la possibilità di aumentare il parallelismo Redo Apply (richiede una licenza Active Data Guard)
-- Increase apply parallelism (requires Active Data Guard) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
Problema 2: lacuna nei registri di archiviazione
Caratteristiche:
SQL> SELECT * FROM v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ------- ------------- -------------- 1 1234 1240
Soluzione::
-- FAL (Fetch Archive Log) will automatically fetch missing logs -- Verify FAL parameters are set correctly SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -- Manually register missing archive logs if needed -- On primary, check if logs still exist SQL> SELECT name FROM v$archived_log WHERE sequence# BETWEEN 1234 AND 1240; -- If logs are missing on primary, you may need to rebuild the standby
Problema 3: errore di trasporto Redo
Caratteristiche:
SQL> SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id = 2; DEST_ID STATUS ERROR ------- --------- ---------------------------------------- 2 ERROR ORA-16191: Primary log shipping client not logged on standby
Soluzione::
-- Check network connectivity -- Verify TNS configuration -- Check listener status on standby -- Restart log transport SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'DEFER'; SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';
Problema 4: ripristino gestito che non applica il ripristino
Caratteristiche:
SQL> SELECT process, status FROM v$managed_standby WHERE process = 'MRP0'; PROCESS STATUS --------- ------------ MRP0 WAIT_FOR_LOG
Soluzione::
# Check if archive logs are arriving ls -ltr /u01/app/oracle/oradata/ORCL/arch/ # Check alert log for errors tail -100 $ORACLE_BASE/diag/rdbms/orcl_b/ORCL/trace/alert_ORCL.log # Restart managed recovery sqlplus / as sysdba SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Per Multitenant, puoi anche controllare lo stato di ogni PDB in standby:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Output previsto (PDB in stato di standby): MOUNTED
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED MOUNTED 3 ORCLDB MOUNTED
Nota
In uno standby fisico, i PDB rimangono in MOUNTED stato durante il ripristino gestito.
Fase 11: Eseguire lo switchover
Dopo aver verificato che lo standby sia completamente sincronizzato e pronto, esegui il passaggio. Per il multitenant, lo switchover commuterà l'intero CDB (tutti i PDB) dal primario RDS Custom allo standby EC2.
Sull'istanza primaria RDS Custom, connettiti al broker Data Guard e verifica che entrambi i database siano pronti per il passaggio:
Esempio Per: Non-CDB
DGMGRL> VALIDATE DATABASE ORCL_A; DGMGRL> VALIDATE DATABASE ORCL_B;
Esempio Per Multitenant:
DGMGRL> VALIDATE DATABASE RDSCDB_A; DGMGRL> VALIDATE DATABASE ORCL_B;
Entrambi dovrebbero apparire Ready for Switchover: Yes
Passa dal primario RDS Custom allo standby EC2:
DGMGRL> SWITCHOVER TO ORCL_B;
Verifica che il passaggio sia avvenuto correttamente:
DGMGRL> SHOW CONFIGURATION VERBOSE;
L'istanza EC2 (ORCL_B) è ora il database principale e l'istanza RDS Custom è lo standby fisico.
Fase 12: Aprire i PDB (solo multitenant)
Dopo il passaggio, il CDB su EC2 è aperto in modalità READ WRITE, ma tutti i PDB sono nello stato MOUNTED. È necessario aprirli manualmente.
Connect al nuovo sistema primario su EC2:
sqlplus / as sysdba SQL> SELECT name, open_mode, database_role, cdb FROM v$database;
Output previsto:
NAME OPEN_MODE DATABASE_ROLE CDB --------- -------------------- ---------------- --- ORCL READ WRITE PRIMARY YES
Controlla lo stato attuale del PDB:
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Output previsto (PDB in MOUNTED stato, esempio con un PDB denominato): ORCLDB
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB MOUNTED
Apri tutti i PDB:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Database collegabile alterato.
Verifica che tutti i PDB siano ora aperti in modalità: READ WRITE
SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;
Output previsto:
CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
Passaggio 13: configura l'apertura automatica del PDB all'avvio (solo multitenant)
Configura i PDB in modo che si aprano automaticamente all'avvio del CDB utilizzando il metodo save state (consigliato per Oracle 19c):
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.
Verifica lo stato di salvataggio:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Verifica che i servizi PDB siano registrati con il listener:
lsnrctl services
L'output previsto dovrebbe mostrare i servizi per il CDB e ogni PDB. Se i servizi non vengono visualizzati:
SQL> ALTER SYSTEM REGISTER;
Quindi ricontrolla conlsnrctl services.
Passaggio 14: rimuovere gli oggetti RDS Custom
Poiché ora si tratta di un database autogestito su EC2, è necessario rimuovere utenti e oggetti specifici di RDS Custom. Il processo di pulizia differisce leggermente tra le architetture non CDB e quelle multitenant.
Importante
Prima di eliminare RDS-specific utenti e tablespace, verificate che non esistano oggetti applicativi in base a questi schemi:
SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;
Se vengono trovati oggetti applicativi, migrateli negli schemi applicativi appropriati prima di procedere.
Non-CDB pulizia:
sqlplus / as sysdba -- Drop RDS-specific users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Output previsto: no rows selected
Pulizia multitenant:
In un ambiente multitenant, RDS Custom crea utenti comuni visibili su tutti i PDB. CDB$ROOT È necessario ripulire da. CDB$ROOT
sqlplus / as sysdba -- Verify you are in CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE 'RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- Example (adjust based on your findings): -- SQL> DROP USER C##RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB (example with one PDB named ORCLDB) SQL> ALTER SESSION SET CONTAINER = ORCLDB; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';
Output previsto per tutte le query: nessuna riga selezionata
Fase 15: Configurare l'avvio automatico
Verifica che SPFILE sia in uso:
sqlplus / as sysdba SQL> SHOW PARAMETER spfile;
Se il spfile percorso è corretto, non è necessaria alcuna azione. In caso contrario, creane uno:
SQL> CREATE SPFILE FROM MEMORY;
Riavvia il database:
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
Per il multitenant, apri tutti i PDB (dovrebbero aprirsi automaticamente se hai salvato lo stato in precedenza):
SQL> SELECT con_id, name, open_mode FROM v$pdbs;
Se i PDB non sono aperti, apriteli manualmente:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Modifica/etc/oratab:
vi /etc/oratab
Cambia la riga ORCL da N aY:
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
Fase 16: Convalida finale
Esegui una convalida completa sul database migrato.
Esempio Per: Non-CDB
sqlplus / as sysdba -- Verify database role and status SQL> SELECT name, open_mode, log_mode, database_role FROM v$database; -- Check database size SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; -- Verify all objects are valid SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type; -- Verify data files SQL> SELECT name, status FROM v$datafile; -- Test application connectivity SQL> SELECT username, machine, program FROM v$session WHERE username IS NOT NULL;
Esempio Per Multitenant:
sqlplus / as sysdba -- Verify CDB status SQL> SELECT name, open_mode, log_mode, cdb, database_role FROM v$database; -- Verify all PDBs are open SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs; -- Check total CDB size SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Check size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name,p.con_id ORDER BY p.con_id; -- Verify all objects are valid across all PDBs SQL> SELECT con_id, owner, object_type, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id, owner, object_type; -- Verify PDB services are registered SQL> SELECT name FROM v$services ORDER BY name; Test application connectivity: # Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Verifica la connettività delle applicazioni:
# Non-CDB sqlplus<app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus<app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>
Passaggio 17: pulire i file di backup
Al termine della convalida, rimuovi i file di backup e scollega il volume di backup se utilizzi un volume EBS separato:
rm -rf /u01/app/oracle/backup/*
Se utilizzi un volume EBS separato per i backup:
# Unmount the volume sudo umount /u01/app/oracle/backup # Detach and delete the EBS volume from AWS Console or CLI aws ec2 detach-volume --volume-id<volume-id>aws ec2 delete-volume --volume-id<volume-id>
Fase 18: Riprendere l'automazione personalizzata di RDS
Se prevedi di mantenere l'istanza RDS Custom in esecuzione come riserva durante un periodo di convalida, riprendi l'automazione:
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1
Risoluzione dei problemi comuni
Questa sezione descrive i problemi più comuni che potresti riscontrare durante la migrazione sia per la duplicazione RMAN che per gli approcci Oracle Data Guard, coprendo sia le architetture non CDB che quelle multitenant.
ORA-09925: Impossibile creare il file di audit trail
Causa: la directory di audit specificata nel audit_file_dest parametro non esiste nell'istanza EC2 di destinazione.
Soluzione::
Assicurati che la directory di controllo esista e disponga delle autorizzazioni appropriate:
mkdir -p /u01/app/oracle/admin/ORCL/adump chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chmod -R 755 /u01/app/oracle/admin/ORCL
ORA-01261: La stringa di db_create_file_dest destinazione del parametro non può essere tradotta
Causa: la directory specificata nel db_create_file_dest parametro non esiste nell'istanza EC2 di destinazione.
Soluzione::
Per soggetti non CDB:
mkdir -p /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL
Per più tenant:
mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL
ORA-01804: errore di inizializzazione delle informazioni sul fuso orario
Questo errore può verificarsi quando si elimina l'RDSADMINutente se la sorgente RDS ha una versione di fuso orario superiore a quella installata nel tuo $ORACLE_HOME EC2.
Soluzione::
-
Controlla le versioni del fuso orario:
SELECT * FROM v$timezone_file; SELECT PROPERTY_NAME, PROPERTY_VALUE FROM database_properties WHERE PROPERTY_NAME LIKE '%DST%'; -
Come soluzione alternativa, imposta la variabile di ambiente del file del fuso orario in modo che corrisponda a quella disponibile in $ORACLE_HOME:
ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/timezone_40.datModifica il numero in modo che corrisponda alla versione disponibile nell'installazione.
-
Riprova il rilascio:
sqlplus / as sysdba SQL> DROP USER RDSADMIN CASCADE;
Cross-RU problemi di migrazione (diversi aggiornamenti di versione)
Causa: l'istanza EC2 di destinazione ha una patch Oracle Release Update (RU) diversa o una tantum rispetto all'istanza RDS Custom di origine, il che causa errori di compatibilità durante o dopo la migrazione.
Errori comuni:
-
ORA-00600 errori interni durante la ripetizione dell'applicazione (Data Guard)
-
ORA-39700 il database deve essere aperto con l'opzione
UPGRADE -
Incoerenze nel dizionario dopo la migrazione
-
Oggetti non validi in o
DBA_REGISTRYDBA_OBJECTS
Soluzione::
Procedura consigliata: abbina esattamente le versioni RU e le patch una tantum:
-
Controlla l'esatta versione RU sia sull'origine che sulla destinazione:
-- On both source and target SQL> SELECT * FROM v$version; SQL> SELECT patch_id, patch_uid, version, action, status, description FROM dba_registry_sqlpatch ORDER BY action_time DESC; -
Verifica il livello di patch $ORACLE_HOME:
# On both instances $ORACLE_HOME/OPatch/opatch lsinventory -
Se le versioni non corrispondono, allineale prima della migrazione applicando o ripristinando le patch secondo necessità.
-
Se devi procedere con RU non corrispondenti, esegui datapatch dopo la migrazione:
cd $ORACLE_HOME/OPatch ./datapatch -verbose -
Verifica la presenza di oggetti non validi e ricompila:
SQL> @?/rdbms/admin/utlrp.sql SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type;
Eventi di connettività di rete
Causa: gruppi di sicurezza, ACL di rete o iptables blocco della porta del listener Oracle.
Soluzione::
-
Verifica che i gruppi di sicurezza consentano la porta in modo bidirezionale
-
Controlla iptables su EC2:
sudo iptables -L INPUT -n -v -
Aggiungi una regola se necessario:
# Insert rule before the REJECT rule (typically position 5) sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT # For enhanced security, allow only from specific source IPs sudo iptables -I INPUT 5 -p tcp -s<RDS_Custom_IP>--dport 1521 -j ACCEPT # Save rules permanently sudo service iptables save -
Verifica la connettività:
telnet<EC2_instance_IP>1521 tnsping DB_SOURCE tnsping DB_TARGET
I PDB non si aprono dopo la migrazione (solo multitenant)
Causa: si tratta di un comportamento previsto. Dopo la duplicazione di RMAN o il passaggio a Data Guard, il CDB è aperto ma i PDB sono attivi. MOUNTED
Soluzione::
Aprirli manualmente:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
Se un PDB specifico non riesce ad aprirsi, controlla la presenza di errori nel registro degli avvisi:
tail -100 $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
Le cause più comuni includono file di dati mancanti o problemi di mappatura dei percorsi.
File di dati PDB non trovati o mancata corrispondenza del percorso (solo multitenant)
Causa: la migrazione non ha mappato correttamente tutti i percorsi di origine, specialmente per i file di dati PDB. OMF-based
Soluzione::
-
Controlla quali file di dati mancano:
SQL> SELECT name, status FROM v$datafile WHERE status != 'ONLINE'; -
Se i file sono stati inseriti nella directory sbagliata, rinominali nel file di controllo:
SQL> ALTER DATABASE RENAME FILE '/wrong/path/datafile.dbf' TO '/correct/path/datafile.dbf'; -
Per evitare che ciò accada, verificate sempre i percorsi dei file di dati di origine con
SELECT con_id, name FROM v$datafile ORDER BY con_id;prima di configurare il file dei parametri.
Servizi PDB non registrati con listener (solo multitenant)
Causa: il listener non è a conoscenza dei servizi PDB dopo l'apertura dei PDB.
Soluzione::
-
Registrazione forzata del servizio:
SQL> ALTER SYSTEM REGISTER; -
Se i servizi continuano a non essere visualizzati, controlla il
local_listenerparametro:SQL> SHOW PARAMETER local_listener;Assicurati che punti all'indirizzo corretto dell'ascoltatore. Se necessario, aggiornalo:
SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=<EC2_instance_IP>)(PORT=1521))'; SQL> ALTER SYSTEM REGISTER; -
Verifica con:
lsnrctl services
I PDB non si aprono automaticamente dopo il riavvio del CDB (solo multitenant)
Causa: lo stato di salvataggio del PDB non è stato configurato.
Soluzione::
Verifica che lo stato di salvataggio del PDB sia stato configurato:
SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
Se non viene restituita alcuna riga, salva lo stato:
SQL> ALTER PLUGGABLE DATABASE ALL OPEN; SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;
Data Guard Redo Transport non funziona
Causa: problemi di connettività di rete, configurazione TNS errata o parametri FAL non impostati.
Soluzione::
-
Verifica che lo standby sia in modalità MOUNT:
SQL> SELECT status FROM v$instance; -
Verifica che fal_server e fal_client siano impostati correttamente in standby:
SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -
Verifica la connettività di rete:
tnsping ORCL_A # or RDSCDB_A for multitenant -
Controlla il parametro log_archive_dest_2 sui punti principali di standby (se configurato manualmente senza broker).
Data Guard applica un ritardo crescente con più PDB (solo multitenant)
Causa: per i CDB con più PDB, redo apply può essere più lenta a causa del volume delle modifiche su tutti i contenitori.
Soluzione::
-
Controlla la tariffa di applicazione:
SQL> SELECT name, value, unit FROM v$dataguard_stats WHERE name IN ('apply rate', 'apply lag'); -
Valuta la possibilità di aumentare il parallelismo per redo apply (richiede la licenza Active Data Guard):
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION; -
Verifica che non vi siano vincoli di risorse (CPU I/O) sull'istanza di standby.
Il backup del registro di archivio RMAN non riesce con ORA-19625
Causa: l'automazione RDS Custom ha eliminato i vecchi registri di archivio dal disco, ma il file di controllo di RMAN ne contiene ancora le registrazioni.
Soluzione::
-
Esegui un controllo incrociato e ripulisci le voci obsolete del registro di archivio:
RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; -
Re-run solo il backup del registro di archivio:
RMAN> RUN { SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; BACKUP AS COMPRESSED BACKUPSET FILESPERSET 50 FORMAT '/rdsdbdata/backup/arch_%U' ARCHIVELOG ALL; }
L'eliminazione comune da parte degli utenti non riesce in modalità multitenant (solo multitenant)
Causa: la clausola deve essere eliminata dagli utenti comuni (con il prefisso C##). CONTAINER=ALL
Soluzione::
-- For common users SQL> DROP USER C##RDS_DATAGUARD CASCADE CONTAINER=ALL; -- For non-common users in CDB$ROOT SQL> DROP USER RDSADMIN CASCADE;
Verifica di essere connesso a: CDB$ROOT
SQL> SHOW CON_NAME;
Post-migration attività
Dopo una migrazione riuscita, completa queste attività aggiuntive per assicurarti che il database Oracle autogestito su EC2 sia pronto per la produzione.
Aggiorna le stringhe di connessione dell'applicazione
Per Non-CDB:
-
Indirizza le tue applicazioni verso il nuovo endpoint dell'istanza EC2
-
Aggiorna le stringhe di connessione per utilizzare l'IP o il nome host dell'istanza EC2
-
Testa a fondo tutte le funzionalità dell'applicazione
Per Multitenant:
-
Indirizza le tue applicazioni verso i nuovi nomi di servizio PDB delle istanze EC2 (ad esempio, ORCLDB o i tuoi nomi PDB specifici)
-
Assicurati che le applicazioni si connettano al PDB corretto, non al CDB
-
Aggiorna le stringhe di connessione per utilizzare i nomi dei servizi PDB
-
Verifica tutte le funzionalità dell'applicazione per ogni PDB
Stringhe di connessione di esempio:
# Non-CDB jdbc:oracle:thin:@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) jdbc:oracle:thin:@<EC2_IP>:1521/ORCLDB
Configura la strategia di backup
Imposta una strategia di backup completa per il tuo database autogestito:
Backup RMAN:
-
Configura script di backup RMAN automatizzati per backup completi, incrementali e dei log di archivio
-
Imposta le politiche di conservazione dei backup in base agli obiettivi dei punti di ripristino (RPO)
-
Archivia i backup su Amazon S3 per durabilità ed economicità
-
Verifica regolarmente le procedure di ripristino dei backup
AWS Backup:
-
Utilizzare AWS Backup
per le istantanee dei volumi EBS -
Configura le pianificazioni di backup e le politiche di conservazione
-
Abilita copie di backup su più regioni per il disaster recovery
Per Multitenant:
-
I backup RMAN del CDB includono automaticamente tutti i PDB
-
Se necessario, puoi anche eseguire il backup di singoli PDB
-
Prendi in considerazione le pianificazioni di PDB-specific backup in base ai requisiti aziendali
Esempio di script di backup RMAN:
#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH rman target / << EOF run { backup as compressed backupset database plus archivelog; delete noprompt obsolete; } exit; EOF
Configura il monitoraggio
Implementa un monitoraggio completo per il tuo database EC2-hosted Oracle:
Amazon CloudWatch
-
Configura le CloudWatch metriche per lo stato delle istanze EC2, l'utilizzo del disco e le metriche Oracle personalizzate
-
Crea CloudWatch allarmi per le soglie critiche
-
Usa CloudWatch Logs per il monitoraggio dei registri degli avvisi del database
Oracle Enterprise Manager (OEM):
-
Se disponibile, configura OEM per il monitoraggio del database
-
Configura il monitoraggio e la diagnostica delle prestazioni
-
Configura avvisi automatici per eventi critici
Third-party strumenti:
-
Prendi in considerazione strumenti come Datadog, New Relic o Prometheus per il monitoraggio dei database
-
Effettua l'integrazione con la tua infrastruttura di monitoraggio esistente
Metriche chiave da monitorare:
-
Utilizzo del tablespace
-
Spazio di archiviazione dei log
-
Oggetti non validi
-
Conteggi delle sessioni
-
Eventi di attesa
-
Utilizzo della CPU e della memoria
-
I/O prestazioni
Per Multitenant:
-
Monitora entrambi e le metriche CDB-level PDB-level
-
Imposta avvisi per l'utilizzo e le quote delle risorse PDB
-
Tieni traccia delle metriche delle prestazioni PDB-specific
Configura i gruppi di sicurezza e gli ACL di rete
Rivedi e rafforza la sicurezza per l'istanza EC2:
Gruppi di sicurezza:
-
Limita l'accesso alle porte del database solo agli application server e agli host bastion autorizzati
-
Rimuovi tutte le regole eccessivamente permissive create durante la migrazione
-
Regole dei gruppi di sicurezza dei documenti e relativi scopi
ACL di rete:
-
Configura gli ACL di rete VPC per livelli di sicurezza aggiuntivi
-
Implementa una strategia di sicurezza di difesa approfondita
Accesso SSH:
-
Limita l'accesso SSH a intervalli IP specifici o usa AWS Systems Manager Session Manager
-
Disabilita l'autenticazione tramite password e utilizza solo l'autenticazione basata su chiavi
-
Implementazione dell'autenticazione a più fattori (MFA) per l'accesso privilegiato
Crittografia:
-
Abilita la crittografia a riposo per i volumi EBS
-
Abilita la crittografia in transito per le connessioni al database utilizzando Oracle Native Network Encryption o TLS
-
Ruota regolarmente le chiavi di crittografia
Implementa l'alta disponibilità
Se il tuo carico di lavoro richiede un'elevata disponibilità, prendi in considerazione l'implementazione di:
Oracle Data Guard:
-
Configura un nuovo database in standby su un'altra istanza EC2 per il disaster recovery
-
Per chi è multitenant, Data Guard protegge l'intero CDB, inclusi tutti i PDB
-
Lo standby può trovarsi in una zona o regione di disponibilità diversa
-
Implementa meccanismi di failover automatizzati utilizzando script o strumenti di terze parti
AWS Multi-AZ implementazione:
-
Implementa istanze di standby in diverse zone di disponibilità
-
Usa Amazon Route 53 per il failover DNS
-
Implementa il pooling di connessioni a livello di applicazione con supporto per il failover
Backup e ripristino:
-
Mantenete backup regolari con procedure di ripristino testate
-
Documenta gli obiettivi del tempo di ripristino (RTO) e gli obiettivi dei punti di ripristino (RPO)
-
Conduci regolarmente esercitazioni di disaster recovery
Esegui test approfonditi delle applicazioni
Prima di disattivare l'istanza RDS Custom:
Test funzionali:
-
Verifica che tutte le funzionalità dell'applicazione funzionino correttamente
-
Verifica tutte le funzionalità dipendenti dal database
-
Convalida l'integrità e la coerenza dei dati
Test delle prestazioni:
-
Confronta le metriche delle prestazioni con la linea di base RDS Custom
-
Identifica e risolvi eventuali regressioni delle prestazioni
-
Ottimizza le query e gli indici secondo necessità
Test di carico:
-
Esegui il test del database in base ai picchi di carico previsti
-
Verifica che l'utilizzo delle risorse rimanga entro limiti accettabili
-
Identifica e risolvi eventuali problemi
Test di failover (se HA è configurato):
-
Scenari di failover dei test
-
Verifica la logica di riconnessione delle applicazioni
-
Misura l'RTO e l'RPO effettivi
Test di backup e ripristino:
-
Verifica del corretto funzionamento delle procedure di backup e ripristino
-
Prova il ripristino point-in-time
-
Convalida l'integrità del backup
Per Multitenant:
-
Testa ogni PDB in modo indipendente
-
Verifica l'isolamento del PDB e l'allocazione delle risorse
-
PDB-specific Operazioni di test (clonazione unplug/plug, ecc.)
Disattiva l'istanza personalizzata RDS
Dopo un periodo di convalida riuscito (in genere 1-2 settimane):
-
Backup finale: esegui un backup finale dell'istanza RDS Custom per scopi di archiviazione
# Create final snapshot aws rds create-db-snapshot \ --db-instance-identifier my-custom-instance \ --db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1 -
Documenta la migrazione: aggiorna i runbook e la documentazione con la nuova configurazione EC2
-
Eliminare l'istanza personalizzata RDS: utilizza la AWS console o la CLI per eliminare l'istanza
# Delete RDS Custom instance without final snapshot (if already created above) aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --skip-final-snapshot \ --region us-east-1 # Or create a final snapshot before deletion aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --final-db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1 -
Pulisci le risorse: rimuovi le istantanee, i gruppi di parametri e i gruppi di opzioni associati se non sono più necessari
-
Aggiorna la documentazione: assicurati che tutta la documentazione operativa rifletta la nuova architettura EC2-based
Confronto: RMAN Active Duplication e Oracle Data Guard
La tabella seguente riassume le principali differenze tra le due opzioni di migrazione:
|
Aspetto |
Duplicazione attiva RMAN |
Oracle Data Guard |
|---|---|---|
|
Disponibilità del database di origine |
Online durante l'intera duplicazione | Online durante l'intero processo |
|
Tempo di inattività |
Minuti (solo versione finale) | Da secondi a minuti (commutazione) |
|
Complessità |
Più basso | Più alto |
|
Durata della migrazione |
Operazione di duplicazione singola | Configurazione iniziale+sincronizzazione continua |
|
Sincronizzazione continua |
No | Sì |
|
Capacità di fallback |
Manuale (mantieni il codice sorgente in esecuzione) | Built-in (automatico) |
|
Test prima del taglio |
Limitato (test dopo la duplicazione) | Possibilità di test completi (è possibile testare la modalità standby) |
|
Larghezza di banda della rete |
Alta durante la duplicazione | Moderato (continuo) |
|
Impatto sul database di origine |
Minimo (operazioni di lettura) | Minimo (rifai la spedizione) |
|
Ideale per |
La maggior parte delle migrazioni è semplice | Mission-critical, sono richiesti tempi di inattività quasi nulli |
|
Non-CDB supporto |
Sì | Sì |
|
supporto multi-tenant |
Sì (intero CDB) | Sì (intero CDB) |
|
Post-migration Stato PDB |
CDB aperto, PDB MONTATI | CDB aperto, PDB MONTATI |
|
Richiede RMAN |
Sì | Sì (per il backup iniziale in un approccio basato sul backup) |
|
Richiede Data Guard |
No | Sì |
|
Livello di abilità richiesto |
Intermedia | Avanzata |
|
Processo di taglio |
Reindirizza le applicazioni a EC2 | Comando Switchover + applicazioni di reindirizzamento |
Confronto: rispetto alla migrazione multitenant Non-CDB
La tabella seguente riassume le principali differenze tra la migrazione di database non CDB e multitenant:
|
Aspetto |
Non-CDB migrazione |
Migrazione multitenant (CDB con PDB) |
|---|---|---|
|
Tipo di database |
Single-instance Non CDB (ad esempio,) ORCL |
CDB (fonte:RDSCDB, destinazione:ORCL) con CDB$ROOT + PDB$SEED + uno o più PDB |
|
Ambito di migrazione |
Database singolo | CDB completo (tutti i PDB inclusi automaticamente) |
|
Ambito di duplicazione RMAN |
Duplica un singolo database | Duplica l'intero CDB (tutti i contenitori) |
|
Scopo di Data Guard |
Protegge un singolo database | Protegge l'intero CDB (tutti i PDB inclusi automaticamente) |
|
File di parametri |
Parametri di inizializzazione standard | Deve includere = enable_pluggable_database TRUE |
|
Post-migration stato del database |
Il database si apre in modalità READ WRITE | CDB si apre in READ WRITE modalità; i PDB rimangono nello stato MOUNTED |
|
Apertura del PDB |
N/A | È necessario aprire manualmente tutti i PDB con ALTER PLUGGABLE DATABASE ALL OPEN |
|
Apertura automatica del PDB all'avvio |
N/A | È necessario configurare lo stato di salvataggio del PDB o il trigger di avvio |
|
Convalida |
Controlli su un singolo database | È necessario convalidare CDB e ogni PDB singolarmente |
|
RDS-specific pulire |
Eliminazione users/objects da un singolo database | Elimina gli utenti comuni da CDB$ROOT (passa a cascata ai PDB); gestisci gli utenti C## |
|
TNS/Listener configurazione |
Servizio unico per database | Servizio CDB + servizi PDB individuali registrati dinamicamente |
|
Stringhe di connessione all'applicazione |
Connect a un unico database | Connect a singoli servizi PDB (non CDB) |
|
Strategia di Backup |
Backup di un singolo database | Backup dell'intero CDB (include tutti i PDB) o di singoli PDB |
|
Gestione delle risorse |
Database-level gestione delle risorse | CDB-level e gestione PDB-level delle risorse con Resource Manager |
|
Complessità |
Minore complessità | Maggiore complessità grazie a più contenitori e percorsi OMF |
Best practice e raccomandazioni
Questa sezione fornisce best practice complete per una migrazione di successo da RDS Custom for Oracle a EC2.
Pre-migration pianificazione
-
Effettuare una valutazione approfondita:
Prima di iniziare la migrazione, esegui una valutazione completa del tuo ambiente:
-
Inventario dei database: documenta tutti i database, le loro dimensioni, le architetture (non CDB o multitenant) e le dipendenze
-
Dipendenze delle applicazioni: identifica tutte le applicazioni che si connettono al database e i relativi metodi di connessione
-
Linea di base delle prestazioni: acquisisci i parametri delle prestazioni (CPU I/O, memoria e rete) per confrontarli dopo la migrazione
-
Requisiti di backup e ripristino: Document RPO (Recovery Point Objective) e RTO (Recovery Time Objective)
-
Requisiti di conformità: Identifica eventuali requisiti normativi o di conformità che possono influire sulla migrazione
-
-
Scegli il tipo di istanza EC2 giusto:
Seleziona un tipo di istanza EC2 in base alle caratteristiche del tuo carico di lavoro:
Tipo di carico di lavoro
Famiglia di istanze consigliata
Caratteristiche principali
OLTP per uso generico M6i, M6a, M7i Elaborazione, memoria e rete bilanciate Memory-intensive R6i, R6a, R7i, X2idn Elevato rapporto memoria/CPU Compute-intensive C6i, C6a, C7i Alte prestazioni della CPU I/O-intensive I4i, Im4gn Archiviazione SSD NVMe locale elevata Carichi di lavoro misti M5, M5 A, 5 Mn Cost-effective prestazioni equilibrate Linee guida per il dimensionamento delle istanze:
-
Inizia con la stessa classe di istanza dell'istanza RDS Custom
-
Monitora l'utilizzo delle risorse durante una migrazione di test
-
Prendi in considerazione l'utilizzo di AWS Compute Optimizer per i consigli
-
Pianifica un margine di crescita del 20-30% per la crescita e i picchi di carico
-
-
Progetta la tua architettura di storage:
Tipi di volume EBS:
Tipo di volume
Caso d'uso
Prestazioni
Costo
gp3 Scopo generico, la maggior parte dei carichi di lavoro Fino a 16.000 IOPS, 1.000 MB/s Bassa io2 Block Express Mission-critical, ad alte prestazioni Fino a 256.000 IOPS, 4.000 MB/s Elevata Io 1 High-performance banche dati Fino a 64.000 IOPS, 1.000 MB/s Medium-High gp2 Legacy per uso generico Fino a 16.000 IOPS Bassa Raccomandazioni sul layout di archiviazione:
# Recommended layout for production databases /u01/app/oracle # Oracle software (50-100 GB, gp3) /u01/app/oracle/oradata # Data files (sized for database, gp3 or io2) /u01/app/oracle/arch # Archive logs (separate volume, gp3) /u01/app/oracle/backup # Backups (separate volume, gp3, can be detached post-migration)Vantaggi dei volumi separati:
-
Allocazione IOPS indipendente
-
Gestione della capacità più semplice
-
Strategie di backup e snapshot semplificate
-
Migliore isolamento delle prestazioni
-
-
Stabilisci un piano di rollback:
Adotta sempre una strategia di rollback:
-
Mantieni attiva l'istanza RDS Custom durante il periodo di convalida (si consigliano 1-2 settimane)
-
Mantieni backup regolari sia dell'origine che della destinazione
-
Procedure di rollback dei documenti, comprese le modifiche alla stringa di connessione
-
Prova il processo di rollback in un ambiente non di produzione
-
Definisci i criteri di rollback (peggioramento delle prestazioni, incoerenza dei dati, errori delle applicazioni)
-
Best practice per l'esecuzione della migrazione
-
Tempistica della migrazione:
Scegli la finestra temporale ottimale:
-
Low-traffic periodi: fine settimana, festivi o ore non di punta
-
Finestre di manutenzione: se possibile, allineatele alla manutenzione programmata
-
Evita la end/quarter fine del mese: questi periodi hanno in genere volumi di transazioni elevati
-
Prendi in considerazione i fusi orari: per le applicazioni globali, scegli un orario che riduca al minimo l'impatto tra le regioni
-
-
Piano di comunicazione:
Stabilisci una comunicazione chiara:
-
Notifica alle parti interessate: informa tutte le parti interessate con almeno 2 settimane di anticipo
-
Team applicativi: coordinatevi con i team delle applicazioni per gli aggiornamenti delle stringhe di connessione
-
Aggiornamenti di stato: fornite aggiornamenti regolari durante la migrazione
-
Percorso di escalation: definisci procedure di escalation chiare per i problemi
-
Post-migration comunicazione: confermare il completamento con successo e le eventuali azioni successive
-
-
Punti di controllo di convalida:
Implementare la convalida in ogni fase:
Pre-migration validation:
-- Capture object counts SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Capture tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Capture user counts SQL> SELECT COUNT(*) FROM dba_users; -- For multitenant, capture PDB information SQL> SELECT con_id, name, open_mode FROM v$pdbs;Post-migration validation:
-- Verify object counts match SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Verify no invalid objects SQL> SELECT owner, object_type, object_name FROM dba_objects WHERE status = 'INVALID'; -- Verify tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Verify database size matches SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files; -- For multitenant, verify all PDBs are open SQL> SELECT con_id, name, open_mode FROM v$pdbs; -
Validazione delle prestazioni:
Confronta le metriche delle prestazioni prima e dopo la migrazione:
-- Capture AWR snapshots before migration (on RDS Custom) SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; -- After migration (on EC2), compare metrics SQL> SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY; -- Generate AWR report for comparison SQL> @?/rdbms/admin/awrrpt.sqlMetriche chiave da confrontare:
-
Media delle sessioni attive
-
Tempo DB per transazione
-
Letture fisiche al secondo
-
Letture logiche al secondo
-
Ripeti le dimensioni al secondo
-
Chiamate utente al secondo
-
Tempo di analisi per esecuzione
-
Post-migration ottimizzazione
-
Dopo la migrazione, ottimizza le prestazioni del database:
-
Ottimizzazione delle prestazioni del database:
Raccogliere statistiche:
-- Gather dictionary statistics SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; -- Gather fixed object statistics SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; -- Gather schema statistics SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME', cascade=>TRUE); -- For multitenant, gather statistics for each PDB SQL> ALTER SESSION SET CONTAINER = PDB_NAME; SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(cascade=>TRUE);Ottimizza i parametri di memoria:
-- Enable Automatic Memory Management (if not already enabled) SQL> ALTER SYSTEM SET MEMORY_TARGET = 24G SCOPE=SPFILE; SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 28G SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; -- Or use Automatic Shared Memory Management SQL> ALTER SYSTEM SET SGA_TARGET = 16G SCOPE=SPFILE; SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 8G SCOPE=SPFILE;Configura la cache dei risultati:
-- Enable result cache for frequently accessed queries SQL> ALTER SYSTEM SET RESULT_CACHE_MAX_SIZE = 1G; SQL> ALTER SYSTEM SET RESULT_CACHE_MODE = MANUAL; -
Ottimizzazione dello spazio di archiviazione:
Abilita la compressione:
-- For tables with infrequent updates ALTER TABLE large_table MOVE COMPRESS FOR OLTP; -- For archive/historical data ALTER TABLE archive_table MOVE COMPRESS FOR ARCHIVE HIGH; -- Rebuild indexes after compression ALTER INDEX index_name REBUILD ONLINE;Implementa il partizionamento:
-- For large tables, consider partitioning -- Example: Range partitioning by date CREATE TABLE sales_partitioned ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) ( PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')), PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')), PARTITION sales_2026 VALUES LESS THAN (MAXVALUE) ); -
Implementare il monitoraggio e gli avvisi:
CloudWatch metriche personalizzate:
Crea uno script per pubblicare le metriche Oracle su: CloudWatch
#!/bin/bash # publish_oracle_metrics.sh INSTANCE_ID=$(ec2-metadata --instance-id | cut -d " " -f 2) REGION=$(ec2-metadata --availability-zone | cut -d " " -f 2 | sed 's/[a-z]$//') # Get tablespace usage TABLESPACE_USAGE=$(sqlplus -s / as sysdba << EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF SELECT ROUND(MAX(percent_used), 2) FROM ( SELECT tablespace_name, ROUND((used_space/tablespace_size)*100, 2) AS percent_used FROM dba_tablespace_usage_metrics ); EXIT; EOF ) # Publish to CloudWatch aws cloudwatch put-metric-data \ --region $REGION \ --namespace "Oracle/Database" \ --metric-name "TablespaceUsage" \ --value $TABLESPACE_USAGE \ --unit Percent \ --dimensions InstanceId=$INSTANCE_ID,Database=ORCL # Add more metrics as needed (sessions, wait events, etc.)Imposta gli CloudWatch allarmi:
# Create alarm for high tablespace usage aws cloudwatch put-metric-alarm \ --alarm-name oracle-high-tablespace-usage \ --alarm-description "Alert when tablespace usage exceeds 85%" \ --metric-name TablespaceUsage \ --namespace Oracle/Database \ --statistic Maximum \ --period 300 \ --evaluation-periods 2 \ --threshold 85 \ --comparison-operator GreaterThanThreshold \ --alarm-actions arn:aws:sns:region:account-id:topic-name -
Rafforzamento della sicurezza:
Sicurezza del database:
-- Enforce password complexity ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1; -- Enable audit ALTER SYSTEM SET AUDIT_TRAIL = DB, EXTENDED SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; -- Audit critical operations AUDIT ALL ON SYS.AUD$ BY ACCESS; AUDIT CREATE USER BY ACCESS; AUDIT DROP USER BY ACCESS; AUDIT ALTER USER BY ACCESS; AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;Sicurezza della rete:
# Restrict SSH access sudo vi /etc/ssh/sshd_config # Set: PermitRootLogin no # Set: PasswordAuthentication no # Configure firewall sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="1521" protocol="tcp" accept' sudo firewall-cmd --reload # Enable Oracle Native Network Encryption # Edit sqlnet.ora SQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA384, SHA512)
-
-
Strategia di backup e ripristino:
Implementazione di una strategia di backup completa:
#!/bin/bash # rman_backup.sh - Daily incremental backup script export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # Backup to local disk rman target / << EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/inc_%U'; BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; CROSSCHECK BACKUP; DELETE NOPROMPT EXPIRED BACKUP; } EXIT; EOF # Copy backups to S3 aws s3 sync /u01/app/oracle/backup/ s3://my-oracle-backups/$(date +%Y%m%d)/ \ --storage-class STANDARD_IA \ --exclude "*" \ --include "inc_*" \ --include "arch_*" # Clean up local backups older than 7 days find /u01/app/oracle/backup/ -name "inc_*" -mtime +7 -delete find /u01/app/oracle/backup/ -name "arch_*" -mtime +7 -deletePianifica i backup con cron:
# Edit crontab crontab -e # Add backup schedule # Full backup on Sunday at 2 AM 0 2 * * 0 /home/oracle/scripts/rman_full_backup.sh >> /home/oracle/logs/backup_full.log 2>&1 # Incremental backup Monday-Saturday at 2 AM 0 2 * * 1-6 /home/oracle/scripts/rman_incremental_backup.sh >> /home/oracle/logs/backup_inc.log 2>&1 # Archive log backup every 4 hours 0 */4 * * * /home/oracle/scripts/rman_archivelog_backup.sh >> /home/oracle/logs/backup_arch.log 2>&1
Ottimizzazione dei costi
1. Right-sizing:
Dopo la migrazione, monitora e ottimizza i costi:
-
Usa AWS Cost Explorer per analizzare i costi di EC2 ed EBS
-
Abilita AWS Compute Optimizer per esempio, consigli sui tipi di esempio
-
Rivedi le CloudWatch metriche per identificare le risorse sottoutilizzate
-
Prendi in considerazione Reserved Instances o Savings Plans per carichi di lavoro prevedibili
2. Ottimizzazione dello spazio di archiviazione:
-
Implementa le politiche del ciclo di vita per i backup S3 (passa a Glacier dopo 30 giorni)
-
Elimina regolarmente le istantanee EBS non utilizzate
-
Usa gp3 anziché gp2 per risparmiare sui costi a parità di prestazioni
-
Scollega ed elimina i volumi di backup al termine della migrazione
3. Automazione:
-
Automatizzazione dei database non start/stop di produzione durante le ore non lavorative
-
Usa AWS Systems Manager per la gestione delle patch
-
Implementa l'auto-scaling per le repliche di lettura se utilizzi Data Guard
Conclusioni
Questa guida prescrittiva ha fornito strategie di migrazione dettagliate per spostare i database Oracle da Amazon RDS Custom for Oracle ai database Oracle autogestiti su Amazon EC2. Con l'obsolescenza del servizio RDS Custom for Oracle a partire dal 31 marzo 2027, è importante pianificare ed eseguire la migrazione con largo anticipo.
Punti chiave
Opzioni di migrazione:
-
Duplicazione attiva RMAN: ideale per la maggior parte delle migrazioni, mantiene online il database di origine durante la duplicazione, richiede solo una breve finestra di dialogo per il reindirizzamento delle applicazioni
-
Oracle Data Guard: ideale per carichi di lavoro mission critical che richiedono tempi di inattività quasi nulli, grazie alla sincronizzazione continua e alla funzionalità di switchover integrata
Supporto dell'architettura:
-
Entrambe le opzioni di migrazione supportano architetture non CDB (tradizionale a istanza singola) e multitenant (CDB con PDB)
-
Per il multitenant, entrambi i metodi gestiscono automaticamente l'intero CDB, inclusi tutti i PDB, in un'unica operazione
-
I PDB richiedono l'apertura manuale e l'apertura automatica della configurazione dopo la migrazione
Fattori critici di successo:
-
Configurazione di rete e connettività corrette tra origine e destinazione
-
Compatibilità esatta tra le versioni (versione principale, versione secondaria, Release Update e patch una tantum)
-
Larghezza di banda di rete adeguata per il trasferimento dei dati (RMAN) o il redo shipping (Data Guard)
-
Tenendo conto del fatto che la duplicazione attiva di RMAN mantiene il codice sorgente online, è sufficiente una breve panoramica
-
Test e convalida approfonditi prima dello smantellamento della fonte
-
Attività complete successive alla migrazione, tra cui backup, monitoraggio e configurazione di sicurezza
Fasi successive:
-
Valuta l'architettura del tuo database (non CDB o multitenant)
-
Scegliete l'opzione di migrazione appropriata in base ai vostri requisiti di complessità e tolleranza ai tempi di inattività
-
Completa tutti i passaggi prerequisiti, tra cui la configurazione dell'istanza EC2 e la configurazione della rete
-
Segui i passaggi di migrazione dettagliati per l'opzione scelta
-
Esegui convalide e test approfonditi
-
Completa le attività successive alla migrazione per garantire la disponibilità della produzione
-
Disattiva l'istanza RDS Custom dopo la convalida riuscita
Altre risorse
Support
Per assistenza con la migrazione:
-
Contatta il AWS supporto tramite la console AWS di gestione
-
Rivolgiti all'assistenza Oracle per domande specifiche sul database
Informazioni sul documento
Ultimo aggiornamento: marzo 2026
Contributori:
-
Sharath Chandra Kampili, Architetto di soluzioni specializzato in database, Amazon Web Services
-
Ibrahim Emara, Architetto di soluzioni specializzato in database, Amazon Web Services
-
Vetrivel Subramani, Architetto di soluzioni specializzato in database, Amazon Web Services