This chapter contains the following topics:
DBMS_TRACE provides subprograms to start and stop PL/SQL tracing in a session. Oracle collects the trace data as the program executes and writes it to database tables.
A typical session involves:
Starting PL/SQL tracing in session (
Running an application to be traced.
Stopping PL/SQL tracing in session (
This package must be created under
DBMS_TRACE uses these constants:
trace_all_calls constant INTEGER := 1; trace_enabled_calls constant INTEGER := 2; trace_all_exceptions constant INTEGER := 4; trace_enabled_exceptions constant INTEGER := 8; trace_all_sql constant INTEGER := 32; trace_enabled_sql constant INTEGER := 64; trace_all_lines constant INTEGER := 128; trace_enabled_lines constant INTEGER := 256; trace_stop constant INTEGER := 16384; trace_pause constant INTEGER := 4096; trace_resume constant INTEGER := 8192; trace_limit constant INTEGER := 16; trace_major_version constant BINARY_INTEGER := 1; trace_minor_version constant BINARY_INTEGER := 0;
Oracle recommends using the symbolic form for all these constants.
You cannot use PL/SQL tracing in a shared server environment.
Profiling large applications may produce a large volume of data. You can control the volume of data collected by enabling specific program units for trace data collection.
You can enable a program unit by compiling it debug. This can be done in one of two ways:
alter session set plsql_debug=true; create or replace ... /* create the library units - debug information will be generated */
/* recompile specific library unit with debug option */ alter [PROCEDURE | FUNCTION | PACKAGE BODY] <libunit-name> compile debug;
Note:You cannot use the second method for anonymous blocks.
You can limit the amount of storage used in the database by retaining only the most recent 8,192 records (approximately) by including
TRACE_LIMIT in the
TRACE_LEVEL parameter of the
You must create database tables into which the DBMS_TRACE package writes output. Otherwise, the data is not collected. To create these tables, run the script
TRACETAB.SQL. The tables this script creates are owned by SYS.
The PL/SQL features you can trace are described in the script
DBMSPBT.SQL. Some of the key tracing features are:
Additional features of DBMS_TRACE also allow pausing and resuming trace, and limiting the output.
Two levels of call tracing are available:
Level 1: Trace all calls. This corresponds to the constant
Level 2: Trace calls to enabled program units only. This corresponds to the constant
Enabling cannot be detected for remote procedure calls (RPCs); hence, RPCs are only traced with level 1.
Two levels of exception tracing are available:
Level 1: Trace all exceptions. This corresponds to
Level 2: Trace exceptions raised in enabled program units only. This corresponds to
Two levels of SQL tracing are available:
Level 1: Trace all SQL. This corresponds to the constant
Level 2: Trace SQL in enabled program units only. This corresponds to the constant
Two levels of line tracing are available:
Level 1: Trace all lines. This corresponds to the constant
Level 2: Trace lines in enabled program units only. This corresponds to the constant
When tracing lines, Oracle adds a record to the database each time the line number changes. This includes line number changes due to procedure calls and returns.
Note:For both all types of tracing, level 1 overrides level 2. For example, if both level 1 and level 2 are enabled, then level 1 takes precedence.
If tracing is requested only for enabled program units, and if the current program unit is not enabled, then no trace data is written.
When tracing calls, both the call and return are traced. The check for whether tracing is "enabled" passes if either the called routine or the calling routine is "enabled".
Call tracing will always output the program unit type, program unit name, and line number for both the caller and the callee. It will output the caller's stack depth. If the caller's unit is enabled, the calling procedure name will also be output. If the callee's unit is enabled, the called procedure name will be output
Exception tracing writes out the line number. Raising the exception shows information on whether the exception is user-defined or pre-defined. It also shows the exception number in the case of pre-defined exceptions. Both the place where the exceptions are raised and their handler is traced. The check for tracing being "enabled" is done independently for the place where the exception is raised and the place where the exception is handled.
All calls to
DBMS_TRACE.CLEAR_PLSQL_TRACE place a special trace record in the database. Therefore, it is always possible to determine when trace settings were changed.
As well as determining which items are collected, you can pause and resume the trace process. No information is gathered between the time that tracing is paused and the time that it is resumed. The constants
TRACE_RESUME are used to accomplish this. Trace records are generated to indicate that the trace was paused/resumed.
It is also possible to retain only the last 8,192 trace events of a run by using the constant
TRACE_LIMIT. This allows tracing to be turned on without filling up the database. When tracing stops, the last 8,192 records are saved. The limit is approximate, since it is not checked on every trace record. At least the requested number of trace records will be generated; up to 1,000 additional records may be generated.
Stops trace data dumping in session
Gets the version number of the trace package
Starts tracing in the current session
This procedure disables trace data collection.
This procedure gets the version number of the trace package. It returns the major and minor version number of the
DBMS_TRACE.PLSQL_TRACE_VERSION ( major OUT BINARY_INTEGER, minor OUT BINARY_INTEGER);
Major version number of
Minor version number of
This procedure enables PL/SQL trace data collection.
DBMS_TRACE.SET_PLSQL_TRACE ( trace_level INTEGER);
You must supply one or more of the constants as listed. By summing the constants, you can enable tracing of multiple PL/SQL language features simultaneously. The control constants "trace_pause", "trace_resume" and "trace_stop" should not be used in combination with other constants
Also see "Collecting Trace Data" for more information.