Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min read
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.


Para que la standby pueda consultar la primaria, necesitamos un database link privado:

  1. 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))))
  1. Desbloquear el usuario SYS$UMF:
ALTER USER "SYS$UMF" IDENTIFIED BY sysumf ACCOUNT UNLOCK;
  1. Crear el database link desde la primaria:
CREATE DATABASE LINK lnk_to_pri
CONNECT TO SYS$UMF IDENTIFIED BY "sysumf"
USING 'PDB_PRIMARY';
  1. 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).

More from this blog

Carla Muñoz López

64 posts

Soy DBA senior de bases de datos Oracle y me defino como una persona alegre y creativa. Apasionada por conocer, compartir ideas, divertirme y seguir aprendiendo todo lo relacionado con Oracle.