Uso de Oracle Data Guard con la CLI de la base de datos

En este artículo se explica cómo utilizar la CLI de la base de datos para configurar Data Guard con failover de inicio rápido (FSFO) en Oracle Cloud Infrastructure. En los temas de este artículo se explica cómo preparar las bases de datos principal y en espera y, a continuación, configurar Data Guard para transmitir los datos de redo de la base de datos principal y aplicarlos a la base de datos en espera.

Oracle recomienda utilizar la consola en lugar de la CLI de la base de datos para configurar y trabajar con Data Guard en Oracle Cloud Infrastructure.

Note:

En este artículo se asume que está familiarizado con Data Guard y FSFO. Para obtener más información sobre ellos, consulte Uso de Oracle Data Guard en un sistema de base de datos.

Requisitos

Para realizar los procedimientos de este tema, necesita la siguiente información de las bases de datos principal y en espera.

  • db_name (u oracle_sid)
  • db_unique_name
  • directorio raíz de Oracle (o directorio raíz de base de datos)

Búsqueda de la información de base de datos

Una vez iniciados los sistemas de base de datos principal y en espera y creadas las bases de datos, como se describe más adelante en este tema, puede utilizar la CLI en esos sistemas para buscar la información de base de datos necesaria.

  1. SSH en el sistema de base de datos.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Conéctese como opc y, a continuación, utilice sudo para el usuario root. Utilice sudo su - con un guion para llamar al perfil del usuario raíz, que definirá PATH en el directorio dbcli (/opt/oracle/dcs/bin).
    sudo su -
  3. Para buscar el db_name (o el oracle_sid) y el db_uniqueName, ejecute el comando dbcli list-databases -j.
    dbcli list-databases -j
    Salida:
    [ {
      "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. Para buscar el directorio raíz de Oracle (o el directorio raíz de base de datos), ejecute el comando dbcli list-dbhomes. Si hay varios directorios raíz de base de datos en el sistema de base de datos, utilice el que coincida con "dbHomeId" en la salida del comando dbcli list-databases -j que se muestra anteriormente.
    dbcli list-dbhomes
    Salida:
    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

Creación de un sistema de base de datos principal

Si aún no tiene un sistema de base de datos principal, cree uno como se describe en Visión general de la creación de un sistema de base de datos. El sistema de base de datos incluirá una base de datos inicial. Puede crear bases de datos adicionales mediante Comandos de base de datos disponibles en el sistema de base de datos.

Creación de un sistema de base de datos en espera

Note:

La base de datos en espera debe tener el mismo db_name que la base de datos principal, pero debe tener un db_unique_name diferente. Si utiliza el mismo nombre de base de datos para la base de datos principal y la base de datos en espera, tendrá que suprimir la base de datos del sistema de base de datos en espera mediante el comando dbcli delete-database antes de ejecutar el comando dbcli create-database que se describe a continuación. La supresión y la creación de la base de datos tardarán varios minutos en completarse. Los comandos de dbcli se deben ejecutar como usuario root.

  1. Crear un sistema de base de datos en espera como se describe en Visión general de la creación de un sistema de base de datos y esperar a que el sistema de base de datos termine de aprovisionarse y esté disponible.

    Puede crear el sistema de base de datos en espera en un dominio de disponibilidad diferente del sistema de base de datos principal para fines de disponibilidad y recuperación ante desastres (se recomienda encarecidamente). Puede crear el sistema de base de datos en espera en la red en la nube del sistema de base de datos principal para que ambos sistemas se encuentren en una única red enrutable.

  2. SSH en el sistema de base de datos.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  3. Conéctese como opc y, a continuación, utilice sudo para el usuario root. Utilice sudo su - con un guion para llamar al perfil del usuario raíz, que definirá PATH en el directorio dbcli (/opt/oracle/dcs/bin).
    sudo su -
  4. El sistema de base de datos incluirá una base de datos inicial, pero tendrá que crear una base de datos en espera utilizando el comando dbcli create-database con el parámetro --instanceonly. Este solo parámetro crea la estructura de almacenamiento de base de datos e inicia la base de datos en modo no montada (no se crean otros archivos de base de datos).

    Al utilizar --instanceonly, son necesarios los parámetros --dbname y --adminpassword, que deben coincidir con el nombre de base de datos y la contraseña de administrador de la base de datos principal para evitar confusiones.

    En el siguiente comando de ejemplo se solicita la contraseña de administrador y, a continuación, se crea una estructura de almacenamiento para una base de datos denominada dbname.

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

    Si utiliza bases de datos conectables, especifique también el parámetro --cdb.

    Para obtener la sintaxis completa del comando, consulte Comandos de base de datos.

  5. Ejecute el comando dbcli create-database durante unos minutos para crear la base de datos en espera.

    Puede utilizar el comando dbcli list-jobs para verificar que el trabajo de creación se ha ejecutado correctamente y, a continuación, el comando dbcli list-databases verifica que la base de datos está configurada.

Preparación del sistema de base de datos principal

Para preparar el sistema de base de datos principal, necesitará configurar listeners estáticos, actualizar tnsnames.ora y configurar algunos parámetros y valores de la base de datos.

Configuración de listeners estáticos

Cree listeners estáticos que se utilizarán en RMAN y Data Guard Broker.

  1. Utilice SSH para acceder al sistema de base de datos principal, conéctese como el usuario opc o root y utilice sudo para el usuario grid del sistema operativo.
    sudo su - grid
  2. Edite /u01/app/<version>/grid/network/admin/listener.ora y agregue el siguiente contenido. El primer listener estático que se muestra aquí es opcional. El segundo listener estático DGMGRL es opcional para bases de datos de la versión 12.1 o posterior, pero es necesario para las bases de datos de la versión 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. Guarde los cambios y, a continuación, reinicie el listener.
    srvctl stop listener
    srvctl start listener

Agregar nombres de servicio de red a tnsnames.ora

Como usuario oracle, edite $ORACLE_HOME/network/admin/tnsnames.ora y agréguele el nombre de servicio de red de la base de datos en espera.

<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>)
    )
  )

En el ejemplo anterior se asume que la resolución de nombres funciona y que <standby_server>.<domain> se puede resolver en la base de datos principal. También puede utilizar la dirección IP privada del servidor en espera si las direcciones IP son enrutables dentro de una única red en la nube (VCN).

Configuración de parámetros de la base de datos principal

Sugerencia:

Si los hosts principal y en espera tienen estructuras de directorio diferentes, puede que tenga que definir parámetros adicionales que no se analizan aquí, como el parámetro log_file_name_convert. Consulte la documentación de RMAN para obtener más información sobre cómo crear bases de datos en espera para hosts con diferentes estructuras de directorio.

  1. Como usuario oracle, active la gestión automática de archivos en espera.
    alter system set standby_file_management=AUTO;
  2. Identifique las ubicaciones y los nombres de archivo de configuración de Broker. Los comandos que se utilizan para ello dependen del tipo de almacenamiento de base de datos. Si no está seguro del tipo de almacenamiento de base de datos, utilice los Comandos de base de datos en el sistema de base de datos.

    Para el almacenamiento en la base de datos de ACFS, utilice los siguientes comandos para definir los archivos de configuración de 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'; 

    Para el almacenamiento en la base de datos de ASM, utilice los siguientes comandos para definir los archivos de configuración de 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. Active el proceso DMON de Broker para la base de datos.
    alter system set dg_broker_start=true;
  4. Fuerce el registro de base de datos para todas las transacciones de base de datos.
    alter database force logging ;
  5. Agregue redo logs en espera (SRL) basados en los redo logs en línea (ORL). En un sistema de base de datos recién iniciado, habrá tres ORL con el tamaño 1073741824, por lo que debe crear cuatro SRL del mismo tamaño.

    Puede utilizar la consulta siguiente para determinar el número y el tamaño (en bytes) de los ORL.

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

    Todos los ORL deben tener el mismo tamaño.

    Los SRL deben tener el mismo tamaño que los ORL, pero debe haber al menos un SRL mayor que los ORL. En el ejemplo anterior, hay tres ORL, por lo que se necesitan cuatro SRL. Por lo tanto, debe especificar los redo logs actuales más uno y utilizar el mismo tamaño que los redo logs.

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

    Solo debe haber un miembro en el grupo de SRL (por defecto, un sistema de base de datos se crea con un solo miembro por grupo de SRL). Para asegurarse de esto, puede asignar un nombre al archivo con la siguiente sintaxis.

    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 ...

    Para las configuraciones de ASM/OMF, el comando anterior utiliza el grupo de discos en lugar de <logfile name with full path>.

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

    Sugerencia:

    Se debe ajustar el tamaño de los ORL y los SRL de modo que los cambios de log no se produzcan con una frecuencia mayor que cada 10 minutos. Para ello, es necesario conocer la aplicación y puede que sea necesario ajustarla tras el despliegue. Para obtener más información, consulte Use Standby Redo Logs and Configure Size Appropriately.

  6. Verifique que ha creado el número correcto de SRL.
    select group#, bytes from v$standby_log;
  7. Asegúrese de que la base de datos está en modo ARCHIVELOG.
    archive log list
  8. Active el FLASHBACK de la base de datos. El valor mínimo recomendado para db_flashback_retention_target es de 120 minutos.
    alter database flashback on ;
    alter system set db_flashback_retention_target=120;  
  9. Realice un solo cambio de redo log para activar el archivado si la base de datos se ha creado recientemente. (Se debe archivar al menos un log antes de ejecutar el duplicado de RMAN).
    alter system switch logfile;

Preparación de la base de datos en espera

Antes de preparar la base de datos en espera, asegúrese de que el directorio raíz de base de datos de la base de datos en espera sea de la misma versión que el de la base de datos principal. (Si tanto la base de datos principal como la base de datos en espera se han creado con la misma versión de base de datos, los directorios raíz de base de datos serán los mismos). En caso contrario, cree un directorio raíz de base de datos que sea de la misma versión. Puede utilizar los comandos de dbhome para verificar las versiones y crear un nuevo directorio raíz de base de datos según sea necesario.

Para preparar el sistema de base de datos en espera, deberá configurar listeners estáticos, actualizar tnsnames.ora, configurar la cartera de TDE, crear un archivo de contraseñas temporal, verificar la conectividad, ejecutar RMAN DUPLICATE, activar FLASHBACK y, a continuación, crear el servicio de base de datos.

Configuración de listeners estáticos

Cree listeners estáticos que se utilizarán en RMAN y Data Guard Broker.

  1. Utilice SSH para acceder al sistema de base de datos en espera, conéctese como el usuario opc o root y utilice sudo para el usuario grid del sistema operativo.
    sudo su - grid
  2. Agregue el siguiente contenido a /u01/app/<db_version>/grid/network/admin/listener.ora.

    Se necesita el primer listener estático que se muestra a continuación para RMAN DUPLICATE. El segundo listener estático DGMGRL es opcional para las versiones de base de datos 12.2.0.1 y 12.1.0.2, pero es necesario para la versión de base de datos 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. Reinicie el listener.
    srvctl stop listener
    srvctl start listener
  4. Verifique que los listeners estáticos están disponibles. La siguiente salida de ejemplo es para la versión de base de datos 12.1.0.2. Tenga en cuenta que cabe esperar mensajes ...status UNKNOWN en este punto.
    lsnrctl status
    Salida:
    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

Agregar nombres de servicio de red a tnsnames.ora

Como usuario oracle, agregue el nombre del servicio de red de la base de datos en espera a $ORACLE_HOME/network/admin/tnsnames.ora. $ORACLE_HOME es el directorio raíz de base de datos en el que se está ejecutando la base de datos en espera.

<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 de carteras de TDE en el sistema en espera

Copie los archivos de cartera de TDE del sistema de base de datos principal al sistema de base de datos en espera utilizando SCP. El siguiente comando de ejemplo asume que el usuario oracle del sistema operativo está ejecutando el comando SCP, que se ha creado la clave privada de oracle y que esta se encuentra en el host donde se está ejecutando 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>

Definición de la configuración del sistema de base de datos en espera

Como usuario oracle, cree el siguiente directorio para la versión de base de datos 11.2.0.4. Este paso es opcional para la versión 12.2.0.1 y la versión 12.1.0.2.

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

Creación del destino de archivo de auditoría

Como usuario oracle, cree el siguiente directorio para utilizarlo como destino del archivo de auditoría.

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

De lo contrario, el comando de duplicado de RMAN que se utiliza posteriormente fallará.

Creación de un archivo de contraseña temporal

Como usuario oracle, cree un archivo de contraseña temporal.

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

La contraseña debe ser la misma que la contraseña de administrador de la base de datos principal. De lo contrario, el paso de duplicado de RMAN siguiente fallará con el error: RMAN-05614: Las contraseñas de las conexiones de destino y auxiliar deben ser iguales cuando se está usando un duplicado activo.

Verificación de que la base de datos en espera está disponible

  1. Como usuario oracle, defina las variables de entorno.
    . oraenv
  2. Reemplace $ORACLE_HOME/dbs/init<standby sid_name>.ora por el siguiente contenido:
    db_name=<Primary db_name>
    db_unique_name=<standby db_unique_name>
    db_domain=<standby db_domain>
  3. Elimine spfile de la base de datos en espera.
    /u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora 

    La base de datos debe iniciarse en modo no montada sin ningún spfile especificado, pero el archivo de inicialización original contiene un parámetro spfile que impedirá que el paso de duplicado de RMAN funcione.

  4. Defina la variable de entorno ORACLE_UNQNAME para que apunte a DB_UNIQUE_NAME.
    export ORACLE_UNQNAME =db_unique_name

    Note:

    Si no realiza este paso, la cartera no se abrirá y fallará la ejecución del comando RMAN DUPLICATE en el paso siguiente.
  5. El comando dbcli create-database --instanceonly utilizado anteriormente abre la base de datos en espera como principal en modo de lectura/escritura, por lo que se debe cerrar la base de datos antes de continuar con el paso nomount que se muestra a continuación.
    sqlplus / as sysdba
    
    shutdown immediate
  6. Inicie la base de datos en el modo nomount.
    startup nomount

Verificación de conexiones de la base de datos

Verifique la conexión entre las bases de datos principal y en espera.

  1. Asegúrese de que el puerto del listener 1521 está abierto en las listas de seguridad que utilizan los sistemas de base de datos principal y en espera. Para obtener más información, consulte Actualización de la lista de seguridad para el sistema de base de datos.
  2. Desde la base de datos principal, conéctese a la base de datos en espera.
    sqlplus sys/<password>@<standby net service name> as sysdba
  3. Desde la base de datos en espera, conéctese a la base de datos principal.
    sqlplus sys/<password>@<primary net service name> as sysdba

Ejecución del comando RMAN DUPLICATE

Ejecute el comando RMAN DUPLICATE en el sistema de base de datos en espera como usuario oracle.

Si la base de datos principal es grande, puede asignar canales adicionales para mejorar el rendimiento. Para una base de datos recién instalada, un canal suele ejecutar la duplicación de la base de datos en un par de minutos.

Asegúrese de que no haya errores generados por el comando RMAN DUPLICATE. Si se producen errores, reinicie la base de datos utilizando el archivo init.ora (no spfile) en caso de que se genere en $ORACLE_HOME/dbs como parte de RMAN DUPLICATE.

En los ejemplos siguientes, use minúsculas para <Standby db_unique_name> a menos que se especifique lo contrario.

Para el diseño de almacenamiento ACFS, ejecute los siguientes comandos.

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>'
    ;
}

Para el diseño de almacenamiento de ASM, ejecute los siguientes comandos.

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>'  
    ;
}

Activación de FLASHBACK de la base de datos

  1. Como mejor práctica de Data Guard, active flashback y defina db_flashback_retention_target en al menos 120 minutos tanto en la base de datos principal como en la base de datos en espera.
    alter database flashback on;
    alter system set db_flashback_retention_target=120;
  2. Verifique que la base de datos en espera se ha creado correctamente.
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

Creación de un servicio de base de datos

Oracle recomienda crear un servicio de base de datos para la base de datos en espera mediante srvctl.

Para el diseño de almacenamiento de ACFS.

  1. Creación de un directorio compartido y copia del archivo spfile en él.
    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. Parada y eliminación del servicio de base de datos existente.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. Creación del servicio de base de datos
    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. Inicie el servicio de base de datos.
    srvctl start database 
        -d <standby db_unique_name>
  5. Limpie los archivos de $ORACLE_HOME/dbs.
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
  6. Cree el archivo $ORACLE_HOME/dbs/init<standby oracle_sid>.ora para hacer referencia a la nueva ubicación del archivo spfile.
    SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
  7. Pare la base de datos en espera y, a continuación, iníciela mediante srvctl.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl start database 
        -d <standby db_unique_name>

Para el diseño de almacenamiento de ASM.

  1. Considere la posibilidad de generar el archivo spfile en +DATA.
    create pfile='init<standby oracle_sid>.ora' from spfile ;
    create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. Parada y eliminación del servicio de base de datos existente.
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. Creación del servicio de base de datos
    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. Inicie el servicio de base de datos.
    srvctl start database 
        -d <standby db_unique_name>
  5. Limpie los archivos de $ORACLE_HOME/dbs.
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
  6. Cree el archivo $ORACLE_HOME/dbs/init<standby oracle_sid>.ora para hacer referencia a la nueva ubicación del archivo spfile.
    SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
  7. Pare la base de datos e inicie la base de datos en espera mediante srvctl.
    srvctl start database -d <standby db_unique_name>

Configuración de Data Guard

Realice los siguientes pasos para finalizar la configuración de Data Guard y activar el transporte de redo desde la base de datos principal y la aplicación de redo en la base de datos en espera.

  1. Ejecute la utilidad de línea de comandos dgmgrl desde el sistema de base de datos principal o en espera y conéctese a la base de datos principal con las credenciales de sys.
    connect sys/<sys password>@<primary tns alias>
  2. Cree la configuración de Data Guard e identifique las bases de datos principal y en espera en la utilidad de línea de comandos 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. Active la configuración de Data Guard para la utilidad de línea de comandos dgmgrl.
    enable configuration;
  4. Verifique que la configuración de Data Guard se ha realizado correctamente. Ejecute el siguiente SQL en ambas bases de datos, principal y en espera, en la petición de datos de SQL.
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. Verifique que los procesos de Data Guard se han iniciado en la base de datos en espera.
    select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. Verifique la configuración de parámetros en la base de datos principal y en espera.
    show parameter log_archive_dest_
    show parameter log_archive_config
    show parameter fal_server
    show parameter log_archive_format
  7. Verifique que la configuración de Data Guard funciona en la utilidad de línea de comandos dgmgrl. En concreto, asegúrese de que la aplicación de redo y el envío de redo están funcionando, y de que la base de datos en espera no se está retrasando demasiado con respecto a la base de datos principal.
    show configuration verbose
    show database verbose <standby db_unique_name>
    show database verbose <primary db_unique_name>

    Se deben resolver todas las discrepancias, errores o advertencias. También puede ejecutar una transacción en la base de datos principal y verificar que es visible en la base de datos en espera.

  8. Verifique que la configuración de Data Guard funciona según lo esperado realizando un switchover y un failover en ambas direcciones. Ejecute show configuration después de cada operación y asegúrese de que no haya ningún error ni advertencia en la utilidad de línea de comandos dgmgrl.

    Atención:

    Este paso es opcional según su criterio. Si, por algún motivo, la configuración no es válida, fallará el switchover o el failover y puede ser difícil o imposible iniciar la base de datos principal. Es posible que se necesite una recuperación de la base de datos principal, lo que afectará a la disponibilidad.

    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>

Configuración del observador (opcional)

La mejor práctica para obtener una alta disponibilidad y durabilidad es ejecutar la base de datos principal, la base de datos en espera y el observador en dominios de disponibilidad independientes. El observador determina si se realiza o no un failover en una base de datos en espera de destino específica. El servidor utilizado para el observador requiere el software Oracle Client Administrator, que incluye Oracle SQL NET y Broker. Ejecute los siguientes comandos en la utilidad de línea de comandos dgmgrl.

  1. Configure los nombres de alias TNS para las bases de datos principal y en espera, como se ha descrito anteriormente, y verifique la conexión a ambas bases de datos.
  2. Cambie el modo de protección a maxavailability o a maxperformance (maxprotection no está soportado para FSFO).

    Para activar maxavailability:

    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;

    Para activar maxperformance:

    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';

    Para maxperformance, la propiedad FastStartFailoverLaglimit limita la cantidad máxima de pérdida de datos permitida a 30 segundos por defecto.

  3. También se deben tener en cuenta las siguientes propiedades. Ejecute show configuration verbose para ver sus valores actuales.
    • FastStartFailoverPmyShutdown
    • FastStartFailoverThreshold
    • FastStartFailoverTarget
    • FastStartFailoverAutoReinstate

    (La ejecución de show configuration dará como resultado el siguiente error hasta que se inicie el observador: Warning : ORA-16819: fast-start failover observer not started).

  4. Active el failover de inicio rápido desde Broker:
    Enable fast_start failover
  5. Verifique el failover de inicio rápido y los valores asociados.
    show fast_start failover
  6. Inicie el observador desde Broker (se ejecutará en primer plano, pero también se puede ejecutar en segundo plano).
    start observer
  7. Verifique que la operación de failover de inicio rápido está activada y sin errores ni advertencias.
    show configuration verbose
  8. Pruebe siempre el failover en ambas direcciones para asegurarse de que todo funciona como se espera. Verifique que FSFO se está ejecutando correctamente realizando una cancelación del cierre de la base de datos principal.

    El observador debe iniciar el failover en la base de datos en espera. Si el modo de protección está definido en maxprotection, se pueden producir algunas pérdidas de datos, según el valor de FastStartFailoverLaglimit.