[19c] AWR en Active Data Guard Standby Database
![[19c] AWR en Active Data Guard Standby Database](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/6981ecf5-9a30-430d-a102-ba696d41828b.png)
Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.
En el artículo de hoy vamos a ver como podemos generar AWR en una standby, algo muy sencillo de configurar y muy útil para ver cómo respira.
Así que sin más, vamos a ello.
Todo los pasos que tenemos que realizar, los vamos hacer desde la primary y a nivel de CDB$Root, no a nivel de PDB. Hay algún paso, que habría que conectarse a la standby, pero ese paso lo haremos vía DBLink desde la primary.
SYS$UMF
El primer paso que debemos hacer es desbloquear este usuario**,** por defecto suele venir bloqueado. ¿Porqué es importante este paso? Porque ese usuario es el encargado de administrar RMF (Remote Management Framework).
SQL> alter user sys$umf identified by oracle account unlock;
SQL>
Select username, account_Status
From dba_users
Where username=upper('sys$umf');
USERNAME ACCOUNT_STATUS
---------- --------------------------------
SYS$UMF OPEN
Definir los DBLinks
Antes de crearlos, vamos a modificar el tnsnames porque vamos a ir por local naming.
Incluimos las cadenas de ambas cdb$root tanto en la primary como la standby.
SQL> ! tail -10 $ORACLE_HOME/network/admin/tnsnames.ora
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XXXXXX.XXXXX.XXXXXX)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XXXXXX.XXXXX.XXXXXX)
)
)
Ahora sí, definimos los DBLinks .
SQL> create database link DB_PRIMARY CONNECT TO sys$umf IDENTIFIED BY "XXXX" using 'PRIMARY';
Database link created.
SQL> create database link DB_STANDBY CONNECT TO sys$umf IDENTIFIED BY "XXXX" using 'STANDBY';
Database link created.
SQL>
Select owner, username,db_link, host
From all_db_links
Where instr(host,'(')=0 AND username = 'SYS$UMF';
OWNER USERNAME DB_LINK HOST
---------- ---------- ------------- ----------
SYS SYS$UMF DB_PRIMARY PRIMARY
SYS SYS$UMF DB_STANDBY STANDBY
Verificamos que funcionan:
SQL> select database_role from v$database@DB_STANDBY;
DATABASE_ROLE
----------------------------------------------------------------
PHYSICAL STANDBY
SQL> select database_role from v$database@DB_PRIMARY;
DATABASE_ROLE
----------------------------------------------------------------
PRIMARY
Configuración RMF
Antes de entrar a configurar RMF, debemos setear el siguiente parámetro oculto "_umf_remote_enabled" a TRUE.
SQL> alter system set "_umf_remote_enabled"=TRUE scope=BOTH;
SQL>
SELECT p.ksppinm AS name,
v.ksppstvl AS value,
v.ksppstdf AS is_default,
v.ksppstvf AS is_modified
FROM sys.x$ksppi p
JOIN sys.x$ksppcv v
ON v.indx = p.indx
WHERE p.ksppinm In ('_umf_remote_enabled');
NAME VALUE IS_DEFAULT IS_MODIFIED
---------------------- -------- ---------- --------------
_umf_remote_enabled FALSE TRUE 0
Una vez seteado, configuramos ambos nodos que queremos registrar con la topología de RMF. Este sería el único paso que habría que ejecutar en la standby, pero en nuestro caso, lo haremos vía DBLink.
Begin
dbms_umf.configure_node(node_name=>'UMF_PRIMARY');
dbms_umf.configure_node@DB_STANDBY(node_name=>'UMF_STANDBY',DBLINK_TO_TARGET=>'DB_PRIMARY');
End;
/
Definimos la topología:
exec DBMS_UMF.create_topology (topology_name=>'TOPOLOGY_SHADOW');
SQL> select * from dba_umf_topology;
TOPOLOGY_NAME TARGET_ID TOPOLOGY_VERSION TOPOLOGY_STATE
-------------------- ---------- ---------------- ----------------
TOPOLOGY_SHADOW 4094168332 1 ACTIVE
Registramos el nodo con la topología definida en el punto anterior.
exec DBMS_UMF.register_node (
topology_name=>'TOPOLOGY_SHADOW',
node_name=>'UMF_STANDBY',
dblink_to_node=>'DB_STANDBY',
dblink_from_node=>'DB_PRIMARY',
as_source=>'FALSE',
as_candidate_target=>'FALSE');
SQL> select * from dba_umf_registration;
TOPOLOGY_NAME NODE_NAME NODE_ID NODE_TYPE AS_SOURCE AS_CANDIDATE_TARGET STATE
-------------------- -------------------- ---------- ---------- -------------------- -------------------- --------------------------------------------------------------------------------
TOPOLOGY_SHADOW UMF_PRIMARY 4094168332 0 FALSE FALSE OK
TOPOLOGY_SHADOW UMF_STANDBY 2902407351 0 FALSE FALSE OK
Configuración AWR
Habilitamos AWR en nuestra standby.
exec DBMS_WORKLOAD_REPOSITORY.register_remote_database(node_name=>'UMF_STANDBY');
Generamos el primer snapshot de nuestra standby.
exec dbms_workload_repository.create_remote_snapshot(node_name=>'UMF_STANDBY');
Listo, en este punto tendremos activo la parte de AWR a nivel de standby, con la configuración por defecto ( cada hora snapshot y una retención de 8 días).
Dejo los pasos en caso que tengamos que deshabilitarlo de manera temporal, eliminarlo o incluso si lo tenemos activo y tenemos un switchover entre medias, que paso deberíamos ejecutar.
Desactivar
Desde nuestra primary, no desde la standby:
---Seteamos el parámetro _umf_remote_enabled a FALSE:
ALTER SYSTEM SET "_remote_awr_enabled" = FALSE SCOPE = BOTH SID = '*';
----> on DB_PRIMARY / desactivar
exec bms_workload_repository.modify_snapshot_settings(interval=>0, dbid => '&dbid_standby');
Eliminar
Desde nuestra primary, no desde la standby:
Begin
DBMS_WORKLOAD_REPOSITORY.unregister_remote_database(node_name=>'UMF_STANDBY',topology_name=>'TOPOLOGY_SHADOW',remote_check=>TRUE);
DBMS_UMF.unregister_node (topology_name=>'TOPOLOGY_SHADOW', node_name=>'UMF_STANDBY');
DBMS_UMF.drop_topology (topology_name=>'TOPOLOGY_SHADOW');
End;
/
drop database link DB_PRIMARY;
drop database link DB_STANDBY;
Switchover
Este paso habrá que realizarse desde la que es ahora nuestra primary.
exec DBMS_UMF.SWITCH_DESTINATION(topology_name => 'TOPOLOGY_SHADOW',force_switch => TRUE);
Dejo todo en un único script por si queréis descargarlo.
Espero que os guste. ¡Nos vemos en el próximo artículo!
![[OCI] Upgrade 19c a 26ai](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/a3c1b3a1-9152-47c4-8209-11bffce67e8e.png)
![[OCI] 19c DBCA - Silent mode](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/290a85d4-e3d3-475f-a6a6-5f4095bd9d3a.png)
![[OCI] Oracle Grid Infrastructure 19c (Oracle Restart + ASM)](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/d022eac1-1acd-4def-8ec1-7612950afe1c.png)
![[26ai] SQL: Calendar functions/Aggregation Filters "CALENDAR"](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/587e3328-9877-4c7a-aad7-7811e251f81e.png)