Files
oracle/tpt/segcachedx.sql
2026-03-12 21:23:47 +01:00

77 lines
2.1 KiB
SQL

-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
col o_owner heading owner for a25
col o_object_name heading OBJECT_NAME for a30
col o_subobject_name heading SUBOBJECT_NAME FOR a30
col o_object_type heading OBJECT_TYPE for a18
col o_status heading STATUS for a9
prompt Display number of buffered blocks of a segment using X$KCBOQH for table &1
-- done: currently buggy when data object ID doesn't match object Id (due to truncate or alter table move / rebuild)
-- todo: currently doesn't join properly to undo segment info
select * from (
select
ROUND(SUM(x.num_buf * ts.blocksize) / 1024 / 1024 , 2) mb_buf,
SUM(x.num_buf) num_buf,
o.owner o_owner,
o.object_name o_object_name,
o.subobject_name o_subobject_name,
ts.name tablespace_name,
o.object_type o_object_type,
o.status o_status,
o.object_id oid,
o.data_object_id d_oid,
o.created,
o.last_ddl_time
from
dba_objects o
, x$kcboqh x
, dba_segments s
-- , sys_objects so
, ts$ ts
where
x.obj# = o.data_object_id
--and o.data_object_id = so.object_id
and o.owner = s.owner
and o.object_name = s.segment_name
and SYS_OP_MAP_NONNULL(o.subobject_name) = SYS_OP_MAP_NONNULL(s.partition_name)
and s.tablespace_name = ts.name
--and x.ts# = ts.ts#
and
upper(object_name) LIKE
upper(CASE
WHEN INSTR('&1','.') > 0 THEN
SUBSTR('&1',INSTR('&1','.')+1)
ELSE
'&1'
END
)
AND o.owner LIKE
CASE WHEN INSTR('&1','.') > 0 THEN
UPPER(SUBSTR('&1',1,INSTR('&1','.')-1))
ELSE
user
END
group by
o.owner
, o.object_name
, o.subobject_name
, ts.name
, o.object_type
, o.status
, o.object_id
, data_object_id
, o.created
, o.last_ddl_time
order by
mb_buf desc
-- o_object_name,
-- o_owner,
-- o_object_type
)
where
rownum <= 20
/