好用的show_space.sql指令碼
該指令碼是TOM大師寫的,非常實用:
create or replace procedure show_space
(
p_segname in varchar2,
p_owner in varchar2 default user,
p_type in varchar2 default 'TABLE',
p_partition in varchar2 default NULL
)
as
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_segment_space_mgmt varchar2(255);
l_unformatted_blocks number;
l_unformatted_bytes number;
l_fs1_blocks number;l_fs1_bytes number;
l_fs2_blocks number;l_fs2_bytes number;
l_fs3_blocks number;l_fs3_bytes number;
l_fs4_blocks number;l_fs4_bytes number;
l_full_blocks number;l_full_bytes number;
procedure p(p_label in varchar2,p_num in number)
is
begin
dbms_output.put_line(rpad(p_label,40,'.')||to_char(p_num,'999,999,999,999'));
end;
begin
execute immediate
'select ts.segment_space_management from dba_segments seg,dba_tablespaces ts where seg.segment_name = :p_segname and (:p_partition is null or seg.partition_name = :p_partition) and seg.owner = :p_owner and seg.tablespace_name=ts.tablespace_name'
into l_segment_space_mgmt
using p_segname,p_partition,p_partition,p_owner;
-- exception
-- when too_many_rows
-- then
-- dbms_output.put_line('This must be a partitioned table,use p_partition => ');
-- return;
-- end;
IF l_segment_space_mgmt = 'AUTO'
then
dbms_space.space_usage
(p_owner,p_segname,p_type,l_unformatted_blocks,
l_unformatted_bytes,l_fs1_blocks,l_fs1_bytes,
l_fs2_blocks,l_fs2_bytes,l_fs3_blocks,l_fs3_bytes,
l_fs4_blocks,l_fs4_bytes,l_full_blocks,l_full_bytes,p_partition);
p('Unformatted Blocks ',l_unformatted_blocks);
p('FS1 Blocks (0-25) ',l_fs1_blocks);
p('FS2 Blocks (25-50) ',l_fs2_blocks);
p('FS3 Blocks (50-75) ',l_fs3_blocks);
p('FS4 Blocks (75-100) ',l_fs4_blocks);
p('Full Blocks ',l_full_blocks);
else
dbms_space.free_blocks(
segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
freelist_group_id => 0,
free_blks => l_free_blks);
end if;
dbms_space.unused_space
( segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
partition_name => p_partition,
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);
p('Total Blocks ',l_total_blocks);
p('Total Bytes ',l_total_bytes);
p('Total MBytes ',trunc(l_total_bytes/1024/1024));
p('Unused Blocks',l_unused_blocks);
p('Unused Bytes ',l_unused_bytes);
p('Last Used Ext FileId',l_LastUsedExtFileId);
p('Last Used Ext BlockId',l_LastUsedExtBlockId);
p('Last Used Block',l_LAST_USED_BLOCK);
end;
注意:show_space這個儲存過程,依賴統計資訊的,如果插入的時候使用了 /*+append*/ 提示符,就會報錯,請在這之後,使用analyze TABLE分析。還有就是不能用於ASSM的地方
(
p_segname in varchar2,
p_owner in varchar2 default user,
p_type in varchar2 default 'TABLE',
p_partition in varchar2 default NULL
)
as
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_segment_space_mgmt varchar2(255);
l_unformatted_blocks number;
l_unformatted_bytes number;
l_fs1_blocks number;l_fs1_bytes number;
l_fs2_blocks number;l_fs2_bytes number;
l_fs3_blocks number;l_fs3_bytes number;
l_fs4_blocks number;l_fs4_bytes number;
l_full_blocks number;l_full_bytes number;
procedure p(p_label in varchar2,p_num in number)
is
begin
dbms_output.put_line(rpad(p_label,40,'.')||to_char(p_num,'999,999,999,999'));
end;
begin
execute immediate
'select ts.segment_space_management from dba_segments seg,dba_tablespaces ts where seg.segment_name = :p_segname and (:p_partition is null or seg.partition_name = :p_partition) and seg.owner = :p_owner and seg.tablespace_name=ts.tablespace_name'
into l_segment_space_mgmt
using p_segname,p_partition,p_partition,p_owner;
-- exception
-- when too_many_rows
-- then
-- dbms_output.put_line('This must be a partitioned table,use p_partition => ');
-- return;
-- end;
IF l_segment_space_mgmt = 'AUTO'
then
dbms_space.space_usage
(p_owner,p_segname,p_type,l_unformatted_blocks,
l_unformatted_bytes,l_fs1_blocks,l_fs1_bytes,
l_fs2_blocks,l_fs2_bytes,l_fs3_blocks,l_fs3_bytes,
l_fs4_blocks,l_fs4_bytes,l_full_blocks,l_full_bytes,p_partition);
p('Unformatted Blocks ',l_unformatted_blocks);
p('FS1 Blocks (0-25) ',l_fs1_blocks);
p('FS2 Blocks (25-50) ',l_fs2_blocks);
p('FS3 Blocks (50-75) ',l_fs3_blocks);
p('FS4 Blocks (75-100) ',l_fs4_blocks);
p('Full Blocks ',l_full_blocks);
else
dbms_space.free_blocks(
segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
freelist_group_id => 0,
free_blks => l_free_blks);
end if;
dbms_space.unused_space
( segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
partition_name => p_partition,
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);
p('Total Blocks ',l_total_blocks);
p('Total Bytes ',l_total_bytes);
p('Total MBytes ',trunc(l_total_bytes/1024/1024));
p('Unused Blocks',l_unused_blocks);
p('Unused Bytes ',l_unused_bytes);
p('Last Used Ext FileId',l_LastUsedExtFileId);
p('Last Used Ext BlockId',l_LastUsedExtBlockId);
p('Last Used Block',l_LAST_USED_BLOCK);
end;
注意:show_space這個儲存過程,依賴統計資訊的,如果插入的時候使用了 /*+append*/ 提示符,就會報錯,請在這之後,使用analyze TABLE分析。還有就是不能用於ASSM的地方
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-667615/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好用的websocket 心跳重連js指令碼WebJS指令碼
- show_space.sqlSQL
- 推薦一些好用的油猴指令碼指令碼
- 推薦一個很好用的指令碼session snapper指令碼SessionAPP
- 油猴外掛安裝以及好用的指令碼推薦指令碼
- mysql 一個比較好用的備份指令碼 可以進行熱備 本人測試好用MySql指令碼
- 【效率工具】史上最好用的SSH一鍵登入指令碼,超強更新!指令碼
- 生成insert指令碼的指令碼指令碼
- 常用,好用的js程式碼JS
- Redis的指令碼Redis指令碼
- 【DBA 指令碼】查詢current open cursor的指令碼指令碼
- 庫物件指令碼抽取指令碼物件指令碼
- PowerShell 指令碼中的密碼指令碼密碼
- 巧用shell指令碼生成快捷指令碼指令碼
- 指令碼的故事(2)指令碼
- 指令碼的故事(4)指令碼
- 批量改名的指令碼指令碼
- 轉:AIX 系統巡檢指令碼_超好用,不用一條條輸入命令了AI指令碼
- 密碼指令碼密碼指令碼
- [指令碼例項]——統計系統資訊指令碼指令碼
- 前端js指令碼與防止js指令碼前端JS指令碼
- 程式碼上線的shell指令碼指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- ETL指令碼的實現指令碼
- 自己寫的fabric指令碼指令碼
- Docker的指令碼安裝Docker指令碼
- gdb的指令碼使用 -- gdbinit指令碼
- 呼叫Frame中的指令碼指令碼
- Inno Setup的常用指令碼指令碼
- 地址本的指令碼(轉)指令碼
- 分析表的crontab指令碼指令碼
- ORACLE的啟動指令碼Oracle指令碼
- oracle的冷備指令碼Oracle指令碼
- oracle的熱備指令碼Oracle指令碼
- EXP的備份指令碼指令碼
- bat指令碼的基本操作BAT指令碼
- iOS逆向 Shell指令碼+指令碼重簽名iOS指令碼
- 常用指令碼學習手冊——Bat指令碼指令碼BAT