Oracle DBMS_ASH_INTERNAL
Version 21c

General Information
Library Note Morgan's Library Page Header
ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling complimentary technical Workshops on Database Security for the first 30 Oracle Database customers located anywhere in North America, EMEA, LATAM, or APAC that send an email to asra_us@oracle.com. Request a Workshop for your organization today.
Purpose Undocumented internal package supporting Active Session History (ASH). As creating ASH reports requires licensing of the appropriate OEM pack any testing demos on this page should assume that this licensing may also required for running code referenced these demos.
AUTHID CURRENT_USER
Data Types TYPE CONTEXTTYPE IS ...

TYPE COMPONENTLISTTYPE IS ...

TYPE DBMS_ASH_INTERNAL DIMIDTABLETYPE IS ...

TYPE FILTERTABLETYPE IS ...

TYPE VARCHARLISTTYPE IS ...
Dependencies
ASHVIEWER DBMS_REPORT PRVTEMX_PERF
AWRRPT_INSTANCE_LIST_TYPE DBMS_SQLTUNE_UTIL1 PRVTEMX_RSRCMGR
CDB_PROCEDURES DBMS_SQLTUNE_UTIL2 PRVT_AWR_DATA
DBA_PROCEDURES DBMS_STANDARD PRVT_AWR_VIEWER
DBA_USERS DBMS_SWRF_REPORT_INTERNAL PRVT_REPORT_TAGS
DBMS_ASH DBMS_SYS_ERROR PRVT_SMGUTIL
DBMS_ASSERT DBMS_UMF_PROTECTED V$INSTANCE
DBMS_AWR_REPORT_LAYOUT DBMS_WORKLOAD_REPOSITORY V$LATCH
DBMS_LOB DBMS_WRR_INTERNAL V$SQL
DBMS_MANAGEMENT_PACKS DUAL WRI$_REPT_ASH
DBMS_OUTPUT PLITBLM XMLTYPE
DBMS_PERF    
Documented No
First Available Not known but present in 11.2
Security Model Owned by SYS with no privileges granted
Source {ORACLE_HOME}/rdbms/admin/prvsash.plb
Subprograms
 
ASH_PHASE_EXECUTION
Undocumented dbms_ash_internal.ash_phase_execution(
max_rank IN NUMBER,
min_perc IN NUMBER)
RETURN VARCHAR2;
TBD
 
ASH_ROLLUP_SQL_1D
Undocumented dbms_ash_internal.ash_rollup_sql_1d(
select_list      IN VARCHAR2,
dimension        IN VARCHAR2,
xtra_select_list IN VARCHAR2,
predicate        IN VARCHAR2,
join_with        IN VARCHAR2,
join_predicate   IN VARCHAR2,
min_perc         IN NUMBER,
max_rank         IN NUMBER,
is_awr_selection IN BOOLEAN,
is_global_awr    IN BOOLEAN)
RETURN VARCHAR2;
TBD
 
ASH_ROLLUP_SQL_2D
Undocumented dbms_ash_internal.ash_rollup_sql_2d(
select_list      IN VARCHAR2,
dimension1       IN VARCHAR2,
dimension2       IN VARCHAR2,
xtra_select_list IN VARCHAR2,
predicate        IN VARCHAR2,
join_with        IN VARCHAR2,
join_predicate   IN VARCHAR2,
min_d1_perc      IN NUMBER,
max_d1_rank      IN NUMBER
min_d12_perc     IN NUMBER,
max_d12_rank     IN NUMBER,
d12_min_cnt      IN NUMBER,
is_awr_selection IN BOOLEAN,
is_global_awr    IN BOOLEAN)
RETURN VARCHAR2;
TBD
 
ASH_ROLLUP_SQL_3D
Undocumented dbms_ash_internal.ash_rollup_sql_3d(
select_list      IN VARCHAR2,
dimension1       IN VARCHAR2,
dimension2       IN VARCHAR2,
dimension3       IN VARCHAR2,
xtra_select_list IN VARCHAR2,
predicate        IN VARCHAR2,
join_with        IN VARCHAR2,
join_predicate   IN VARCHAR2,
min_d1_perc      IN NUMBER,
max_d1_rank      IN NUMBER
min_d12_perc     IN NUMBER,
max_d12_rank     IN NUMBER,
min_d123_perc    IN NUMBER,
max_d123_rank    IN NUMBER,
d123_min_cnt     IN NUMBER,
is_awr_selection IN BOOLEAN,
is_global_awr    IN BOOLEAN)
RETURN VARCHAR2;
TBD
 
ASH_ROLLUP_XML_1D
Undocumented dbms_ash_internal.ash_rollup_xml_1d(section_tag IN VARCHAR2) RETURN XMLTYPE;
TBD
 
ASH_ROLLUP_XML_2D
Undocumented dbms_ash_internal.ash_rollup_xml_2d(section_tag IN VARCHAR2) RETURN XMLTYPE;
TBD
 
ASH_SQL_FOR_AWR
Undocumented

Output, at right, partially reformatted for legibility
dbms_ash_internal.ash_sql_for_awr(is_global IN BOOLEAN) RETURN VARCHAR2;
DECLARE
 b      BOOLEAN := FALSE;
 retVal VARCHAR2(4000);
BEGIN
  retVal := dbms_ash_internal.ash_sql_for_awr(b);
  dbms_output.put_line(retVal);
END;
/

SELECT ash.* FROM (SELECT a.dbid, a.instance_number, a.snap_id, nvl(a.con_id,-1) as con_id, a.con_dbid, nvl(p.pdb_name, 'UNKNOWN DBID ' || a.con_dbid) as
pdb_name, a.sample_id, a.sample_time, a.session_id, a.session_serial#, a.session_type, a.session_state, a.flags, a.user_id, a.sql_id, a.sql_opcode, a.sql_opname, a.top_level_sql_id, a.sql_child_number, a.sql_plan_hash_value, nvl(a.sql_full_plan_hash_value,a.sql_plan_hash_value) as full_plan_hash_value, a.sql_plan_line_id, a.sql_plan_operation, a.sql_plan_options, a.sql_exec_id, a.force_matching_signature, a.plsql_entry_object_id, a.plsql_entry_subprogram_id, a.plsql_object_id, a.plsql_subprogram_id, a.service_hash, a.qc_session_id, a.qc_instance_id,a.qc_session_serial#,
nvl(a.event, CASE WHEN bitand(a.time_model, power(2,19)) > 0 THEN 'CPU: IM Populate'
                  WHEN bitand(a.time_model, power(2,20)) > 0 THEN 'CPU: IM Prepopulate'
                  WHEN bitand(a.time_model, power(2,21)) > 0 THEN 'CPU: IM Repopulate'
                  WHEN bitand(a.time_model, power(2,22)) > 0 THEN 'CPU: IM Trickle Repop'
                  WHEN bitand(a.time_model, power(2,18)) > 0 THEN 'CPU: IM Query'
                  ELSE 'CPU + Wait for CPU' END) as event,
nvl(a.event_id, 1) as event_id,
nvl(a.wait_class, 'CPU') as wait_class,
nvl(a.wait_class_id, 9999) as wait_class_id,
a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3text, a.wait_time, a.time_waited, a.xid, a.blocking_session, a.blocking_session_serial#, a.blocking_session_status, a.blocking_inst_id, a.current_obj#, a.current_file#, a.current_block#, a.top_level_call#, a.top_level_call_name, a.program, a.module, a.action, a.client_id, a.remote_instance#, a.in_connection_mgmt, a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution, a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind, a.in_cursor_close, a.in_sequence_load
FROM $#CDB#$VND$ACTIVE_SESS_HISTORY a, (
  SELECT /*+ NO_MERGE */ dbid, con_dbid, substr(x,20) as pdb_name, instance_number
  FROM (
    SELECT i.dbid, i.con_dbid, i.instance_number, max(to_char(i.OPEN_TIME, 'YYYY:MM:DD
           HH24:MI:SS') || i.PDB_NAME) as x
    FROM $#CDB#$VND$pdb_instance i
    WHERE i.con_dbid <> 0
    GROUP BY i.dbid, i.con_dbid, i.instance_number)) p
  WHERE 1=1
  AND a.con_dbid = p.con_dbid(+)
  AND a.dbid = p.dbid(+)
  AND a.instance_number = p.instance_number(+)) ash
WHERE ash.dbid = :dbid
AND ash.snap_id > :bid
AND ash.snap_id <= :eid
AND ash.instance_number = :inst_num

PL/SQL procedure successfully completed.
 
ASH_VIEW_SQL
Undocumented dbms_ash_internal.ash_view_sql RETURN VARCHAR2;
SELECT dbms_ash_internal.ash_view_sql
FROM dual;
SELECT dbms_ash_internal.ash_view_sql
       *
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_ASH_INTERNAL", line 460


DECLARE
 retVal VARCHAR2(32767);
BEGIN
  retVal := dbms_ash_internal.ash_view_sql;
  dbms_output.put_line(retVal);
END;
/
SELECT unified_ash.* FROM ( ( SELECT :local_awrdbid as dbid, inst.instance_number, 0 as snap_id, a.con_id, a.con_dbid, nvl(p.name, 'UNKNOWN DBID ' || a.con_dbid) as pdb_name, a.sample_id, a.sample_time, a.session_id, a.session_serial#, a.session_type, a.session_state, a.flags, a.user_id, a.sql_id, a.sql_opcode,a.sql_opname, a.top_level_sql_id, a.sql_child_number, a.sql_plan_hash_value, a.sql_full_plan_hash_value, a.sql_plan_line_id, a.sql_plan_operation, a.sql_plan_options, a.sql_exec_id, a.force_matching_signature, a.plsql_entry_object_id, a.plsql_entry_subprogram_id, a.plsql_object_id, a.plsql_subprogram_id, a.service_hash, a.qc_session_id,a.qc_instance_id,a.qc_session_serial#, nvl(a.event, CASE WHEN
bitand(a.time_model, power(2,19)) > 0 THEN 'CPU: IM Populate' WHEN bitand(a.time_model, power(2,20)) > 0 THEN 'CPU: IM Prepopulate' WHEN bitand(a.time_model, power(2,21)) > 0 THEN 'CPU: IM Repopulate' WHEN bitand(a.time_model, power(2,22)) > 0
THEN 'CPU: IM Trickle Repop' WHEN bitand(a.time_model, power(2,18)) > 0 THEN 'CPU: IM Query' ELSE 'CPU + Wait for CPU' END) as event, nvl(a.event_id, 1) as event_id, nvl(a.wait_class, 'CPU') as wait_class, nvl(a.wait_class_id, 9999) as wait_class_id, a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3text, a.wait_time, a.time_waited, a.xid, a.blocking_session, a.blocking_session_serial#, a.blocking_session_status, a.blocking_inst_id, a.current_obj#, a.current_file#, a.current_block#, a.top_level_call#, a.top_level_call_name, a.program, a.module, a.action, a.client_id, a.remote_instance#, a.in_connection_mgmt, a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution, a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind, a.in_cursor_close, a.in_sequence_load FROM SYS.V_$ACTIVE_SESSION_HISTORY
a, SYS.V_$INSTANCE inst, SYS.V_$CONTAINERS p WHERE 1=1 AND a.con_dbid = p.dbid(+) and :ash_enable_mem_view = 1 and :ash_enable_disk_view = 0 and a.sample_time between :ash_mem_btime and :ash_mem_etime ) UNION ALL (SELECT :local_awrdbid as dbid,
inst.instance_number, 0 as snap_id, a.con_id, a.con_dbid, nvl(p.name, 'UNKNOWN DBID ' || a.con_dbid) as pdb_name, a.sample_id, a.sample_time, a.session_id, a.session_serial#, a.session_type, a.session_state, a.flags, a.user_id, a.sql_id, a.sql_opcode,a.sql_opname, a.top_level_sql_id, a.sql_child_number, a.sql_plan_hash_value, a.sql_full_plan_hash_value, a.sql_plan_line_id, a.sql_plan_operation, a.sql_plan_options, a.sql_exec_id, a.force_matching_signature, a.plsql_entry_object_id, a.plsql_entry_subprogram_id, a.plsql_object_id, a.plsql_subprogram_id, a.service_hash,
a.qc_session_id,a.qc_instance_id,a.qc_session_serial#, nvl(a.event, CASE WHEN bitand(a.time_model, power(2,19)) > 0 THEN 'CPU: IM Populate' WHEN bitand(a.time_model, power(2,20)) > 0 THEN 'CPU: IM Prepopulate' WHEN bitand(a.time_model, power(2,21)) > 0 THEN 'CPU: IM Repopulate' WHEN bitand(a.time_model, power(2,22)) > 0 THEN 'CPU: IM Trickle Repop' WHEN bitand(a.time_model, power(2,18)) > 0 THEN 'CPU: IM Query' ELSE 'CPU + Wait for CPU' END) as event, nvl(a.event_id, 1) as event_id, nvl(a.wait_class, 'CPU') as wait_class, nvl(a.wait_class_id, 9999) as wait_class_id, a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3text, a.wait_time, a.time_waited, a.xid, a.blocking_session, a.blocking_session_serial#, a.blocking_session_status, a.blocking_inst_id, a.current_obj#, a.current_file#, a.current_block#, a.top_level_call#, a.top_level_call_name, a.program, a.module, a.action, a.client_id, a.remote_instance#, a.in_connection_mgmt, a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution, a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind, a.in_cursor_close, a.in_sequence_load FROM SYS.V_$ACTIVE_SESSION_HISTORY a, SYS.V_$INSTANCE inst, SYS.V_$CONTAINERS p WHERE 1=1 AND a.con_dbid = p.dbid(+)
and :ash_enable_mem_view = 1 and :ash_enable_disk_view = 1 and a.is_awr_sample = 'Y' and a.sample_time between :ash_mem_btime and :ash_mem_etime ) UNION ALL ( SELECT a.dbid, a.instance_number, a.snap_id, nvl(a.con_id,-1) as con_id, a.con_dbid, nvl(p.pdb_name, 'UNKNOWN DBID ' || a.con_dbid) as pdb_name, a.sample_id, a.sample_time, a.session_id, a.session_serial#, a.session_type, a.session_state, a.flags,
a.user_id, a.sql_id, a.sql_opcode, a.sql_opname, a.top_level_sql_id, a.sql_child_number, a.sql_plan_hash_value, nvl(a.sql_full_plan_hash_value,a.sql_plan_hash_value) as full_plan_hash_value, a.sql_plan_line_id, a.sql_plan_operation, a.sql_plan_options,
a.sql_exec_id, a.force_matching_signature, a.plsql_entry_object_id, a.plsql_entry_subprogram_id, a.plsql_object_id, a.plsql_subprogram_id, a.service_hash, a.qc_session_id,a.qc_instance_id,a.qc_session_serial#, nvl(a.event, CASE WHEN bitand(a.time_model, power(2,19)) > 0 THEN 'CPU: IM Populate' WHEN bitand(a.time_model, power(2,20)) > 0 THEN 'CPU: IM Prepopulate' WHEN bitand(a.time_model,
power(2,21)) > 0 THEN 'CPU: IM Repopulate' WHEN bitand(a.time_model, power(2,22)) > 0 THEN 'CPU: IM Trickle Repop' WHEN bitand(a.time_model, power(2,18)) > 0 THEN 'CPU: IM Query' ELSE 'CPU + Wait for CPU' END) as event, nvl(a.event_id, 1) as event_id,
nvl(a.wait_class, 'CPU') as wait_class, nvl(a.wait_class_id, 9999) as wait_class_id, a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3text, a.wait_time, a.time_waited, a.xid, a.blocking_session, a.blocking_session_serial#, a.blocking_session_status, a.blocking_inst_id, a.current_obj#, a.current_file#, a.current_block#, a.top_level_call#, a.top_level_call_name, a.program, a.module, a.action, a.client_id, a.remote_instance#,
a.in_connection_mgmt, a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution, a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind, a.in_cursor_close, a.in_sequence_load FROM $#CDB#$VND$ACTIVE_SESS_HISTORY a, (SELECT /*+ NO_MERGE */ dbid, con_dbid, substr(x,20) as pdb_name, instance_number FROM ( SELECT i.dbid, i.con_dbid, i.instance_number, max(to_char(i.OPEN_TIME, 'YYYY:MM:DD HH24:MI:SS') || i.PDB_NAME) as x FROM $#CDB#$VND$pdb_instance i WHERE i.con_dbid <> 0 GROUP BY i.dbid, i.con_dbid, i.instance_number)) p WHERE 1=1 AND a.con_dbid = p.con_dbid(+) AND a.dbid = p.dbid(+) AND a.instance_number = p.instance_number(+) and :ash_enable_disk_view = 1 and a.sample_time between :ash_disk_btime and
:ash_disk_etime ) ) unified_ash WHERE dbid = :dbid AND (instance_number MEMBER OF :inst_num) AND ((snap_id = 0) OR (snap_id between :bid and
:eid)) AND sample_time between :ash_begin_time and :ash_end_time AND (:ash_num_samples = :ash_num_samples) AND (:ash_sid IS NULL OR
session_id = :ash_sid OR (qc_session_id = :ash_sid AND qc_instance_id MEMBER OF :inst_num) ) AND (:ash_sql_id IS NULL OR sql_id like
:ash_sql_id) AND (:ash_wait_class IS NULL OR wait_class like :ash_wait_class) AND (:ash_service_hash IS NULL OR service_hash = :ash_service_hash) AND
(:ash_module IS NULL OR module like :ash_module) AND (:ash_action IS NULL OR action like :ash_action) AND (:ash_client_id IS NULL OR client_id
like :ash_client_id) AND (:ash_plsql_entry IS NULL OR ( (unified_ash.con_id, unified_ash.dbid, unified_ash.plsql_entry_object_id,
unified_ash.plsql_entry_subprogram_id) IN (select plsname1.con_id,wr.local_awrdbid, object_id, subprogram_id from ( select con_id, object_id,
subprogram_id, object_type, owner, object_name, procedure_name, overload from sys.cdb_procedures ) plsname1, $#CDB#$VND$wr_settings wr where
sys.dbms_ash_internal.format_plsql(plsname1.owner, plsname1.object_name, plsname1.object_type,
plsname1.procedure_name, plsname1.overload) like :ash_plsql_entry and unified_ash.con_id =
plsname1.con_id))) AND (:ash_container IS NULL OR pdb_name like :ash_container)

PL/SQL procedure successfully completed.
 
BUILD_ACTION_TAG
Builds an ASH action tag dbms_ash_internal.build_action_tag(
action_name IN VARCHAR2,
ash_count   IN NUMBER,
xtra        IN XMLTYPE)
RETURN XMLTYPE;
CREATE TABLE xtab(
xval XMLTYPE);

DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_action_tag('Testing', 42, NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;
 
BUILD_DATABASE_HEADER_TAG
Builds an ASH database header tag dbms_ash_internal.build_database_header_tag(
dbid       IN NUMBER,
dbname     IN VARCHAR2,
dbversion  IN VARCHAR2,
dbparallel IN VARCHAR2,
instid     IN NUMBER,
instname   IN VARCHAR2,
hostname   IN VARCHAR2,
xtra       IN XMLTYPE)
RETURN XMLTYPE;
CREATE TABLE xtab(xval XMLTYPE);

DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_database_header_tag(1, 'ORADATA', '18.3.0', 'Y', 2, 'oradata', 'PERRITO5', NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;

XVAL
---------------------------------------------
<database_header>
  <database_id>1</database_id>
  <database_name>ORADATA</database_name>
  <database_version>18.3.0</database_version>
  <database_parallel>Y</database_parallel>
  <instance_id>2</instance_id>
  <instance_name>oradata</instance_name>
  <host_name>PERRITO5</host_name>
</database_header>
 
BUILD_EVENT_TAG
Builds an ASH event tag dbms_ash_internal.build_event_tag(
event_name IN VARCHAR2,
wait_class IN VARCHAR2,
ash_count  IN NUMBER,
xtra       IN XMLTYPE)
RETURN XMLTYPE;
CREATE TABLE xtab(
xval XMLTYPE);

SELECT DISTINCT event
FROM v$active_session_history
ORDER BY 1;

DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_event_tag('oracle thread bootstrap', 'other', 42, NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;
 
BUILD_SERVICE_MODULE_TAG
Builds an ASH service module tag dbms_ash_internal.build_service_module_tag(
service_hash IN NUMBER,
service_name IN VARCHAR2,
module_name  IN VARCHAR2,
ash_count    IN NUMBER,
xtra         IN XMLTYPE);
RETURN XMLTYPE;
CREATE TABLE xtab(
xval XMLTYPE);

SELECT name_hash, name
FROM v$active_services;
ORDER BY 1;

DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_service_module_tag(2477889254, 'pdbdev', 'TEST_MOD',42, NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;
 
BUILD_SESSION_TAG
Builds an ASH session tag dbms_ash_internal.build_session_tag(
session_id           IN NUMBER,
session_serial       IN NUMBER,
user_name            IN VARCHAR2,
program_name         IN VARCHAR2,
ash_num_transactions IN NUMBER,
ash_count            IN NUMBER,
xtra                 IN XMLTYPE)
RETURN XMLTYPE;
CREATE TABLE xtab(
xval XMLTYPE);

SELECT sid, serial#
FROM v$session
WHERE sid IN (
  SELECT sid
  FROM v$mystat
  WHERE rownum = 1);

  SID    SERIAL#
----- ----------
  368        131


DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_session_tag(368, 131, 'DAMORGAN', 'MLIB', 1, 1, NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;
 
BUILD_SQL_TAG
Builds an ASH  SQL tag dbms_ash_internal.build_sql_tag(
sql_id             IN VARCHAR2,
planhash           IN NUMBER,
ash_num_executions IN NUMBER,
ash_count          IN NUMBER,
xtra               IN XMLTYPE)
RETURN XMLTYPE;
CREATE TABLE xtab(xval XMLTYPE);

SELECT sql_id, plan_hash_value
FROM v$sqlarea
WHERE rownum = 1;

SQL_ID        PLAN_HASH_VALUE
------------- ---------------
3kv05jq710003       457189206


DECLARE
 xOut XMLTYPE;
BEGIN
  xOut := dbms_ash_internal.build_sql_tag('3kv05jq710003', 457189206, 63, 42, NULL);
  INSERT INTO xtab VALUES (xOut);
END;
/

SELECT * FROM xtab;
 
FORMAT_PLSQL
Undocumented dbms_ash_internal.format_plsql
owner           IN VARCHAR2,
object_name     IN VARCHAR2,
object_type     IN VARCHAR2,
subprogram_name IN VARCHAR2,
overload        IN VARCHAR2)
RETURN VARCHAR2;
DECLARE
 vOut VARCHAR2(8192);
BEGIN
  vOut := dbms_ash_internal.format_plsql('SYS', 'OWA_UTIL', 'PACKAGE', 'WHO_CALLED_ME', NULL);
  dbms_output.put_line(vOut);

  vOut := dbms_ash_internal.format_plsql('SYS', 'DBMS_SYS_ERROR', 'PACKAGE', 'RAISE_SYSTEM_ERROR', 5);
  dbms_output.put_line(vOut);
END;
/
SYS.OWA_UTIL.WHO_CALLED_ME
SYS.DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR#5

PL/SQL procedure successfully completed.
 
GETPACKAGEVERSION
Undocumented dbms_ash_internal.getPackageVersion RETURN NUMBER;
SELECT dbms_ash_internal.getPackageVersion
FROM dual;

GETPACKAGEVERSION
-----------------
                1
 
GET_ASH_HEADING
Undocumented dbms_ash_internal.get_ash_heading RETURN VARCHAR2;
SELECT dbms_ash_internal.get_ash_heading
FROM dual;

GET_ASH_HEADING
----------------
( to )
 
GET_BLKSID_ACTIVE
Undocumented dbms_ash_internal.get_blksid_active(
blksid    IN NUMBER,
blksidsrl IN NUMBER,
blkinstid IN NUMBER,
maxlen    IN NUMBER)
RETURN VARCHAR2;
TBD
 
GET_BLKSID_DETAILS
Undocumented dbms_ash_internal.get_blksid_details(
blksid    IN NUMBER,
blksidsrl IN NUMBER,
blkinstid IN NUMBER);
TBD
 
GET_BLKSID_PROGRAM
Undocumented dbms_ash_internal.get_blksid_program(
blksid    IN NUMBER,
blksidsrl IN NUMBER,
blkinstid IN NUMBER,
maxlen    IN NUMBER)
RETURN VARCHAR2;
TBD
 
GET_BLKSID_USER
Undocumented dbms_ash_internal.get_blksid_user(
blksid    IN NUMBER,
blksidsrl IN NUMBER,
blkinstid IN NUMBER)
RETURN VARCHAR2;
TBD
 
GET_BLKSID_XIDS
Undocumented dbms_ash_internal.get_blksid_xids(
blksid    IN NUMBER,
blksidsrl IN NUMBER,
blkinstid IN NUMBER)
RETURN NUMBER;
TBD
 
GET_BLK_STR
Undocumented dbms_ash_internal.get_blk_str(
sid    IN NUMBER,
srl    IN NUMBER,
instid IN NUMBER)
RETURN VARCHAR2;
SELECT sid, serial#
FROM v$session
WHERE sid IN (
  SELECT sid
  FROM v$mystat
  WHERE rownum = 1);

  SID    SERIAL#
----- ----------
  368        131


DECLARE
 vOut VARCHAR2(128);
BEGIN
  vOut := dbms_ash_internal.get_blk_str(368, 131, 1);
  dbms_output.put_line(vOut);
END;
/
 
GET_CPUINFO_XML
Returns the number of cores and cpus in the form of XML

The result, at right, is incorrect as the laptop on which it was run has 1 socket and 2 cores so at face value this function should not be trusted
dbms_ash_internal.get_cpuinfo_xml (
CONTEXT  IN dbms_ash_internal.contexttype,
SHOW_SQL IN VARCHAR2)
RETURN XMLTYPE;
SELECT dbms_ash_internal.get_cpuinfo_xml FROM dual;

GET_CPUINFO_XML
---------------------------------------------------------------------
<cpu_info><host name="PERRITO5" num_cores="4" num_cpus="2">
<instance id="1"></instance></host></cpu_info>
 
GET_LATCH_NAME
Returns the ASH report formatted name of a latch dbms_ash_internal.get_latch_name(lnum IN NUMBER) RETURN VARCHAR2;
SELECT dbms_ash_internal.get_latch_name(99)
FROM dual;

DBMS_ASH_INTERNAL.GET_LATCH_NAME(99)
------------------------------------
latch number: 99
 
GET_OBJ_NAME
Returns the ASH report formatted name of an object and its type dbms_ash_internal.get_obj_name(
owner IN VARCHAR2,
obj   IN VARCHAR2,
sub   IN VARCHAR2,
type  IN VARCHAR2)
RETURN VARCHAR2;
DECLARE
 vOut VARCHAR2(128);
BEGIN
  vOut := dbms_ash_internal.get_obj_name(USER, 'UTL_FILE', NULL, 'PACKAGE');
  dbms_output.put_line(vOut);
END;
/
SYS.UTL_FILE (PACKAGE)
 
GET_PLSQL_NAME
Given a DBID, object_id, and subprogram_id returns the owner and name of an object for the ASH report dbms_ash_internal.get_plsql_name(
con_id        IN NUMBER,
dbid          IN NUMBER,
object_id     IN NUMBER,
subprogram_id IN NUMBER)
RETURN VARCHAR2;
show con_id

SELECT dbid FROM v$database;

      DBID
----------
1929260586


SELECT object_id, subprogram_id
FROM dba_procedures
WHERE ROWNUM = 1;

OBJECT_ID  SUBPROGRAM_ID
---------- -------------
      6375             1


DECLARE
 vOut VARCHAR2(128);
BEGIN
  vOut := dbms_ash_internal.get_plsql_name(1, 1929260586, 6375, 1);
  dbms_output.put_line(vOut);
END;
/
 
GET_SID_ACTIVE
Undocumented dbms_ash_internal.get_sid_active(
num_samples IN NUMBER,
maxlen      IN NUMBER)
RETURN VARCHAR2;
DECLARE
 vOut VARCHAR2(30);
BEGIN
  vOut := dbms_ash_internal.get_sid_active(368, 30);
  dbms_output.put_line(vOut);
END;
/
368/ [%]
 
GET_SID_STR
Undocumented dbms_ash_internal.get_sid_str(
sid IN NUMBER,
srl IN NUMBER)
RETURN VARCHAR2;
DECLARE
 vOut VARCHAR2(30);
BEGIN
  vOut := dbms_ash_internal.get_sid_str(368, 131);
  dbms_output.put_line(vOut);
END;
/
368/ 131
 
GET_SLOT_WIDTH
Undocumented dbms_ash_internal.get_slot_width(usedisk IN NUMBER) RETURN NUMBER;
DECLARE
 vNum NUMBER;
BEGIN
  FOR i IN -1000 .. 10000 LOOP
    vNum := dbms_ash_internal.get_slot_width(i);
    IF vNum IS NOT NULL THEN
      dbms_output.put_line(TO_CHAR(vNum));
    END IF;
  END LOOP;
END;
/
-- runs but no output
 
GET_SQLTEXT
Undocumented dbms_ash_internal.get_sqltext(
sqlid IN VARCHAR2,
chnum IN NUMBER)
RETURN CLOB;
conn sys@pdbdev as sysdba

SELECT /* DEMO1 */ COUNT(*)
FROM dba_all_tables;

SELECT sa.sql_id, substr(sa.sql_text,1,20) SQLDML, sp.child_number
FROM v$sqlarea sa, v$sql_plan sp
WHERE sa.sql_id = sp.sql_id
AND sa.sql_text LIKE '%DEMO1%';

-- take a SQL_ID from the above SELECT and plug it in
DECLARE
 cOut CLOB;
BEGIN
  cOut := dbms_ash_internal.get_sqltext('1kqp9m8y4vjv6', 0);
  dbms_output.put_line(cOut);
END;
/
 
GET_SQL_PLAN_INFO
Undocumented dbms_ash_internal.get_sql_plan_info(
line_id   IN NUMBER,
operation IN VARCHAR2,
options   IN VARCHAR2)
RETURN VARCHAR2;
TBD
 
GET_SQL_PLAN_PERC
Undocumented dbms_ash_internal.get_sql_plan_perc(
sql_plan_hash_value IN VARCHAR2,
perc                IN NUMBER)
RETURN NUMBER;
SELECT dbms_ash_internal.get_sql_plan_perc('1120054736', 66)
FROM dual;

DBMS_ASH_INTERNAL.GET_SQL_PLAN_PERC('1120054736',66)
----------------------------------------------------
                                                  66


-- looks remarkably useless or broken as it always returns the "perc" value unchanged
 
GET_USER_NAME
Undocumented dbms_ash_internal.get_user_name(uid IN NUMBER) RETURN VARCHAR2;
SELECT user#, name
FROM user$
ORDER BY 1;

SELECT dbms_ash_internal.get_user_name(62)
FROM dual;

DBMS_ASH_INTERNAL.GET_USER_NAME(62)
------------------------------------
UserID: 62


-- seems to return a perfectly predictable string rather than a user name
 
INITIALIZE
Undocumented dbms_ash_internal.initialize(
dbid     IN NUMBER,
instnum  IN awrrpt_instance_list_type,
bsnap    IN NUMBER,
esnap    IN NUMBER,
btime    IN DATE,
etime    IN DATE,
nsmpls   IN NUMBER,
dfltr    IN NUMBER,
swidth   IN NUMBER,
m_en     IN NUMBER,
m_btime  IN DATE,
m_etime  IN DATE,
d_en     IN NUMBER
d_btime  IN DATE,
d_etime  IN DATE,
data_src IN NUMBER);
TBD
 
IN_MEMORY_ASH_VIEW_SQL
Undocumented dbms_ash_internal.in_memory_ash_view_sql RETURN VARCHAR2;
SELECT dbms_ash_internal.in_memory_ash_view_sql
FROM dual;

IN_MEMORY_ASH_VIEW_SQL
--------------------------------------------------------------------------------
SELECT :local_awrdbid as dbid, inst.instance_number, 0 as snap_id,
       a.con_id, a.con_dbid, nvl(p.name, 'UNKNOWN DBID ' || a.con_dbid) as pdb_name,
       a.sample_id, a.sample_time, a.session_id, a.session_serial#, a.session_type,
       a.session_state, a.flags, a.user_id, a.sql_id, a.sql_opcode,a.sql_opname,
       a.top_level_sql_id, a.sql_child_number, a.sql_plan_hash_value,
       a.sql_full_plan_hash_value, a.sql_plan_line_id, a.sql_plan_operation,
       a.sql_plan_options, a.sql_exec_id, a.force_matching_signature,
       a.plsql_entry_object_id, a.plsql_entry_subprogram_id, a.plsql_object_id,
       a.plsql_subprogram_id, a.service_hash, a.qc_session_id, a.qc_instance_id,
       a.qc_session_serial#, nvl(a.event, CASE WHEN bitand(a.time_model,
       power(2,19)) > 0 THEN 'CPU: IM Populate' WHEN bitand(a.time_model, power(2,20)) >
       0 THEN 'CPU: IM Prepopulate' WHEN bitand(a.time_model, power(2,21)) > 0 THEN
       'CPU: IM Repopulate' WHEN bitand(a.time_model, power(2,22)) > 0 THEN 'CPU: IM
       Trickle Repop' WHEN bitand (a.time_model, power(2,18)) > 0 THEN 'CPU: IM Query'
       ELSE 'CPU + Wait for CPU' END) as event, nvl(a.event_id, 1) as event_id,
       nvl(a.wait_class, 'CPU') as wait_class, nvl(a.wait_class_id, 9999) as
       wait_class_id, a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3text,
       a.wait_time, a.time_waited, a.xid, a.blocking_session, a.blocking_session_serial#,
       a.blocking_session_status, a.blocking_inst_id, a.current_obj#, a.current_file#,
       a.current_block#, a.top_level_call#, a.top_level_call_name, a.program,
       a.module, a.action, a.client_id, a.remote_instance#, a.in_connection_mgmt,
       a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution,
       a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind,
       a.in_cursor_close, a.in_sequence_load
FROM SYS.V_$ACTIVE_SESSION_HISTORY a, SYS.V_$INSTANCE inst, SYS.V_$CONTAINERS p
WHERE 1=1 AND a.con_dbid = p.dbid(+)
 
ON_DISK_ASH_VIEW_SQL
Undocumented dbms_ash_internal.on_disk_ash_view_sql RETURN VARCHAR2;
SELECT dbms_ash_internal.on_disk_ash_view_sql
FROM dual;

ON_DISK_ASH_VIEW_SQL
--------------------------------------------------------------------------------
SELECT a.dbid, a.instance_number, a.snap_id, nvl(a.con_id,-1) as con_id,
a.con_dbid, nvl(p.pdb_name, 'UNKNOWN DBID ' || a.con_dbid) as
pdb_name, a.sample_id, a.sample_time, a.session_id, a.session_seri
al#, a.session_type, a.session_state, a.flags, a.user_id,
a.sql_id, a.sql_opcode, a.sql_opname, a.top_level_sql_id, a.
sql_child_number, a.sql_plan_hash_value, nvl(a.sql_full_plan_hash_value,a
.sql_plan_hash_value) as full_plan_hash_value, a.sql_plan_line_id,
a.sql_plan_operation, a.sql_plan_options, a.sql_exec_id, a.
force_matching_signature, a.plsql_entry_object_id, a.plsql_entry_subprogr
am_id, a.plsql_object_id, a.plsql_subprogram_id, a.service_hash,
a.qc_session_id,a.qc_instance_id,a.qc_session_serial#, nvl(a.event,
CASE WHEN bitand(a.time_model, power(2,19)) > 0 THEN
'CPU: IM Populate' WHEN bitand(a.time_model, power(2,20))
> 0 THEN 'CPU: IM Prepopulate' WHEN bitand(
a.time_model, power(2,21)) > 0 THEN 'CPU: IM Repopulate'
WHEN bitand(a.time_model, power(2,22)) > 0 THEN 'C
PU: IM Trickle Repop' WHEN bitand(a.time_model, power(2,18)) >
0 THEN 'CPU: IM Query' ELSE 'CPU + Wait fo
r CPU' END) as event, nvl(a.event_id, 1) as event_id, nvl(a.wait_c
lass, 'CPU') as wait_class, nvl(a.wait_class_id, 9999) as wait_class_id,
a.seq#, a.p1, a.p1text, a.p2, a.p2text, a.p3, a.p3te
xt, a.wait_time, a.time_waited, a.xid, a.blocking_session,
a.blocking_session_serial#, a.blocking_session_status, a.blocking_inst_id
, a.current_obj#, a.current_file#, a.current_block#, a.top_level_c
all#, a.top_level_call_name, a.program, a.module, a.action, a.client_id,
a.remote_instance#, a.in_connection_mgmt, a.in_parse,
a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution,
a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution,
a.in_bind, a.in_cursor_close, a.in_sequence_load FROM $#CDB#
$VND$ACTIVE_SESS_HISTORY a, (SELECT dbid, con_dbid, substr(x
,20) as pdb_name, instance_number FROM ( SELECT i.dbid,
i.con_dbid, i.instance_number, ma
x(to_char(i.OPEN_TIME, 'YYYY:MM:DD HH24:MI:SS')
|| i.PDB_NAME) as x FROM $#CDB#$VND$pdb_
instance i, $#CDB#$VND$snapshot s WHERE s.dbid = i.dbid
AND s.instance_number = i.instance_number AND i.startup
_time >= s.startup_time AND i.con_dbid <> 0 GROUP
BY i.dbid, i.con_dbid, i.instance_number)) p WHERE 1=1
AND a.con_dbid = p.con_dbid(+) AND a.dbid = p.dbid(+) AND a.instance_numb
er = p.instance_number(+);
 
REPORT_ASHVIEWER_XML
Undocumented dbms_ash_internal.report_ashviewer_xml(
report_reference IN VARCHAR2,
dbid             IN NUMBER,
inst_id          IN NUMBER,
begin_time       IN VARCHAR2,
end_time         IN VARCHAR2,
report_level     IN VARCHAR2,
filter_list      IN VARCHAR2,
time_since_sec   IN VARCHAR2,
show_sql         IN VARCHAR2,
parent_report    IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
RUNREPORT
Undocumented dbms_ash_internal.runreport(
dbid             IN  NUMBER,
inst_id          IN  NUMBER,
begin_time       IN  VARCHAR2,
end_time         IN  VARCHAR2,
report_level     IN  VARCHAR2,
filter_list      IN  VARCHAR2,
out_xml          OUT CLOB,
report_reference IN  VARCHAR2,
time_since_sec   IN  VARCHAR2,
show_sql         IN  VARCHAR2,
parent_report    IN  VARCHAR2);
TBD
 
SAMPLE_TIME_TO_ID
Undocumented dbms_ash_internal.sample_time_to_id(
stime   IN DATE,
usedisk IN NUMBER)
RETURN NUMBER;
TBD
 
SHRINK_STRING
Undocumented dbms_ash_internal.shrink_string(
name IN VARCHAR2,
len  IN NUMBER)
RETURN VARCHAR2;
SELECT dbms_ash_internal.shrink_string('Next Generation Database', 30)
FROM dual;

DBMS_ASH_INTERNAL.SHRINK_STRING('NEXTGENERATIONDATABASE',30)
-------------------------------------------------------------
Next Generation Database
 
SLOT_ID_TO_TIME
Undocumented dbms_ash_internal.slot_id_to_time(
slotid  IN NUMBER,
usedisk IN NUMBER,
frmt    IN VARCHAR2,
collen  IN NUMBER)
RETURN VARCHAR2;
TBD
 
UNIFIED_DBA_FILES
Returns a formatted query of database files for a DBID dbms_ash_internal.unified_dba_files RETURN VARCHAR2;
SELECT dbms_ash_internal.unified_dba_files
FROM dual;

UNIFIED_DBA_FILES
-------------------------------------------------------------------------
SELECT file# as file_id, max(filename) as file_name, max(tsname) as
       tablespace_name
FROM $#CDB#$VND$datafile WHERE dbid = :dbid GROUP BY file#
 
UNIFIED_DBA_OBJECTS
Returns a formatted query of database objects for a DBID dbms_ash_internal.unified_dba_objects RETURN VARCHAR2;
SELECT dbms_ash_internal.unified_dba_objects
FROM dual;

UNIFIED_DBA_OBJECTS
------------------------------------------------------------
SELECT o.con_id, o.owner, o.object_id, o.object_name, o.subobject_name,
       o.object_type, 'N/A' as tablespace_name
FROM cdb_objects o, $#CDB#$VND$wr_settings d
WHERE d.local_awrdbid = :dbid
UNION ALL
SELECT nvl(o.con_id,-1) as con_id, max(owner) as owner, obj# as object_id,
       max(object_name) as object_name,
       max(subobject_name) as subobject_name,
       max(object_type) as object_type,
       max(tablespace_name) as tablespace_name
FROM $#CDB#$VND$seg_stat_obj o, $#CDB#$VND$wr_settings d
WHERE o.dbid = :dbid and d.local_awrdbid <> :dbid
GROUP BY obj#, o.con_id
 
UNIFIED_PLSQL_SUBPROGRAMS
Returns a formatted query for PL/SQL subprograms dbms_ash_internal.unified_plsql_subprograms RETURN VARCHAR2;
SELECT dbms_ash_internal.unified_plsql_subprograms
FROM dual;

UNIFIED_PLSQL_SUBPROGRAMS
-----------------------------------------------------------------------
( select con_id, object_id, subprogram_id, object_type, owner, object_n
ame, procedure_name, overload from sys.cdb_procedures )
 
UNIFIED_SERVICE_NAMES
Returns SQL service hash and name for services dbms_ash_internal.unified_service_names RETURN VARCHAR2;
SELECT dbms_ash_internal.unified_service_names
FROM dual;

UNIFIED_SERVICE_NAMES
--------------------------------------------------------------------------------
SELECT name_hash as service_hash, name as service FROM SYS.V_$ACTIVE_SERVICES
UNION ALL SELECT service_name_hash as service_hash, service_name as service FROM
$#CDB#$VND$SERVICE_NAME WHERE dbid = :dbid AND service_name_hash not in (
select name_hash from SYS.V_$ACTIVE_SERVICES)
 
UNIFIED_SQLSTAT
Returns SQL for an inline view returning SQL_ID and FORCE_MATCHING_SIGNATURE from cdb_hist_sqlstat dbms_ash_internal.unified_sq_stat RETURN VARCHAR2;
SELECT dbms_ash_internal.unified_sqlstat
FROM dual;

UNIFIED_SQLSTAT
----------------------------------------------------------------------------
(SELECT s.sql_id, s.force_matching_signature FROM $#CDB#$VND$sqlstat s WHERE
dbid = :dbid )


SELECT sql_id, force_matching_signature
FROM cdb_hist_sqlstat;

-- the query, after conversion to valid syntax  returns 92,562 rows
-- from a non-production laptop.

Related Topics
ASH
Built-in Functions
Built-in Packages
DBMS_ASH
Troubleshooting
What's New In 21c
What's New In 23c

Morgan's Library Page Footer
This site is maintained by Dan Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2023 Daniel A. Morgan All Rights Reserved
  DBSecWorx