ORACLE IBÉRICA, S.R.L - ADVANCED CUSTOMER SERVICES - oracle data guard 19c
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
ORACLE IBÉRICA, S.R.L. ADVANCED CUSTOMER SERVICES ORACLE DATA GUARD 19C INSTALACIÓN Y CONFIGURACIÓN BÁSICA SOLUTION SUPPORT CENTER Referencia documento: InfV5_Configuracion_Data_Guard_19c_v10.doc Fecha: 25/08/2021 Versión: 1.0 La información incluida en el presente informe es confidencial, siendo para el uso exclusivo del cliente indicado. Si usted no es el destinatario del informe le informamos que está totalmente prohibida cualquier divulgación, distribución o reproducción del contenido de dicho informe. Copyright(c) 2.021 ORACLE IBÉRICA Todos los derechos reservados
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Registro de Cambios Fecha Autor Versión Notas 25/08/2021 David Sánchez de Alcázar 1.0 Creación del documento Revisiones Nombre Role Agustín Calvo Senior Technical Account Manager José María Gómez Senior Technical Account Manager Distribución Copia Nombre Empresa 1 Equipo Técnico Junta de Andalucía 2 Equipo Técnico Oracle Soporte ACS 3 Certificado ISO-9002 Pág. 2 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Índice de Contenidos INTRODUCCIÓN ..................................................................................................................................... 4 PREPARACIÓN DE LA BASE DE DATOS PRIMARIA ................................................................................... 5 CONFIGURACIÓN Y COMPROBACIÓN DE CONECTIVIDAD SQL*NET ENTRE LOS SERVIDORES ................ 6 CREACIÓN DE LA BASE DE DATOS STANDBY ......................................................................................... 8 CONFIGURACIÓN DE DATA GUARD BROKER ....................................................................................... 11 COMPROBACIONES Y TAREAS POSTERIORES ........................................................................................ 13 Certificado ISO-9002 Pág. 3 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Introducción El presente informe recoge los pasos para realizar la configuración de un entorno de respaldo para una base de datos Oracle 19.11 basado en Oracle Data Guard en un entorno Windows. Para ilustrar la operativa, se ha optado por configurar una única base de datos Standby física y para la gestión de Oracle Data Guard se configuró Data Guard Broker. Las fases que se han llevado a cabo son las siguientes: Preparación de la base de datos Primaria Configuración y comprobación de conectividad SQL*Net entre los servidores Creación de la base de datos Standby Configuración de Data Guard Broker Comprobaciones y tareas posteriores Certificado ISO-9002 Pág. 4 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Preparación de la base de datos Primaria En primer lugar, comprobamos que la base de datos Primaria se encuentra en modo ARCHIVELOG: SQL> select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG En caso de que no hubiese estado en modo ARCHIVELOG, tendríamos que proceder de la siguiente manera: SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; A continuación habilitamos el FORCE LOGGING para asegurarnos que todos los cambios realizados en la Primaria, lleguen a la Standby: SQL> alter database force logging; También en la base de datos Primaria, creamos los standby redo logs. Deben tener, al menos, el tamaño de los redo más grandes, en nuestro caso, 256MB: SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 ('D:\BDPRIM_BD\STB\STANDBY_REDO01.LOG') SIZE 256M; SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 ('D:\BDPRIM_BD\STB\STANDBY_REDO02.LOG') SIZE 256M; SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 ('D:\BDPRIM_BD\STB\STANDBY_REDO03.LOG') SIZE 256M; SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 ('D:\BDPRIM_BD\STB\STANDBY_REDO04.LOG') SIZE 256M; Y fijamos a AUTO el parámetro standby_file_management. De esta manera, los cambios en ficheros a nivel de sistema operativo, se replican desde la Primaria hacia la Standby: SQL> alter system set standby_file_management=AUTO; Certificado ISO-9002 Pág. 5 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Configuración y comprobación de conectividad SQL*Net entre los servidores En el fichero tnsnames.ora del servidor de la base de datos Primaria tenemos que añadir la entrada para la base de datos Standby BDSTBY. En el fichero listener.ora no tenemos que tocar nada por ahora: BDPRIM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_PRIMARY.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = BDPRIM.domain) ) ) BDSTBY = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_STANDBY.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = BDSTBY.domain) ) ) LISTENER_BDPRIM = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_PRIMARY.domain)(PORT = 1521)) En el servidor server_standby (Standby) tenemos que crear las entradas para la Primaria y Standby en el fichero tnsnames.ora: BDPRIM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_PRIMARY.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = BDPRIM.domain) ) ) BDSTBY = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_STANDBY.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = BDSTBY.domain) ) ) LISTENER_BDSTBY = (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_STANDBY.domain)(PORT = 1521)) En el servidor server_standby (Standby) tenemos que añadir el registro estático de la Standby en el listener para poder conectarnos: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\APP\ORACLE\product\19.0.0\dbhome_1\bin\oraclr19.dll") Certificado ISO-9002 Pág. 6 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 ) (SID_DESC = (GLOBAL_DBNAME = BDSTBY.domain) (SID_NAME = BDSTBY) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) ) ) Tras realizar este cambio, tendremos que reiniciar el listener para que los cambios tomen efecto. Para comprobar que tenemos conectividad correctamente, probamos a conectar a la Primaria desde el servidor de la Standby (server_standby): C:\> sqlplus sys/XXXX@BDPRIM as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 18 13:24:01 2021 Version 19.11.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.11.0.0.0 SQL> Certificado ISO-9002 Pág. 7 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Creación de la base de datos Standby Para la creación de la base de datos Standby a partir de la Primaria, vamos a seguir la nota de My Oracle Support Step by Step Guide on Creating Physical Standby Using RMAN DUPLICATE...FROM ACTIVE DATABASE (Doc ID 1075908.1). En primer lugar, copiamos el fichero de passwords de la base de datos Primaria al servidor de la Standby (server_standby) y lo renombramos Servidor Ruta Fichero ORIGEN server_primary C:\app\oracle\product\19.0.0\dbhome_1\database PWDBDPRIM.ORA DESTINO server_standby C:\app\oracle\product\19.0.0\dbhome_1\database PWDBDSTBY.ORA En el servidor de la Standby, creamos el init.ora con el que arrancaremos la base de datos: Servidor Ruta Fichero server_standby C:\app\oracle\product\19.0.0\dbhome_1\database INITBDSTBY.ORA Indicando únicamente el db_name: *.db_name='BDPRIM' Creamos las rutas necesarias en el servidor de la Standby. En nuestro caso son las siguientes: D:\BDSTBY_BD D:\BDSTBY_BD\STB E:\BDSTBY_BD E:\BDSTBY_BD\FRA E:\BDSTBY_BD\FRA\BDSTBY E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG Por ultimo, antes de arrancarla, debemos crear el servicio de Windows para la instancia Standby de la siguiente manera: C:\> oradim –NEW –SID BDSTBY –STARTMODE manual Arrancamos el servicio de forma manual, y ya podemos proceder a arrancar la base de datos Standby indicando el init que creamos anteriormente: C:\> set ORACLE_SID=BDSTBY C:\> sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='C:\app\oracle\product\19.0.0\database\dbhome_1\INITBDSTBY.ora'; Para lanzar el duplicate, lo haremos desde el servidor de la Standby, conectando a RMAN indicando como target la Primaria y como auxiliary la Standby: C:\> rman target sys/XXXXX@BDPRIM auxiliary sys/XXXXX@BDSTBY Y lanzamos el comando del duplicate: Certificado ISO-9002 Pág. 8 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 RMAN> duplicate target database for standby from active database dorecover spfile parameter_value_convert='BDPRIM','BDSTBY','bdprim','BDSTBY', 'BDPRIM_BD','BDSTBY_BD' set db_name='BDPRIM' set db_unique_name='BDSTBY' COMMENT 'Is standby' set db_file_name_convert='BDPRIM','BDSTBY' set log_file_name_convert='BDPRIM','BDSTBY' set job_queue_processes='0' set local_listener='LISTENER_BDSTBY' nofilenamecheck; El resultado es el siguiente (se muestra un fragmento del inicio y del fin): Recovery Manager : Release 19.0.0.0.0 - Production on Mie Ago 18 08:44:01 2021 Version 19.11.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. conectado a la base de datos de destino: BDPRIM (DBID=3470835575) conectado a una base de datos auxiliar: BDPRIM (no montada) RMAN> duplicate target database 2> for standby 3> from active database 4> dorecover 5> spfile 6> parameter_value_convert='BDPRIM','BDSTBY','bdprim','BDSTBY','BDPRIM_BD','BDSTBY_BD' 7> set db_name='BDPRIM' 8> set db_unique_name='BDSTBY' COMMENT 'Is standby' 9> set db_file_name_convert='BDPRIM','BDSTBY' 10> set log_file_name_convert='BDPRIM','BDSTBY' 11> set job_queue_processes='0' 12> set local_listener='LISTENER_BDSTBY' 13> nofilenamecheck; Empezando Duplicate Db a las 18/08/21 se utiliza el archivo de control de la base de datos destino en lugar del catalogo de recuperacion canal asignado: ORA_AUX_DISK_1 canal ORA_AUX_DISK_1: SID=202 tipo de dispositivo=DISK canal asignado: ORA_AUX_DISK_2 canal ORA_AUX_DISK_2: SID=472 tipo de dispositivo=DISK log actual archivado contenido del script de memoria: { backup as copy reuse passwordfile auxiliary format 'C:\APP\ORACLE\product\19.0.0\dbhome_1\DATABASE\PWDBDSTBY.ORA' ; restore clone from service 'BDPRIM' spfile to 'C:\APP\ORACLE\PRODUCT\19.0.0\DBHOME_1\DATABASE\SPFILEBDSTBY.ORA'; sql clone "alter system set spfile= ''C:\APP\ORACLE\PRODUCT\19.0.0\DBHOME_1\DATABASE\SPFILEBDSTBY.ORA''"; } […] secuencia=2171 nombre de archivo archive log=E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG\2021_08_18\O1_MF_1_2172_JKSJW302_.ARC thread=1 secuencia=2172 nombre de archivo archive log=E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG\2021_08_18\O1_MF_1_2173_JKSJWBJC_.ARC thread=1 secuencia=2173 recuperacion del medio fisico terminada, tiempo transcurrido: 00:00:25 Se ha finalizado recover a las 18/08/21 contenido del script de memoria: { delete clone force archivelog all; Certificado ISO-9002 Pág. 9 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 } ejecutando script de memoria canal liberado: ORA_DISK_1 canal liberado: ORA_DISK_2 canal liberado: ORA_AUX_DISK_1 canal liberado: ORA_AUX_DISK_2 canal asignado: ORA_DISK_1 canal ORA_DISK_1: SID=1364 tipo de dispositivo=DISK canal asignado: ORA_DISK_2 canal ORA_DISK_2: SID=19 tipo de dispositivo=DISK archive log suprimido nombre de archivo de log archivado=E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG\2021_08_18\O1_MF_1_2171_JKSJW2RH_.ARC RECID=2 STAMP=1080901415 archive log suprimido nombre de archivo de log archivado=E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG\2021_08_18\O1_MF_1_2172_JKSJW302_.ARC RECID=1 STAMP=1080901415 archive log suprimido nombre de archivo de log archivado=E:\BDSTBY_BD\FRA\BDSTBY\ARCHIVELOG\2021_08_18\O1_MF_1_2173_JKSJWBJC_.ARC RECID=3 STAMP=1080901418 3 objetos suprimidos Se ha finalizado Duplicate Db a las 18/08/21 RMAN> Certificado ISO-9002 Pág. 10 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Configuración de Data Guard Broker Una vez creada la base de datos Standby, a partir de la Primaria, habilitamos Data Guard Broker tanto en la Primaria como en la Standby, lanzando en ambas: SQL> alter system set dg_broker_start=true; A continuación, nos conectamos usando DGMGRL (Data Guard command-line interface) a la Primaria: C:\> DGMGRL DGMGRL> connect sys@BDPRIM Creamos la configuración de Data Guard y la activamos: DGMGRL> create configuration my_dg_config as primary database is BDPRIM connect identifier is BDPRIM; DGMGRL> add database BDSTBY as connect identifier is BDSTBY maintained as physical; DGMGRL> enable configuration; Con el siguiente commando, podemos revisar la configuración: DGMGRL> show configuration; Configuration - my_dg_config Protection Mode: MaxPerformance Members: BDPRIM - Primary database BDSTBY - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 19 seconds ago) Y también revisar la parametrización de ambas bases de datos mediante: DGMGRL> show database verbose BDPRIM; DGMGRL> show database verbose BDSTBY; En el fichero listener.ora tendremos que añadir entradas para el Data Guard Broker. En el servidor de la Primaria (server_primary) añadiremos: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\APP\ORACLE\product\19.0.0\dbhome_1\bin\oraclr19.dll") ) (SID_DESC = (GLOBAL_DBNAME = BDPRIM_DGMGRL.domain) (SID_NAME = BDPRIM) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) ) ) Certificado ISO-9002 Pág. 11 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Y en el servidor de la Standby (server_standby) añadiremos: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\APP\ORACLE\product\19.0.0\dbhome_1\bin\oraclr19.dll") ) (SID_DESC = (GLOBAL_DBNAME = BDSTBY.domain) (SID_NAME = BDSTBY) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) ) (SID_DESC = (GLOBAL_DBNAME = BDSTBY_DGMGRL.domain) (SID_NAME = BDSTBY) (ORACLE_HOME = C:\APP\ORACLE\product\19.0.0\dbhome_1) ) ) Para que los cambios tomen efecto, tendremos que reiniciar ambos listeners. Para comprobar que es correcto, podemos probar el siguiente comando desde DGMGRL: DGMGRL> validate database BDSTBY; Database Role: Physical standby database Primary Database: bdprim Ready for Switchover: Yes Ready for Failover: Yes (Primary Running) Flashback Database Status: BDPRIM : Off BDSTBY : Off Managed by Clusterware: BDPRIM : NO BDSTBY : NO Validating static connect identifier for the primary database bdprim... The static connect identifier allows for a connection to database "bdprim". Certificado ISO-9002 Pág. 12 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 Comprobaciones y tareas posteriores Una vez configurado nuestro Data Guard, podemos comprobar el estado de la sincronización de la Standby con la siguiente consulta: SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received",APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1; Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 22169 22169 0 También podemos ver algunas estadísticas del Data Guard mediante: SQL> select source_db_unique_name, name, value from v$dataguard_stats; SOURCE_DB_UNIQUE_NAME NAME VALUE --------------------- ---------------------- -------------------- BDPRIM transport lag +00 00:00:00 BDPRIM apply lag +00 00:00:00 BDPRIM apply finish time +00 00:00:00.000 estimated startup time 39 Una vez comprobada que la sincronización se está realizando correctamente, tendremos que cambiar la configuración de RMAN para que no se eliminen los archivelogs en la Primaria hasta que se hayan enviado a la Standby. Para ello, nos conectamos al catálogo desde la Primaria y lanzamos: C:/> rman target / catalog rman/XXXX@CATRMAN RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY BACKED UP 1 TIMES TO DISK; Y para gestionar los archivelogs, en la Standby, añadiremos un script de RMAN que elimine los más antiguos de 3 días y haga copia del control file y spfile de la Standby. Primero configuramos lo siguiente en caso de que aún no esté configurado en la Standby: C:\> rman target / RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 8 DAYS; RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'F:\ORABACKUP\BDSTBY\controlfile_bdstby_%F'; RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; A continuación, programamos en el Programador de Tareas de Windows el siguiente script: backup_BDSTBY.bat @echo off SET HORA2=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% IF "%HORA2:~0,1%" == " " SET HORA2=0%HORA2:~1% Certificado ISO-9002 Pág. 13 Nº: 20845/G
InfV5_Configuracion_Data_Guard_19c_v10.doc 25/08/2021 SET HORA=%HORA2% set NLS_DATE_FORMAT=DD-MM-YYYY hh24:mi:ss SET ORACLE_SID=BDSTBY SET LOGD=F:\ORABACKUP\LogsBackup\LOG_RMAN_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%%HORA%_%ORACLE_ SID%.txt rman target / nocatalog @'C:\OSS\RMAN\rman_BDSTBY.cmd' >> %LOGD% FORFILES /p F:\ORABACKUP\LogsBackup /s /m *.TXT /d -8 /C "cmd /c del /q F:\ORABACKUP\LogsBackup\@FILE" FORFILES /p F:\ORABACKUP\BDSTBY /s /m *.rcv /d -8 /C "cmd /c del /q F:\ORABACKUP\BDSTBY\@FILE" Que a su vez llama a: rman_BDSTBY.cmd run { CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'F:\ORABACKUP\BDSTBY\rman_BDSTBY_spfile_%U.rcv' MAXPIECESIZE 4G; BACKUP SPFILE; DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-3'; } Al tener activado el autobackup del controlfile, ya se hace automáticamente. Por último, faltaría añadir un script en el arranque del servidor de la base de datos Standby (server_standby) para que monte la base de datos Standby tal y como se indica en la nota de My Oracle Support Prevent Physical Standby Database Open Read Only on Windows Service Startup (Doc ID 2239846.1): startupmount.bat net start OracleServiceBDSTBY timeout 30 set ORACLE_HOME=C:\APP\ORACLE\product\19.0.0\dbhome_1 set ORACLE_SID=BDSTBY C:\APP\ORACLE\product\19.0.0\dbhome_1\bin\sqlplus -s "/ as sysdba" @C:\OSS\ArranqueSTANDBY\startupmount.sql startupmount.sql startup mount; exit; Certificado ISO-9002 Pág. 14 Nº: 20845/G
También puede leer