Search notes:

Oracle: DBA_HIST_ACTIVE_SESS_HISTORY

dba_hist_active_sess_history selects from the view awr_cdb_active_sess_history which in turns selects from wrm$_snapshot, wrh$_active_session_history and wrh$_event_name.
select
   case when vdb.dbid = ash.dbid then '*' end e,
   ash.dbid,
   ash.con_dbid,
   ash.con_id,
   to_char(min(ash.sample_time), 'yyyy-mm-dd hh24:mi')      min_t,
   to_char(max(ash.sample_time), 'yyyy-mm-dd hh24:mi')      max_t,
   count(*)                                                 cnt
from
   v$database                    vdb cross join
   dba_hist_active_sess_history  ash
group by
   vdb.dbid,
   ash.dbid,
   ash.con_dbid,
   ash.con_id
;

Which program are users using

The following query returns the programs with which different users connect to the database:
select
   count(*)           cnt,
-- regexp_replace(ash.program, 'oracle@(.*) \((P|J)\d..\)', 'oracle@\1 (\2...)')   program,
   ash.program,
   ash.module,
   usr.username,
   ash.user_id
from
   dba_hist_active_sess_history ash                                           left join
   dba_users                    usr on ash.user_id = usr.user_id
where
   usr.oracle_maintained = 'N'  and
   not regexp_like(ash.program, 'oracle@(.*) \((P|J)\d..\)')
group by
-- regexp_replace(ash.program, 'oracle@(.*) \((P|J)\d..\)', 'oracle@\1 (\2...)'),
   ash.program,
   ash.module,
   usr.username,
   ash.user_id
order by
   usr.username
;
On the current system, it returned values such as MSACCESS.EXE, plsqldev.exe, EXCEL.EXE, ISServerExec.exe, sqlplus.exe, sqldeveloper.exe, sqldeveloper64W.exe, w3wp.exe, ReportingServicesService.exe, python.exe, JDBC Thin Client, spssengine.exe, nunit-console.exe, Microsoft.Mashup.Container.NetFX40.exe etc.

Big query

select
   ash.sample_id,
-- ash.sample_time_utc,
-- ash.snap_id,                       -- join with dba_hist_ash_snapshot
   ash.sample_time,                 -- compare with sample_time_utc
-- round( (ash.sql_exec_start - cast(ash.sample_time as date)) * 24 * 60 * 60) sql_running_since_approx_s,
   round( ( cast(ash.sample_time as date) - ash.sql_exec_start ) * 24 * 60 * 60) running_s, -- approximate(1) running time of sql UNTIL snapshot
   --
-- ash.user_id,
   usr.username,
   --
   ash.event,--   ash.event_id,
   ash.p1text, ash.p1,
   ash.p2text, ash.p2,
   ash.p3text, ash.p3,  
   ash.module,
-- ash.sql_id,
   sql.sql_text,
   ash.action,
   ash.blocking_hangchain_info,
   --
   ash.blocking_inst_id,
   ash.blocking_session,
   ash.blocking_session_serial#,
   ash.blocking_session_status,
   --
   ash.capture_overhead,
   ash.client_id,
   --
   ash.dbid,
   ash.con_dbid,
   ash.con_id,
   --
   ash.current_block#, ash.current_file#, ash.current_obj#, ash.current_row#,
   --
   ash.dbop_exec_id,
   ash.dbop_name,
   ash.dbreplay_call_counter,
   ash.dbreplay_file_id,
   ash.delta_interconnect_io_bytes,
   ash.delta_read_io_bytes,
   ash.delta_read_io_requests,
   ash.delta_time,
   ash.delta_write_io_bytes,
   ash.delta_write_io_requests,
   ash.ecid,
 
   ash.flags,
   ash.force_matching_signature,
   ash.in_bind,
   ash.in_connection_mgmt,
   ash.in_cursor_close,
   ash.in_hard_parse,
   ash.in_inmemory_populate,
   ash.in_inmemory_prepopulate,
   ash.in_inmemory_query,
   ash.in_inmemory_repopulate,
   ash.in_inmemory_trepopulate,
   ash.in_java_execution,
   ash.in_parse,
   --
   ash.in_plsql_compilation,
   ash.in_plsql_execution,
   ash.in_plsql_rpc,
   --
   ash.in_sequence_load,
   ash.in_sql_execution,
   ash.in_tablespace_encryption,
   ash.instance_number,
   ash.is_captured,
   ash.is_replay_sync_token_holder,
   ash.is_replayed,
   ash.is_sqlid_current,
   ash.machine,
   --
   ash.pga_allocated,
   --
   ash.plsql_entry_object_id,
   ash.plsql_entry_subprogram_id,
   ash.plsql_object_id,
   ash.plsql_subprogram_id,
   --
   ash.port,
   ash.program,
   ash.px_flags,
   ash.qc_instance_id,
   ash.qc_session_id,
   ash.qc_session_serial#,
   ash.remote_instance#,
   ash.replay_overhead,
   ash.seq#,
   ash.service_hash,
   ash.session_id,
   ash.session_serial#,
   ash.session_state,
   ash.session_type,
   ash.sql_adaptive_plan_resolved,
   --
   ash.sql_child_number,
   ash.sql_exec_id,
   ash.sql_full_plan_hash_value,
   --
   ash.sql_opcode,
   ash.sql_opname,
   ash.sql_plan_hash_value,
   ash.sql_plan_line_id,
   ash.sql_plan_operation,
   ash.sql_plan_options,
   ash.temp_space_allocated,
   ash.time_model,
   ash.time_waited,
   ash.tm_delta_cpu_time,
   ash.tm_delta_db_time,
   ash.tm_delta_time,
   ash.top_level_call#,
   ash.top_level_call_name,
   ash.top_level_sql_id,
   ash.top_level_sql_opcode,
   ash.usecs_per_row,
   ash.wait_class,
   ash.wait_class_id,
   ash.wait_time,
   ash.xid,
   --
   ash.consumer_group_id
from
   sys.dba_hist_active_sess_history             ash                                    left join
   sys.dba_hist_sqltext                         sql on ash.sql_id  = sql.sql_id and
                                                       ash.dbid    = sql.dbid          left join
   sys.dba_users                                usr on ash.user_id = usr.user_id 
-- where
--    ash.sample_time between to_date('2024-02-26 14:00:30', 'yyyy-mm-dd hh24:mi:ss') and
--                            to_date('2024-02-26 14:00:40', 'yyyy-mm-dd hh24:mi:ss')
--  
order by
   ash.sample_time desc
;

Counts per sample

select
   ash.sample_id,
   to_char(ash.sample_time, 'yyyy-mm-dd hh24:mi:ss'    )    tm,
   count(*)                                                 cnt,
   max(count(*)) over ()                                    max_cnt,
   max(to_char(ash.sample_time, 'yyyy-mm-dd hh24:mi:ss')) 
       keep (dense_rank first order by count(*) desc)    
       over ()                                              max_cnt_ts
from
   v$database                   vdb                         join
   dba_hist_active_sess_history ash on vdb.dbid = ash.dbid
group by
   ash.sample_id,
   ash.sample_time
order by
   ash.sample_time desc;

See also

Oracle Manageability Monitor Lite Process (MMNL)
dba_hist_ash_snapshot, dba_hist_snapshot
v$active_session_history
Query duration of SQL statements
Query start and end of sessions.
Joining dba_hist_active_sess_history with dba_users.
Query the count of sessions and display them in an Excel chart.
dba_hist* views

Index

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php:78 Stack trace: #0 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(78): PDOStatement->execute(Array) #1 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(30): insert_webrequest_('/notes/developm...', 1745560994, '18.223.172.149', 'Mozilla/5.0 App...', NULL) #2 /home/httpd/vhosts/renenyffenegger.ch/httpsdocs/notes/development/databases/Oracle/installed/data-dictionary/hist/active_sess_history/index(265): insert_webrequest() #3 {main} thrown in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php on line 78