var h varchar2(30)
begin :h := 'XXXX'; end; ---- table name here!!!!
/
set linesize 300 pagesize 300
col TABLE_NAME for a20
select
table_name,
partitioned, -- 'YES'
num_rows,
blocks,
LAST_ANALYZED
from
dba_tables
where 1=1
-- owner = 'XXX' and
and table_name = :h
;
col SUBOBJECT_NAME for a20
col OBJECT_NAME for a20
col OWNER for a20
SELECT o.owner
, o.object_name
, o.subobject_name
, tcp.part# AS partition_number
, DENSE_RANK() OVER (PARTITION BY o.object_name ORDER BY tcp.part#) AS dense_rank_by_object
, DENSE_RANK() OVER (PARTITION BY o.owner, o.object_name ORDER BY tcp.part#) AS dense_rank_by_owner_object
FROM dba_objects o
JOIN sys.tabcompart$ tcp
ON tcp.obj# = o.object_id
WHERE 1=1
--and o.owner IN ('U1','U2')
AND o.object_name = :h
ORDER BY 1,2,3;
col TABLE_NAME for a20
SELECT S.TABLE_NAME, S.TABLESPACE_NAME,COUNT(DISTINCT S.PARTITION_NAME) "num partitions", COUNT(DISTINCT S.SUBPARTITION_NAME) "num subpartitions"
FROM DBA_TAB_SUBPARTITIONS S
WHERE S.TABLE_NAME=:h
GROUP BY S.TABLE_NAME, S.TABLESPACE_NAME;
col SUBPARTITION_NAME for a20
col PARTITION_NAME for a20
SELECT P.PARTITION_NAME, P.SUBPARTITION_NAME, S.SEGMENT_TYPE,S.TABLESPACE_NAME,P.COMPRESSION,P.COMPRESS_FOR, P.NUM_ROWS, P.LAST_ANALYZED,ROUND(S.BYTES/1024/1024/1024,1) "gb"
FROM DBA_SEGMENTS S JOIN DBA_TAB_SUBPARTITIONS P
ON (S.SEGMENT_NAME = P.TABLE_NAME)
WHERE S.SEGMENT_NAME=:h
--AND S.OWNER = 'SCOTT'
AND S.PARTITION_NAME = P.SUBPARTITION_NAME
ORDER BY P.PARTITION_NAME, P.SUBPARTITION_NAME, S.BYTES DESC;
col SEGMENT_NAME for a20
col "Subpartition name" for a20
SELECT S.SEGMENT_NAME,S.PARTITION_NAME "Subpartition name", S.SEGMENT_TYPE,S.TABLESPACE_NAME,P.COMPRESSION,P.COMPRESS_FOR, P.NUM_ROWS, P.LAST_ANALYZED,ROUND(S.BYTES/1024/1024/1024,1) "gb"
FROM DBA_SEGMENTS S JOIN DBA_TAB_SUBPARTITIONS P
ON (S.SEGMENT_NAME = P.TABLE_NAME)
WHERE S.SEGMENT_NAME=:h
--AND S.OWNER = 'SCOTT'
AND S.PARTITION_NAME = P.SUBPARTITION_NAME
--AND P.PARTITION_NAME ='SYS_P14675'
ORDER BY S.BYTES DESC;
select
table_name,
composite,
partition_position,
partition_name,
subpartition_count,
high_value,
num_rows,
blocks
high_value_length
from
dba_tab_partitions
where 1=1
-- table_owner = 'RENE'
and table_name = :h
;
alter session set nls_date_format='dd-mm-yyyy hh24:mi';
set linesize 300 pagesize 300
col PARTITION_NAME for a20
col SUBPARTITION_NAME for a20
col TABPAR_HIGH_VALUE for a20
col SUBPAR_HIGH_VALUE for a20
col TABPAR_HIGH_VALUE for a45
col TABLE_NAME for a20
select
subpar.table_name,
subpar.partition_name,
subpar.subpartition_name,
-- tabpar.high_value tabpar_high_value,
-- subpar.high_value subpar_high_value,
-- subpar.num_rows subpar_num_rows,
-- subpar.blocks subpar_blocks,
-- tabpar.high_value_length tabpar_high_value_length,
-- subpar.high_value_length subpar_high_value_length,
subpar.partition_position,
subpar.subpartition_position,
tabpar.LAST_ANALYZED,
subpar.LAST_ANALYZED
from
dba_tab_partitions tabpar left join
dba_tab_subpartitions subpar on
tabpar.table_owner = subpar.table_owner and
tabpar.table_name = subpar.table_name and
tabpar.partition_name = subpar.partition_name
where 1=1
--and subpar.table_owner = 'XXX'
and subpar.table_name = :h
order by subpar.partition_position, subpar.subpartition_position;
set linesize 400
col OWNER for a20
col TABLE_NAME for a20
col COL_PART_NAM for a20
col INTERVAL_SUBPARTITION for a20
col COL_SUBPART_NAM for a20
col INTERVAL for a26
select
tab.owner,
tab.table_name,
tab.num_rows,
tap.partitioning_type,
tap.subpartitioning_type,
pkc.column_name col_part_nam,
pkc.column_position col_part_pos,
tap.interval,
psc.column_name col_subpart_nam,
psc.column_position col_subpart_pos,
tap.interval_subpartition,
tap.autolist,
tap.autolist_subpartition,
tap.partitioning_key_count,
tap.subpartitioning_key_count,
tap.partition_count,
tap.def_subpartition_count
from
dba_tables tab left join
dba_part_tables tap on tab.owner = tap.owner and
tab.table_name = tap.table_name left join
dba_part_key_columns pkc on tab.owner = pkc.owner and
tab.table_name = pkc.name left join
dba_subpart_key_columns psc on tab.owner = psc.owner and
tab.table_name = psc.name
where 1=1
-- tab.owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'CTXSYS', 'APPQOSSYS', 'WMSYS', 'XDB')
-- tab.owner ='xx'
and tab.table_name=:h
order by tap.def_subpartition_count desc nulls last
;
SET LINES 333 PAGES 222
COL OWNER FOR A11
COL TABLE_NAME FOR A15
COL GLOBAL_STATS FOR A13
SELECT OWNER,TABLE_NAME,NUM_ROWS,TO_CHAR(LAST_ANALYZED,'DD-MON-YYYY:HH24:MI:SS') LAST_ANALYZED,GLOBAL_STATS,STATUS FROM DBA_TABLES
WHERE 1=1
-- OWNER='TBLUSR'
AND TABLE_NAME=:h
ORDER BY OWNER,TABLE_NAME,LAST_ANALYZED;
SET LINES 333 PAGES 222
COL OWNER FOR A11
COL TABLE_NAME FOR A15
COL GLOBAL_STATS FOR A13
COL PARTITION_NAME FOR A15
COL TABLE_OWNER FOR A15
SELECT TABLE_OWNER,TABLE_NAME, PARTITION_NAME,NUM_ROWS,TO_CHAR(LAST_ANALYZED,'DD-MON-YYYY:HH24:MI:SS') LAST_ANALYZED,GLOBAL_STATS FROM DBA_TAB_PARTITIONS
WHERE 1=1
--TABLE_OWNER='TBLUSR'
AND TABLE_NAME=:h
ORDER BY TABLE_OWNER,TABLE_NAME,PARTITION_NAME,LAST_ANALYZED;
SET LINES 333 PAGES 222
COL OWNER FOR A11
COL TABLE_NAME FOR A23
COL GLOBAL_STATS FOR A13
COL PARTITION_NAME FOR A15
COL SUBPARTITION_NAME FOR A19
COL TABLE_OWNER FOR A15
SELECT TABLE_OWNER,TABLE_NAME, PARTITION_NAME,SUBPARTITION_NAME,NUM_ROWS,TO_CHAR(LAST_ANALYZED,'DD-MON-YYYY:HH24:MI:SS') LAST_ANALYZED,GLOBAL_STATS FROM DBA_TAB_SUBPARTITIONS
WHERE 1=1
--TABLE_OWNER='TBLUSR'
AND TABLE_NAME=:h
--AND ROWNUM<11
ORDER BY TABLE_OWNER,TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME,LAST_ANALYZED;
set verify off
COL owner FORMAT a15
COL table_name FORMAT a40
COL STALE_STATS FORMAT a10
prompt
prompt +------------+
prompt |Stale Stats |
prompt +------------+
prompt
-- Process
SELECT OWNER,
TABLE_NAME,
to_char(LAST_ANALYZED,'yyyy.mm.dd hh24:mi') as LAST_ANALYZED,
STALE_STATS
FROM DBA_TAB_STATISTICS
WHERE 1=1
-- STALE_STATS='YES'
--AND owner NOT IN('SYS','SYSTEM')
--AND owner IN('ODS')
and TABLE_NAME=:h
ORDER BY owner,table_name;
select
subpar.partition_name,
subpar.subpartition_name,
tabpar.high_value tabpar_high_value,
subpar.high_value subpar_high_value,
subpar.num_rows subpar_num_rows,
subpar.blocks subpar_blocks,
tabpar.high_value_length tabpar_high_value_length,
subpar.high_value_length subpar_high_value_length,
subpar.partition_position,
subpar.subpartition_position
from
dba_tab_partitions tabpar left join
dba_tab_subpartitions subpar on
tabpar.table_owner = subpar.table_owner and
tabpar.table_name = subpar.table_name and
tabpar.partition_name = subpar.partition_name
where 1=1
-- subpar.table_owner = :h
and subpar.table_name = :h
order by
subpar.partition_position,
subpar.subpartition_position;
*********************
accept x_owner prompt "Owner : "
accept x_name prompt "Name : "
declare
ln_no_of_parts number := 0;
ls_owner varchar2( 100 ) := upper( '&x_owner' );
ls_name varchar2( 100 ) := upper( '&x_name' );
cursor c_parts is
select unique owner, name, object_type
from dba_part_key_columns
where owner like '%' || ls_owner || '%'
and name like '%' || ls_name || '%'
order by owner, object_type;
cursor c_part_key_columns( x_owner in varchar2, x_table_name in varchar2 ) is
select *
from dba_part_key_columns
where owner = x_owner
and name = x_table_name
order by column_position;
ls_high_val varchar2( 10000 );
cursor c_seg_bytes( x_owner in varchar2, x_segment in varchar2, x_partition in varchar2 ) is
select *
from dba_segments
where owner = x_owner
and segment_name = x_segment
and partition_name = x_partition;
lt_seg_bytes dba_segments%rowtype;
-- ---------------------------------------------------------------------------------
procedure p_show_table( x_owner in varchar2, x_table_name in varchar2 ) is
ls_warning varchar2( 100 ) := '';
ls_seg_bytes varchar2( 100 ) := '';
cursor c_part_tables( x_owner in varchar2, x_table_name in varchar2 ) is
select *
from dba_part_tables
where owner = x_owner
and table_name = x_table_name;
cursor c_tab_partitions( x_owner in varchar2, x_table_name in varchar2 ) is
select *
from dba_tab_partitions
where table_owner = x_owner
and table_name = x_table_name
order by partition_position;
begin
for c_pt in c_part_tables( x_owner, x_table_name ) loop
dbms_output.put_line( 'Partition Type : ' || c_pt.partitioning_type );
dbms_output.put_line( 'Partition Count : ' || c_pt.partition_count );
dbms_output.put_line( ' ' );
dbms_output.put_line( 'Columns : ' );
dbms_output.put_line( ' Pos' || ' ' || rpad( 'Obj Type', 11 ) || ' ' || 'Column Name' );
dbms_output.put_line( ' ---' || ' ' || rpad( '--------', 11 ) || ' ' || '-----------' );
for c_pkc in c_part_key_columns( c_pt.owner, c_pt.table_name ) loop
dbms_output.put_line( to_char( c_pkc.column_position, '999' ) || ' ' ||
rpad( c_pkc.object_type, 11 ) || ' ' ||
c_pkc.column_name );
end loop;
if c_pt.partitioning_type <> 'HASH' then
for c_p in c_tab_partitions( c_pt.owner, c_pt.table_name ) loop
ls_high_val := c_p.high_value;
-- if the high_value exceeds 255 characters procedure bigt will be required
-- e.g. bigt( chr(10) || 'High Value : ' || c_p.partition_position || chr(10) || trim( ls_high_val ) );
dbms_output.put_line( 'High Value : ' || c_p.partition_position || chr(9) || trim( ls_high_val ) );
end loop;
end if;
dbms_output.put_line( ' ' );
dbms_output.put_line( 'Partitions : ' );
dbms_output.put_line( ' Pos' || ' ' || rpad( 'Partition Name', 30 ) || ' ' || rpad( 'Tablespace', 30 ) || ' Bytes (Mb)' );
dbms_output.put_line( ' ---' || ' ' || rpad( '--------------', 30 ) || ' ' || rpad( '----------', 30 ) || ' ----------' );
for c_p in c_tab_partitions( c_pt.owner, c_pt.table_name ) loop
if c_p.subpartition_count > 0 then
ls_warning := ' Warning : sub-partitions attached';
ls_seg_bytes := '';
else
ls_warning := '';
open c_seg_bytes( c_pt.owner, c_pt.table_name, c_p.partition_name );
fetch c_seg_bytes into lt_seg_bytes;
close c_seg_bytes;
ls_seg_bytes := to_char( lt_seg_bytes.bytes/( 1024*1024), '999,999,999' ) || 'Mb';
end if;
dbms_output.put_line( to_char( c_p.partition_position, '999' ) || ' ' ||
rpad( c_p.partition_name, 30 ) || ' ' ||
rpad( c_p.tablespace_name, 30 ) ||
ls_warning ||
ls_seg_bytes );
end loop;
end loop;
end;
-- ---------------------------------------------------------------------------------
procedure p_show_index( x_owner in varchar2, x_index_name in varchar2 ) is
ls_warning varchar2( 100 ) := '';
ls_seg_bytes varchar2( 100 ) := '';
cursor c_part_indexes( x_owner in varchar2, x_index_name in varchar2 ) is
select *
from dba_part_indexes
where owner = x_owner
and index_name = x_index_name;
cursor c_ind_partitions( x_owner in varchar2, x_index_name in varchar2 ) is
select *
from dba_ind_partitions
where index_owner = x_owner
and index_name = x_index_name
order by partition_position;
begin
for c_pt in c_part_indexes( x_owner, x_index_name ) loop
dbms_output.put_line( 'Partition Type : ' || c_pt.partitioning_type );
dbms_output.put_line( 'Partition Count : ' || c_pt.partition_count );
dbms_output.put_line( ' ' );
dbms_output.put_line( 'Columns : ' );
dbms_output.put_line( ' Pos' || ' ' || rpad( 'Obj Type', 11 ) || ' ' || 'Column Name' );
dbms_output.put_line( ' ---' || ' ' || rpad( '--------', 11 ) || ' ' || '-----------' );
for c_pkc in c_part_key_columns( c_pt.owner, c_pt.index_name ) loop
dbms_output.put_line( to_char( c_pkc.column_position, '999' ) || ' ' ||
rpad( c_pkc.object_type, 11 ) || ' ' ||
c_pkc.column_name );
end loop;
if c_pt.partitioning_type <> 'HASH' then
for c_p in c_ind_partitions( c_pt.owner, c_pt.index_name ) loop
ls_high_val := c_p.high_value;
-- if the high_value exceeds 255 characters procedure bigt will be required
-- e.g. bigt( chr(10) || 'High Value : ' || c_p.partition_position || chr(10) || ls_high_val );
dbms_output.put_line( chr(10) || 'High Value : ' || c_p.partition_position || chr(10) || ls_high_val );
end loop;
end if;
dbms_output.put_line( ' ' );
dbms_output.put_line( 'Partitions : ' );
dbms_output.put_line( ' Pos' || ' ' || rpad( 'Partition Name', 30 ) || ' ' || rpad( 'Tablespace', 30 ) || ' Bytes (Mb)' );
dbms_output.put_line( ' ---' || ' ' || rpad( '--------------', 30 ) || ' ' || rpad( '----------', 30 ) || ' ----------' );
for c_p in c_ind_partitions( c_pt.owner, c_pt.index_name ) loop
if c_p.subpartition_count > 0 then
ls_warning := ' Warning : sub-partitions attached';
ls_seg_bytes := '';
else
ls_warning := '';
open c_seg_bytes( c_pt.owner, c_pt.table_name, c_p.partition_name );
fetch c_seg_bytes into lt_seg_bytes;
close c_seg_bytes;
ls_seg_bytes := to_char( lt_seg_bytes.bytes/( 1024*1024), '999,999,999' ) || 'Mb';
end if;
dbms_output.put_line( to_char( c_p.partition_position, '999' ) || ' ' ||
rpad( c_p.partition_name, 30 ) || ' ' ||
rpad( c_p.tablespace_name, 30 ) ||
ls_warning ||
ls_seg_bytes );
end loop;
end loop;
end;
-- ---------------------------------------------------------------------------------
begin
for i_c_parts in c_parts loop
ln_no_of_parts := ln_no_of_parts + 1;
dbms_output.put_line( rpad( '-', 100, '-' ) );
dbms_output.put_line( 'Owner : ' || i_c_parts.owner );
dbms_output.put_line( 'Name : ' || i_c_parts.name );
dbms_output.put_line( 'Type : ' || i_c_parts.object_type );
if trim( i_c_parts.object_type ) = 'TABLE' then
p_show_table( i_c_parts.owner, i_c_parts.name );
elsif trim( i_c_parts.object_type ) = 'INDEX' then
p_show_index( i_c_parts.owner, i_c_parts.name );
else
dbms_output.put_line( 'Type : ' || i_c_parts.object_type || ' not recognised.' );
end if;
dbms_output.put_line( rpad( '-', 100, '-' ) );
end loop;
if ln_no_of_parts = 0 then
dbms_output.put_line( 'No partitioned tables found matching criteria.' );
end if;
end;
/
====
Search This Blog
Total Pageviews
Monday, 9 August 2010
Partition Table Info
Subscribe to:
Post Comments (Atom)
Oracle DBA
anuj blog Archive
- ► 2011 (362)
-
▼
2010
(115)
-
▼
August
(30)
-
▼
Aug 09
(15)
- Oracle invalid objects
- Oracle Number of Objects in Tablespaces
- Oracle Instance up time
- Oracle Col name search
- Oracle user details
- user detail
- Oracle User Object Summary
- Oracle Transaction Monitor
- Oracle Resource Intensive SQL
- Partition Table Info
- Oracle Job Schedules detail
- Review Oracle user privilege
- Foreign Key Indexes
- Latch Hit Ratios
- How Long SQL will take
-
▼
Aug 09
(15)
-
▼
August
(30)

No comments:
Post a Comment