Utilizzare Oracle Data Guard con l'interfaccia CLI del database

In questo articolo viene descritto come utilizzare l'interfaccia CLI del database per impostare Data Guard con Fast-Start Failover (FSFO) in Oracle Cloud Infrastructure. Gli argomenti di questo articolo spiegano come preparare i database primari e in standby, quindi configurare Data Guard per trasmettere i dati di redo dal database primario e applicarli al database in standby.

Oracle consiglia di utilizzare la console anziché l'interfaccia CLI del database per impostare e utilizzare Data Guard in Oracle Cloud Infrastructure.

Nota

Questo articolo presuppone che tu abbia familiarità con Data Guard e FSFO. Per ulteriori informazioni, consulta la sezione relativa all'uso di Oracle Data Guard su un sistema DB.

Prerequisiti

Per eseguire le procedure descritte in questo argomento, saranno necessarie le informazioni riportate di seguito per i database primari e in standby.

  • db_name (o oracle_sid)
  • db_unique_name
  • home directory oracle (o home database)

Ricerca delle informazioni sul database

Dopo aver avviato i sistemi DB primari e in standby e creato i database come descritto più avanti in questo argomento, è possibile utilizzare l'interfaccia CLI in tali sistemi per trovare le informazioni necessarie sul database.

  1. SSH al sistema DB.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Eseguire il login come opc, quindi come sudo per l'utente root. Usare sudo su - con un trattino per richiamare il profilo dell'utente root, che imposterà PATH sulla directory dbcli (/opt/oracle/dcs/bin).
    sudo su -
  3. Per trovare i comandi db_name (o oracle_sid) e db_uniqueName, eseguire il comando dbcli list-databases -j.
    dbcli list-databases -j
    Output:
    [ {
      "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff",
      "name" : "dbtst",
      "dbName" : "dbtst",
      "databaseUniqueName" : "dbtst_phx1cs",
      "dbVersion" : "12.1.0.2",
      "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287",
      "instanceOnly" : false,
       .
       .
       .  
  4. Per trovare la directory home oracle (o la home del database), eseguire il comando dbcli list-dbhomes. Se nel sistema DB sono presenti più home di database, utilizzare quella che corrisponde a "dbHomeId" nell'output del comando dbcli list-databases -j mostrato sopra.
    dbcli list-dbhomes
    Output:
    ID                                       Name                 DB Version                               Home Location                                 Status
    ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ----------
    2efe7af7-0b70-4e9b-ba8b-71f11c6fe287     OraDB12102_home1     12.1.0.2.160719 (23739960, 23144544)     /u01/app/oracle/product/12.1.0.2/dbhome_1     Configured
    33ae99fe-5413-4392-88da-997f3cd24c0f     OraDB11204_home1     11.2.0.4.160719 (23054319, 23054359)     /u01/app/oracle/product/11.2.0.4/dbhome_1     Configured

Crea un sistema DB primario

Se non si dispone già di un sistema DB primario, crearne uno come descritto nella sezione Panoramica sulla creazione di un sistema DB. Il sistema DB includerà un database iniziale. Puoi creare database aggiuntivi utilizzando i comandi del database disponibili nel sistema DB.

Creare un sistema DB in standby

Nota

Il database di standby deve avere lo stesso valore db_name del database primario, ma deve avere un valore db_unique_name diverso. Se si utilizza lo stesso nome di database per il database in standby e primario, sarà necessario eliminare il database dal sistema DB in standby utilizzando il comando dbcli delete-database prima di poter eseguire il comando dbcli create-database descritto di seguito. Il completamento dell'eliminazione e della creazione del database richiederà alcuni minuti. I comandi dbcli devono essere eseguiti come utente root.

  1. Creare un sistema DB in standby come descritto nella panoramica sulla creazione di un sistema DB e attendere il completamento del provisioning del sistema DB e la sua disponibilità.

    Puoi creare il sistema DB in standby in un dominio di disponibilità diverso da quello del sistema DB primario per finalità di disponibilità e disaster recovery (si consiglia vivamente di eseguire questa operazione). Puoi creare il sistema DB in standby nella rete cloud del sistema DB primario in modo che entrambi i sistemi si trovino in una singola rete instradabile.

  2. SSH al sistema DB.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  3. Eseguire il login come opc, quindi come sudo per l'utente root. Usare sudo su - con un trattino per richiamare il profilo dell'utente root, che imposterà PATH sulla directory dbcli (/opt/oracle/dcs/bin).
    sudo su -
  4. Il sistema DB includerà un database iniziale, ma sarà necessario creare un database di standby utilizzando il comando dbcli create-database con il parametro --instanceonly. Questo parametro crea solo la struttura di memorizzazione del database e avvia il database in modalità nomount (non vengono creati altri file di database).

    Quando si utilizza --instanceonly, sono necessari sia i parametri --dbname che --adminpassword e devono corrispondere al nome del database e alla password di amministrazione del database primario per evitare confusione.

    Il comando di esempio riportato di seguito richiede la password di amministrazione, quindi crea una struttura di memorizzazione per un database denominato dbname.

    dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword

    Se si utilizzano i pluggable database, specificare anche il parametro --cdb.

    Per la sintassi completa dei comandi, vedere Comandi del database.

  5. Attendere alcuni minuti affinché il comando dbcli create-database crei il database di standby.

    È possibile utilizzare il comando dbcli list-jobs per verificare che il job di creazione sia stato eseguito correttamente, quindi il comando dbcli list-databases verifica che il database sia configurato.

Preparare il sistema DB primario

Per preparare il sistema DB primario, dovrai configurare listener statici, aggiornare tnsnames.ora e configurare alcune impostazioni e parametri del database.

Configurazione dei listener statici

Creare listener statici da utilizzare dal broker RMAN e Data Guard.

  1. SSH al sistema DB primario, eseguire il login come utente opc o root e sudo all'utente del sistema operativo Grid.
    sudo su - grid
  2. Modificare /u01/app/<version>/grid/network/admin/listener.ora e aggiungere il contenuto seguente. Il primo listener statico mostrato qui è facoltativo. Il secondo listener statico DGMGRL è facoltativo per i database della versione 12.1 o successive, ma è necessario per i database della versione 11.2.
    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
        (SID_DESC=
        (SDU=65535)
    	(GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
      )
  3. Salvare le modifiche e riavviare il listener.
    srvctl stop listener
    srvctl start listener

Aggiunta di nomi di servizi di rete a tnsnames.ora

In qualità di utente oracle, modificare $ORACLE_HOME/network/admin/tnsnames.ora e aggiungere il nome del servizio di rete del database di standby.

<standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)		
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
    )
  )

L'esempio precedente presuppone che la risoluzione del nome funzioni e che <standby_server>.<domain> sia risolvibile nel database primario. Puoi anche utilizzare l'indirizzo IP privato del server in standby se gli indirizzi IP vengono instradati all'interno di una singola rete cloud (VCN).

Configurazione dei parametri del database primario

Suggerimento

Se gli host primario e in standby hanno strutture di directory diverse, potrebbe essere necessario impostare parametri aggiuntivi non discussi qui, ad esempio il parametro log_file_name_convert. Per ulteriori informazioni sulla creazione di standby per host con strutture di directory diverse, consultare la documentazione di RMAN.

  1. In qualità di utente oracle, abilitare la gestione automatica dei file in standby.
    alter system set standby_file_management=AUTO;
  2. Identificare i nomi e le posizioni dei file di configurazione del broker. I comandi utilizzati dipendono dal tipo di memorizzazione del database. Se non si è certi del tipo di storage del database, utilizzare i comandi del database nel sistema DB.

    Per lo storage del database ACFS, utilizzare i comandi riportati di seguito per impostare i file di configurazione del broker.

    alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat';
    alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat'; 

    Per la memorizzazione del database ASM, utilizzare i comandi riportati di seguito per impostare i file di configurazione del broker.

    alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat';
    alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
  3. Abilita il processo DMON Broker per il database.
    alter system set dg_broker_start=true;
  4. Forza log del database per tutte le transazioni del database.
    alter database force logging ;
  5. Aggiungere redo log in standby (SRL), in base ai redo log in linea (ORL). Su un sistema DB appena lanciato, ci saranno tre ORL di dimensione 1073741824, quindi creare quattro SRL della stessa dimensione.

    È possibile utilizzare la query riportata di seguito per determinare il numero e la dimensione (in byte) degli ORL.

    select group#, bytes from v$log;
    Output:
        GROUP# BYTES
    ---------- ----------
             1 1073741824
             2 1073741824
             3 1073741824

    Tutti gli ORL devono avere le stesse dimensioni.

    Le SRL devono avere le stesse dimensioni delle ORL, ma devono essere presenti almeno una SRL in più rispetto alle ORL. Nell'esempio precedente, ci sono tre ORL, quindi sono necessari quattro SRL. Specificare quindi i redo log correnti più uno e utilizzare le stesse dimensioni dei redo log.

    alter database add standby logfile thread 1 size <size>;

    Nel gruppo SRL deve esistere un solo membro (per impostazione predefinita, viene creato un sistema DB con un solo membro per gruppo SRL). A tale scopo, è possibile assegnare un nome al file con la seguente sintassi.

    alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...

    Per le configurazioni ASM/OMF, il comando precedente utilizza il gruppo di dischi anziché <logfile name with full path>.

    alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...

    Suggerimento

    Le ORL e le SRL devono essere dimensionate in modo che gli switch di log non si verifichino più frequentemente di ogni 10 minuti. Ciò richiede la conoscenza dell'applicazione e potrebbe essere necessario modificarla dopo la distribuzione. Per ulteriori informazioni, vedere Usa redo log in standby e configura le dimensioni in modo appropriato.

  6. Verificare di aver creato il numero corretto di SRL.
    select group#, bytes from v$standby_log;
  7. Assicurarsi che il database sia in modalità ARCHIVELOG.
    archive log list
  8. Abilitare il database FLASHBACK. Il valore minimo consigliato per db_flashback_retention_target è 120 minuti.
    alter database flashback on ;
    alter system set db_flashback_retention_target=120;  
  9. Eseguire un redo log switch singolo per attivare l'archiviazione se il database è stato appena creato. Prima di eseguire il duplicato RMAN, è necessario archiviare almeno un log.
    alter system switch logfile;

Prepara il database in standby

Prima di preparare il database di standby, assicurarsi che la home del database in standby abbia la stessa versione del database primario. Se i database primario e in standby vengono entrambi appena creati con la stessa versione del database, le home del database saranno le stesse. In caso contrario, creare una home del database con la stessa versione. È possibile utilizzare i comandi Dbhome per verificare le versioni e creare una nuova home del database in base alle esigenze.

Per preparare il sistema DB in standby, dovrai configurare i listener statici, aggiornare tnsnames.ora, configurare il wallet TDE, creare un password file temporaneo, verificare la connettività, eseguire RMAN DUPLICATE, abilitare FLASHBACK e quindi creare il servizio di database.

Configurazione dei listener statici

Creare listener statici da utilizzare dal broker RMAN e Data Guard.

  1. SSH al sistema DB di standby, eseguire il login come utente opc o root e sudo all'utente del sistema operativo Grid.
    sudo su - grid
  2. Aggiungere il seguente contenuto a /u01/app/<db_version>/grid/network/admin/listener.ora.

    Il primo listener statico mostrato di seguito è obbligatorio per RMAN DUPLICATE. Il secondo listener statico DGMGRL è facoltativo per le versioni di database 12.2.0.1 e 12.1.0.2, ma è necessario per la versione di database 11.2.0.4.

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>)
        (SID_NAME = <standby oracle_sid>)
        (ORACLE_HOME=<oracle home directory>)
        (ENVS="TNS_ADMIN=<oracle home directory>/network/admin")
        )
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>)
        (SID_NAME = <standby oracle_sid>)
        (ORACLE_HOME=<oracle home directory>) 
        (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") 
        )
      )
  3. Avviare il listener.
    srvctl stop listener
    srvctl start listener
  4. Verificare che i listener statici siano disponibili. L'output di esempio riportato di seguito è relativo alla versione del database 12.1.0.2. Si noti che a questo punto sono previsti i messaggi ...status UNKNOWN.
    lsnrctl status
    Output:
    LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25
    
    Copyright (c) 1991, 2014, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
    Start Date                29-SEP-2016 21:09:19
    Uptime                    0 days 0 hr. 0 min. 5 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/12.1.0.2/grid/network/admin/listener.ora
    Listener Log File         /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521)))
    Services Summary...
    Service "dg2_phx2hx.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully

Aggiunta di nomi di servizi di rete a tnsnames.ora

In qualità di utente oracle, aggiungere il nome del servizio di rete del database di standby a $ORACLE_HOME/network/admin/tnsnames.ora. $ORACLE_HOME è la home del database in cui è in esecuzione il database di standby.

<Primary db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
    )
  )
 
<Standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<db_domain>)
    )
  )

Copia dei wallet TDE nel sistema in standby

Copiare i file wallet TDE dal sistema DB primario al sistema DB in standby utilizzando SCP. Il seguente comando di esempio presuppone che il comando SCP venga eseguito dall'utente del sistema operativo oracle e che la chiave privata per oracle sia stata creata ed esista nell'host in cui viene eseguito SCP.
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>

Impostazione della configurazione del sistema in standby

In qualità di utente oracle, creare la directory seguente per la versione del database 11.2.0.4. Questo passo è facoltativo per la versione 12.2.0.1 e la versione 12.1.0.2.

mkdir  -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile

Creazione della destinazione dei file di audit

In qualità di utente oracle, creare la directory seguente da utilizzare come destinazione del file di audit.

mkdir -p /u01/app/oracle/admin/<db_name>/adump

In caso contrario, il comando duplicato RMAN utilizzato in seguito non riuscirà.

Creazione di un password file temporaneo

Creare un password file temporaneo come utente oracle.

orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid>    password=<admin password for primary> entries=5

La password deve essere uguale alla password amministratore del database primario. In caso contrario, il passo duplicato RMAN riportato di seguito non riuscirà con: RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.

Verifica della disponibilità del database in standby

  1. In qualità di utente oracle, impostare le variabili di ambiente.
    . oraenv
  2. Sostituire $ORACLE_HOME/dbs/init<standby sid_name>.ora con il seguente contenuto:
    db_name=<Primary db_name>
    db_unique_name=<standby db_unique_name>
    db_domain=<standby db_domain>
  3. Rimuovere lo spfile dal database in standby.
    /u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora 

    Il database deve essere avviato in modalità nomount senza spfile specificato, ma il file di inizializzazione originale contiene un parametro spfile che impedirà il funzionamento del passo duplicato RMAN.

  4. Impostare la variabile di ambiente ORACLE_UNQNAME in modo che punti a DB_UNIQUE_NAME.
    export ORACLE_UNQNAME =db_unique_name

    Nota

    Se non si esegue questo passo, il wallet non verrà aperto e l'esecuzione del comando RMAN DUPLICATE nel passo successivo non riuscirà.
  5. Il comando dbcli create-database --instanceonly utilizzato in precedenza apre il database di standby come database primario in modalità di lettura/scrittura, pertanto è necessario disattivare il database prima di passare al passo nomount riportato di seguito.
    sqlplus / as sysdba
    
    shutdown immediate
  6. Avvia il database in modalità NOMount.
    startup nomount

Verifica delle connessioni al database

Verificare la connessione tra i database primario e in standby.

  1. Assicurarsi che la porta 1521 del listener sia aperta nelle liste di sicurezza utilizzate per i sistemi DB primari e in standby. Per ulteriori informazioni, vedere Aggiornare la lista di sicurezza per il sistema DB.
  2. Dal database primario, connettersi al database in standby.
    sqlplus sys/<password>@<standby net service name> as sysdba
  3. Dal database in standby, connettersi al database primario.
    sqlplus sys/<password>@<primary net service name> as sysdba

Esecuzione del comando RMAN DUPLICATE

Eseguire il comando RMAN DUPLICATE sul sistema DB in standby, come utente oracle.

Se il database primario è di grandi dimensioni, è possibile allocare canali aggiuntivi per migliorare le prestazioni. Per un database appena installato, un canale in genere esegue la duplicazione del database in un paio di minuti.

Assicurarsi che non vi siano errori generati dal comando RMAN DUPLICATE. Se si verificano errori, riavviare il database utilizzando il file init.ora (non spfile) nel caso in cui venga generato in $ORACLE_HOME/dbs come parte di RMAN DUPLICATE.

Negli esempi riportati di seguito, utilizzare le lettere minuscole per <Standby db_unique_name> se non diversamente specificato.

Per il layout di memorizzazione di ACFS, eseguire i comandi seguenti.

rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
                  
run { allocate channel prim1 type disk;
    allocate auxiliary channel sby type disk;
    duplicate target database for standby from active database
    dorecover
    spfile
    parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
    set db_unique_name='<Standby db_unique_name>'
    set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
    set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
    set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
    set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
    set instance_name='<Standby db_unique_name>'
    ;
}

Per il layout di memorizzazione ASM, eseguire i comandi riportati di seguito.

rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
  
run { 
    allocate channel prim1 type disk;
    allocate auxiliary channel sby type disk;
    duplicate target database for standby from active database
    dorecover
    spfile
    parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
    set db_unique_name='<Standby db_unique_name>'           
    set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
    set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
    set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
    set instance_name='<Standby db_unique_name>'  
    ;
}

Abilitazione del database FLASHBACK

  1. Come best practice di Data Guard, abilita il flashback e imposta db_flashback_retention_target su almeno 120 minuti sia nel database primario che in quello in standby.
    alter database flashback on;
    alter system set db_flashback_retention_target=120;
  2. Verificare che il database di standby sia stato creato correttamente.
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

Creazione di un servizio di database

Oracle consiglia di creare un servizio di database per il database di standby utilizzando srvctl.

Per il layout di memorizzazione di ACFS.

  1. Creare una directory condivisa e copiarvi il file spfile.
    mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
    cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
  2. Arrestare e rimuovere il servizio di database esistente.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. Creare il servizio di database.
    srvctl add database 
        -d <standby db_unique_name> 
        -n <standby db_name> 
        -o $ORACLE_HOME 
        -c SINGLE 
        -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
        -x <standby hostname> 
        -s "READ ONLY" 
        -r PHYSICAL_STANDBY 
        -i <db_name>
    
    srvctl setenv database 
        -d <standby db_unique_name> 
        -t "ORACLE_UNQNAME=<standby db_unique_name>"
    
    srvctl config database 
        -d <standby db_unique_name>
  4. Avviare il servizio di database.
    srvctl start database 
        -d <standby db_unique_name>
  5. Eseguire il cleanup dei file da $ORACLE_HOME/dbs.
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
  6. Creare il file $ORACLE_HOME/dbs/init<standby oracle_sid>.ora per fare riferimento alla nuova posizione del file spfile.
    SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
  7. Arrestare il database di standby, quindi avviarlo utilizzando srvctl.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl start database 
        -d <standby db_unique_name>

Per il layout di memorizzazione ASM.

  1. Valutare la possibilità di generare il file spfile in +DATA.
    create pfile='init<standby oracle_sid>.ora' from spfile ;
    create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. Arrestare e rimuovere il servizio di database esistente.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. Creare il servizio di database.
    srvctl add database 
        -d <standby db_unique_name> 
        -n <standby db_name> 
        -o $ORACLE_HOME 
        -c SINGLE  
        -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
        -x <standby hostname> 
        -s "READ ONLY" 
        -r PHYSICAL_STANDBY 
        -i <db_name>
    
    srvctl setenv database 
        -d <standby db_unique_name> 
        -t "ORACLE_UNQNAME=<standby db_unique_name>"
    
    srvctl config database 
        -d <standby db_unique_name>
  4. Avviare il servizio di database.
    srvctl start database 
        -d <standby db_unique_name>
  5. Eseguire il cleanup dei file da $ORACLE_HOME/dbs.
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
  6. Creare il file $ORACLE_HOME/dbs/init<standby oracle_sid>.ora per fare riferimento alla nuova posizione del file spfile.
    SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
  7. Arrestare il database e avviare il database in standby utilizzando srvctl.
    srvctl start database -d <standby db_unique_name>

Configura Data Guard

Eseguire i passi riportati di seguito per completare la configurazione di Data Guard e abilitare il trasporto di redo dal database primario e applicare il redo nel database in standby.

  1. Eseguire la utility della riga di comando dgmgrl dal sistema DB primario o in standby e connettersi al database primario utilizzando le credenziali sys.
    connect sys/<sys password>@<primary tns alias>
  2. Creare la configurazione Data Guard e identificare per i database primari e in standby nella utility della riga di comando dgmgrl.
    create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>;
    add database  <standby db_unique_name> as connect identifier is <standby tns alias>  maintained as physical;
  3. Abilitare la configurazione Data Guard della utility della riga di comando dgmgrl.
    enable configuration;
  4. Verificare che l'impostazione di Data Guard sia stata eseguita correttamente. Eseguire l'istruzione SQL seguente in entrambi i database primario e in standby nel prompt SQL.
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. Verificare che i processi Data Guard vengano avviati nel database in standby.
    select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. Verificare la configurazione dei parametri sul database primario e in standby.
    show parameter log_archive_dest_
    show parameter log_archive_config
    show parameter fal_server
    show parameter log_archive_format
  7. Verificare che la configurazione Data Guard funzioni nella utility della riga di comando dgmgrl. In particolare, assicurarsi che l'applicazione di redo shipping e redo funzioni e che il database in standby non sia eccessivamente in ritardo rispetto al database primario.
    show configuration verbose
    show database verbose <standby db_unique_name>
    show database verbose <primary db_unique_name>

    Eventuali discrepanze, errori o avvertenze devono essere risolti. È inoltre possibile eseguire una transazione sul database primario e verificare che sia visibile nel database in standby.

  8. Verificare che la configurazione Data Guard funzioni come previsto eseguendo lo switchover e il failover in entrambe le direzioni. Eseguire show configuration dopo ogni operazione e assicurarsi che non vi siano errori o avvertenze nella utility della riga di comando dgmgrl.

    Attenzione

    Questo passaggio è facoltativo, in base alla propria discrezione. Se per qualsiasi motivo la configurazione non è valida, lo switchover e/o il failover non riusciranno e potrebbe essere difficile o impossibile avviare il database primario. Potrebbe essere necessario un recupero del database primario, che influirà sulla disponibilità.

    switchover to <standby db_unique_name>
    switchover to <primary db_unique_name>
    #connect to standby before failover:
    
    connect sys/<sys password>@<standby db_unique_name>
    failover to <standby db_unique_name>
    reinstate database <primary db_unique_name>
    #connect to primary before failover:
    
    connect sys/<sys password>@<primary db_unique_name>
    failover to <primary db_unique_name>
    reinstate database <standby db_unique_name>

Configurare Observer (Opzionale)

La best practice per l'alta disponibilità e durabilità consiste nell'eseguire il database primario, il database in standby e l'osservatore in domini di disponibilità separati. L'observer determina se eseguire o meno il failover su un database di standby di destinazione specifico. Il server utilizzato per l'observer richiede il software Oracle Client Administrator, che include Oracle SQL NET e Broker. Eseguire i comandi seguenti nella utility della riga di comando dgmgrl.

  1. Configurare i nomi di alias TNS per entrambi i database primari e in standby come descritto in precedenza e verificare la connessione a entrambi i database.
  2. Modificare la modalità di protezione impostandola su maxavailability o maxperformance (maxprotection non è supportata per FSFO).

    Per abilitare la disponibilità massima:

    edit database <standby db_unique_name> set property 'logXptMode'='SYNC';
    edit database <primary db_unique_name> set property 'logXptMode'='SYNC';
    edit configuration set protection mode as maxavailability;

    Per abilitare le prestazioni massime:

    edit configuration set protection mode as maxperformance;
    edit database <standby db_unique_name> set property 'logXptMode'='ASYNC';
    edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';

    Per maxperformance, la proprietà FastStartFailoverLaglimit limita la quantità massima di perdita di dati consentita a 30 secondi per impostazione predefinita.

  3. Dovrebbero essere considerate anche le seguenti proprietà. Eseguire show configuration verbose per visualizzare i valori correnti.
    • FastStartFailoverPmyShutdown
    • FastStartFailoverThreshold
    • FastStartFailoverTarget
    • FastStartFailoverAutoReinstate

    L'esecuzione di show configuration comporterà il seguente errore fino all'avvio dell'observer: Warning : ORA-16819: fast-start failover observer not started.

  4. Abilita fast-start failover da Broker:
    Enable fast_start failover
  5. Verificare il Fast-Start Failover e le impostazioni associate.
    show fast_start failover
  6. Avviare l'osservatore dal broker (verrà eseguito in primo piano, ma può anche essere eseguito in background).
    start observer
  7. Verificare che Fast-Start Failover sia abilitato e senza errori o avvertenze.
    show configuration verbose
  8. Testare sempre il failover in entrambe le direzioni per assicurarsi che tutto funzioni come previsto. Verificare che FSFO sia in esecuzione correttamente eseguendo un'interruzione della chiusura del database primario.

    L'observer deve avviare il failover nel database in standby. Se la modalità di protezione è impostata su maxprotection, può verificarsi una perdita di dati, in base al valore FastStartFailoverLaglimit.