Saltar al contenido
WaitScope Entrar Solicitar acceso (por correo) Menú

Activar el trace con DBMS_MONITOR

Active el trace 10046 con esperas y sin binds por sesión, por client_id o por servicio, módulo y acción, compruebe que quedó activado y desactívelo al final.

Se aplica a: Oracle Database con DBMS_MONITOR (referencia de 19c)

DBMS_MONITOR activa el trace 10046 en una sesión que ya está conectada, sin cambiar la aplicación. Para WaitScope, actívelo con las esperas (waits => true) y sin los valores de bind (binds => false), justo antes de que empiece la operación, y desactívelo justo después de que termine.

Antes de empezar

  • Permiso. Según la documentación de tracing de Oracle, DBMS_MONITOR solo puede llamarlo un usuario con el rol DBA. Para activar el trace en su propia sesión, use DBMS_SESSION (en la propia sesión).
  • Consulta a las vistas. Para encontrar la sesión, usted consulta V$SESSION, o GV$SESSION en RAC.
  • Espacio en disco. El trace crece en la carpeta de trace del servidor de la base de datos mientras está activado: déjelo activado solo durante la operación.
  • Referencia. Los parámetros de esta página son los de la referencia de DBMS_MONITOR en 19c.

Activar en una sesión (SID y serial#)

  1. Encuentre la sesión en V$SESSION por el usuario, la máquina, el programa o el módulo:
    select sid, serial#, username, machine, program, module, status
    from v$session
    where username = 'EXEMPLO';
  2. Active el trace con el SID y el serial# de la sesión:
    begin
      dbms_monitor.session_trace_enable(
        session_id => 123,
        serial_num => 4567,
        waits      => true,
        binds      => false);
    end;
    /
  3. Compruebe que quedó activado:
    select sql_trace, sql_trace_waits, sql_trace_binds, sql_trace_plan_stats
    from v$session
    where sid = 123;

    Resultado: SQL_TRACE es ENABLED, SQL_TRACE_WAITS es TRUE y SQL_TRACE_BINDS es FALSE.

  4. Ejecute la operación lenta en esa sesión.
  5. Desactive el trace:
    begin
      dbms_monitor.session_trace_disable(
        session_id => 123,
        serial_num => 4567);
    end;
    /

El serial# garantiza que la llamada se aplica a esa sesión, y no a otra que reutilice el mismo SID más tarde. Para encontrar el archivo grabado, siga encontrar el archivo de trace.

En la propia sesión

Cuando es usted quien ejecuta la operación, active el trace en su sesión con DBMS_SESSION, que tiene los mismos parámetros waits, binds y plan_stat:

begin
  dbms_session.session_trace_enable(waits => true, binds => false);
end;
/

-- ejecute la operación lenta

begin
  dbms_session.session_trace_disable;
end;
/

Activar por client_id

Cuando la aplicación usa un pool de conexiones, la operación pasa por sesiones diferentes. Si la aplicación graba un identificador con DBMS_SESSION.SET_IDENTIFIER, active el trace por él. El valor aparece en la columna CLIENT_IDENTIFIER de V$SESSION: úselo tal como está allí, con las mismas mayúsculas y minúsculas.

begin
  dbms_monitor.client_id_trace_enable(
    client_id => 'EXEMPLO',
    waits     => true,
    binds     => false);
end;
/

Desactívelo al final de la operación:

begin
  dbms_monitor.client_id_trace_disable(client_id => 'EXEMPLO');
end;
/

El trace por client_id se aplica a todas las instancias y sigue activado después de reiniciar la base de datos, hasta que usted lo desactive. Antes de terminar, compruebe en DBA_ENABLED_TRACES que no quedó ninguno olvidado (comprobar lo que quedó activado).

Oracle graba un archivo por cada proceso que atendió el client_id. Para ver la operación en un solo análisis, envíe los archivos juntos (analizar juntos): el informe muestra cada sesión y suma su tiempo. Con un pool de conexiones, el intervalo en que la sesión atendía otro client_id puede aparecer como tiempo no contabilizado entre llamadas.

Activar por servicio, módulo y acción

Si la aplicación se conecta por un servicio propio y graba módulo y acción con DBMS_APPLICATION_INFO, active el trace por esa combinación. El servicio es obligatorio; módulo y acción restringen más, y lo que usted omite vale para todos.

begin
  dbms_monitor.serv_mod_act_trace_enable(
    service_name => 'EXEMPLO_SRV',
    module_name  => 'EXEMPLO',
    waits        => true,
    binds        => false);
end;
/

Desactívelo con el mismo servicio y el mismo módulo:

begin
  dbms_monitor.serv_mod_act_trace_disable(
    service_name => 'EXEMPLO_SRV',
    module_name  => 'EXEMPLO');
end;
/

Este trace se aplica a toda la base de datos, y instance_name lo restringe a una instancia. Como en el client_id, cada proceso graba su propio archivo.

Qué valores usar

Parámetros de DBMS_MONITOR para un trace que WaitScope lee
ParámetroValorPor qué
waitstrueSin las líneas WAIT, el perfil no separa la espera del resto: toda espera se convierte en tiempo no contabilizado, dentro y entre las llamadas.
bindsfalseWaitScope ignora los valores de bind. Activados, solo agregan al archivo datos que pueden ser personales, como números de identificación fiscal y correos electrónicos.
plan_statomitidoEl valor predeterminado graba el plan, en las líneas STAT, en la primera ejecución de cada cursor. 'ALL_EXECUTIONS' lo graba en cada ejecución y agranda el archivo; el informe muestra el último plan grabado de cada sentencia. 'NEVER' deja el informe sin plan.

En RAC

  • SESSION_TRACE_ENABLE activa el trace solo en la instancia a la que usted está conectado. Encuentre la instancia de la sesión en la columna INST_ID de GV$SESSION y conéctese a ella antes de activar el trace.
  • CLIENT_ID_TRACE_ENABLE se aplica a todas las instancias.
  • SERV_MOD_ACT_TRACE_ENABLE se aplica a toda la base de datos, o solo a la instancia indicada en instance_name.
  • Cada instancia graba los archivos en la carpeta de trace de su propio servidor: busque en cada nodo que atendió la operación.
select inst_id, sid, serial#, username, machine, module
from gv$session
where username = 'EXEMPLO';

Comprobar lo que quedó activado

Los traces por client_id, por servicio y de toda la base de datos aparecen en DBA_ENABLED_TRACES. Al final, la consulta debe volver vacía, o solo con lo que usted quiere mantener:

select trace_type, primary_id, qualifier_id1, qualifier_id2,
       waits, binds, plan_stats, instance_name
from dba_enabled_traces;

El trace activado en una sesión no aparece en esa vista: compruébelo en la columna SQL_TRACE de V$SESSION, como en el paso 3 de la sesión.

Problemas frecuentes

  • La llamada al paquete falla por falta de permiso. Pida al DBA que active el trace, o use DBMS_SESSION en su propia sesión.
  • La consulta muestra SQL_TRACE igual a DISABLED. Compruebe el SID y el serial# y, en RAC, si está conectado a la instancia de la sesión.
  • Esperas igual a 0 en el Resumen del informe. El trace se activó sin las esperas. Actívelo de nuevo con waits => true (niveles del 10046).
  • Texto no disponible: el cursor se abrió antes del inicio del trace. La página de la sentencia muestra este aviso cuando el trace se activó después de que la sentencia fue analizada. Actívelo antes de que empiece la operación.
  • La misma operación dejó varios archivos. Envíelos todos juntos (analizar juntos).

Próximos pasos

Actualizado el 29/10/2026. Informar un error en esta página