Cómo ejecutar SQL Tuning Advisor desde un Standby en Oracle Active Data Guard desde OEM

En entornos Oracle con Active Data Guard, es posible ejecutar SQL Tuning Advisor desde la base standby y generar reportes de la primaria. Esto permite analizar SQL de alta carga sin afectar la producción.
1. Preparar un Database Link
Para que la standby pueda consultar la primaria, necesitamos un database link privado:
- Crear entradas TNS :
PDB_XXXXXX_PRI=
(DESCRIPTION_LIST=
(LOAD_BALANCE=off) (FAILOVER=on)
(DESCRIPTION= (CONNECT_TIMEOUT=15)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)
(ADDRESS_LIST= (LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=racscan-pri.xxxxx.xxx)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=mant.xxxxx.xxx)))
(DESCRIPTION= (CONNECT_TIMEOUT=15)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)
(ADDRESS_LIST= (LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST= racscan-stb.xxxxx.xxx)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=mant.xxxxx.xxx))))
- Desbloquear el usuario SYS$UMF:
ALTER USER "SYS$UMF" IDENTIFIED BY sysumf ACCOUNT UNLOCK;
- Crear el database link desde la primaria:
CREATE DATABASE LINK lnk_to_pri
CONNECT TO SYS$UMF IDENTIFIED BY "sysumf"
USING 'PDB_PRIMARY';
- Verificar la conexión desde Standby:
SQL> select * from dual@lnk_to_pri;
D
-
X
2. Generar la tarea SQL Tuning
Desde OEM la tarea automática se llamará como:
SQL_TUNING_STDBY_xxxx
Pertenecen a SYSTEM.
Desde la standby, se pueden consultar mediante DBMS_SQLTUNE.


3. Generar el reporte desde la standby
Podremos ver resultados desde OEM o consultar desde BBDD:
SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
l_report CLOB;
BEGIN
l_report := DBMS_SQLTUNE.report_tuning_task(
task_name => 'SQL_TUNING_STDBY_xxxx,
type => 'TEXT',
level => 'TYPICAL',
section => 'ALL',
owner_name => 'SYSTEM'
);
DBMS_OUTPUT.put_line(l_report);
END;
/
type => 'TEXT' devuelve un reporte legible en consola.
section => 'ALL' incluye todo el detalle del tuning.
owner_name => 'SYSTEM' permite acceder a tareas de otro usuario.
4. Guardar el reporte en un archivo
SPOOL sql_tuning_report.txt
DECLARE
l_report CLOB;
BEGIN
l_report := DBMS_SQLTUNE.report_tuning_task(
task_name => 'SQL_TUNING_STDBY_xxxx',
type => 'TEXT',
level => 'ALL',
section => 'ALL',
owner_name => 'SYSTEM'
);
DBMS_OUTPUT.put_line(l_report);
END;
/
SPOOL OFF
Esto genera un archivo sql_tuning_report.txt con todas las recomendaciones, índices sugeridos y sugerencias de reescritura.
Beneficios de usar SQL Tuning en Standby
Ejecutar tuning sin impactar la primaria
Compatible con Active Data Guard
Permite optimizaciones periódicas desde standby
Acceso a recomendaciones completas incluso si la tarea fue ejecutada en la primaria
Nota: Siempre usar database links privados y privilegios mínimos necesarios (SYS$UMF).




