2026-03-12 20:23:15
This commit is contained in:
123
vdh/show_space2.sql
Normal file
123
vdh/show_space2.sql
Normal file
@@ -0,0 +1,123 @@
|
||||
create or replace type show_space_type
|
||||
as object
|
||||
( owner varchar2(30),
|
||||
segment_name varchar2(30),
|
||||
partition_name varchar2(30),
|
||||
segment_type varchar2(30),
|
||||
free_blocks number,
|
||||
total_blocks number,
|
||||
unused_blocks number,
|
||||
last_used_ext_fileid number,
|
||||
last_used_ext_blockid number,
|
||||
last_used_block number
|
||||
)
|
||||
/
|
||||
create or replace type show_space_table_type
|
||||
as table of show_space_type
|
||||
/
|
||||
|
||||
|
||||
And then the function:
|
||||
|
||||
create or replace
|
||||
function show_space_for
|
||||
( p_segname in varchar2,
|
||||
p_owner in varchar2 default user,
|
||||
p_type in varchar2 default 'TABLE',
|
||||
p_partition in varchar2 default NULL )
|
||||
return show_space_table_type
|
||||
authid CURRENT_USER
|
||||
as
|
||||
pragma autonomous_transaction;
|
||||
type rc is ref cursor;
|
||||
l_cursor rc;
|
||||
|
||||
l_free_blks number;
|
||||
l_total_blocks number;
|
||||
l_total_bytes number;
|
||||
l_unused_blocks number;
|
||||
l_unused_bytes number;
|
||||
l_LastUsedExtFileId number;
|
||||
l_LastUsedExtBlockId number;
|
||||
l_last_used_block number;
|
||||
l_sql long;
|
||||
l_conj varchar2(7) default ' where ';
|
||||
l_data show_space_table_type :=
|
||||
show_space_table_type();
|
||||
l_owner varchar2(30);
|
||||
l_segment_name varchar2(30);
|
||||
l_segment_type varchar2(30);
|
||||
l_partition_name varchar2(30);
|
||||
|
||||
procedure add_predicate( p_name in varchar2, p_value in varchar2 )
|
||||
as
|
||||
begin
|
||||
if ( instr( p_value, '%' ) > 0 )
|
||||
then
|
||||
l_sql := l_sql || l_conj || p_name ||
|
||||
' like ''' || upper(p_value) || '''';
|
||||
l_conj := ' and ';
|
||||
elsif ( p_value is not null )
|
||||
then
|
||||
l_sql := l_sql || l_conj || p_name ||
|
||||
' = ''' || upper(p_value) || '''';
|
||||
l_conj := ' and ';
|
||||
end if;
|
||||
end;
|
||||
begin
|
||||
l_sql := 'select owner, segment_name, segment_type, partition_name
|
||||
from dba_segments ';
|
||||
|
||||
add_predicate( 'segment_name', p_segname );
|
||||
add_predicate( 'owner', p_owner );
|
||||
add_predicate( 'segment_type', p_type );
|
||||
add_predicate( 'partition', p_partition );
|
||||
|
||||
execute immediate 'alter session set cursor_sharing=force';
|
||||
open l_cursor for l_sql;
|
||||
execute immediate 'alter session set cursor_sharing=exact';
|
||||
|
||||
loop
|
||||
fetch l_cursor into l_owner, l_segment_name, l_segment_type,
|
||||
l_partition_name;
|
||||
exit when l_cursor%notfound;
|
||||
begin
|
||||
dbms_space.free_blocks
|
||||
( segment_owner => l_owner,
|
||||
segment_name => l_segment_name,
|
||||
segment_type => l_segment_type,
|
||||
partition_name => l_partition_name,
|
||||
freelist_group_id => 0,
|
||||
free_blks => l_free_blks );
|
||||
|
||||
dbms_space.unused_space
|
||||
( segment_owner => l_owner,
|
||||
segment_name => l_segment_name,
|
||||
segment_type => l_segment_type,
|
||||
partition_name => l_partition_name,
|
||||
total_blocks => l_total_blocks,
|
||||
total_bytes => l_total_bytes,
|
||||
unused_blocks => l_unused_blocks,
|
||||
unused_bytes => l_unused_bytes,
|
||||
LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
|
||||
LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
|
||||
LAST_USED_BLOCK => l_LAST_USED_BLOCK );
|
||||
|
||||
l_data.extend;
|
||||
l_data(l_data.count) :=
|
||||
show_space_type( l_owner, l_segment_name, l_partition_name,
|
||||
l_segment_type, l_free_blks, l_total_blocks, l_unused_blocks,
|
||||
l_lastUsedExtFileId, l_LastUsedExtBlockId, l_last_used_block
|
||||
);
|
||||
exception
|
||||
when others then null;
|
||||
end;
|
||||
end loop;
|
||||
close l_cursor;
|
||||
|
||||
return l_data;
|
||||
end;
|
||||
/
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user