几个与表空间碎片相关的脚本

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
不错! 收藏!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我写的几个脚本,大家看看
REM
REM display tables or indexes on very top n bocks
REM
set linesize 80
set pagesize 40
SET ECHO OFF
ttitle -
center'Segment Extent Summary'skip 2
col ownr format a8heading 'Owner'justify c
col type format a8heading 'Type' justify c trunc
col name format a20 heading 'Segment Name' justify c
col exid format 990 heading 'Extent#'justify c
col fiid format9990 heading 'File#'justify c
col blid format 999,990 heading 'Block#' justify c
col blks format 999,990 heading 'Blocks' justify c
select
owner ownr,
segment_namename,
segment_typetype,
extent_id exid,
file_id fiid,
block_idblid,
blocksblks
from
dba_extents
where file_id = 1
and (block_id + &top_blocks) >(

select max(block_id) from dba_extents where file_id=1)
order by block_id
/
REM
REM produce reorganize sql commands of top tables
REM want they are be moved to lower free space
select
'alter '||segment_type||' '|| owner||'.'||segment_name
||decode(segment_type,'TABLE',' move;',

'INDEX', 'rebuild;','unknown')
from
dba_extents
where file_id = 1
and (block_id + &top_blocks) >(
select max(block_id) from dba_extents where file_id=1)
order by block_id

rem
rem display map of datafiles
rem
set serveroutput on size 20000
set linesize 80
declare
cursor c_map(p_file_id number) is
(select file_id,block_id,blocks,'X' used
from dba_extents where file_id=p_file_id
union
select file_id,block_id,blocks,'=' used
from dba_free_space where file_id=p_file_id
) order by 1,2,3;
cursor c_file is
select file_name,file_id,blocks/400bsize from dba_data_files;
j number :=1;
begin
for r_file in c_file
loop
dbms_output.put_line('Map of '||r_file.file_name);
for r_map in c_map(r_file.file_id)
loop
for iin 1..r_map.blocks/r_file.bsize
loop

dbms_output.put(R_MAP.USED);

if j>=80 then
j :=1;dbms_output.new_line;

else

j := j+1;

end if;
end loop;
end loop;
dbms_output.new_line;j:=1;
end loop;
end;
/
rem
rem display detail map of special datafile
rem

set serveroutput on size 999999
set linesize 80
rem ACCEPT p_file_id NUMBER PROMPT 'Pleas input File Number:'

declare
cursor c_map is
(select file_id,block_id,blocks,'X' used
from dba_extents where file_id=&p_file_id
union
select file_id,block_id,blocks,'=' used
from dba_free_space where file_id=&p_file_id
) order by 1,2,3;
j number :=1;
bsize number;
begin
select blocks/(80*80)into bsize from dba_data_files where file_id=&p_file_id;
--that is display in 80 lines with linesize of 80
for r_map in c_map
loop
for iin 1..r_map.blocks/bsize
loop

dbms_output.put(R_MAP.USED);

if j>=80 then
j :=1;dbms_output.new_line;

else

j := j+1;

end if;
end loop;
end loop;
end;
/

回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
"X"表示used
"=" is free
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
SO COOL!!这些SCRIPT
但是不知道为什么第一个脚本查询出的Segment是有碎片的。
还有最后两个脚本生的MAP,怎么理解,如我有二个数据文件如下,分别代表什么问题??
Map of /export/home/u02/oradata/kkk/usr2kkk.ora
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX===XXX==========XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX===============================================
================================================================================
========XX======================XXX
Map of /export/home/u02/oradata/kkk/tmp1kkk.ora
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX============================
=========================================================
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
collect...


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
请问,&top_blocks 代表何值?应该如何这个值?
谢谢。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
收下,谢谢!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
支持一下,不过基本用不到
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
有意思的脚本
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
是否測試過,可以正確使用嗎?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行