ora-03297处理

1.先查看下表空间的使用情况,如果使用了1G,要resize到800M,当然是不行的。使用如下脚本

-------------------------------------------------------------------------------------------
-- SCRIPT:  DF.SQL
-- PURPOSE: Show Oracle tablespace free space in Unix df style
-- AUTHOR:  Tanel Poder [ http://www.tanelpoder.com ]
-- DATE:    2003-05-01
-------------------------------------------------------------------------------------------
set line 200
set pagesize 2000
--conn / as sysdba
col DUMMY noprint
compute sum of TotalMB on DUMMY
compute sum of UsedMB on DUMMY
compute sum of FreeMB on DUMMY
break on DUMMY
col "% Used" for a6
col "Used" for a22
select NULL DUMMY, t.tablespace_name, t.mb "TotalMB", t.mb - nvl(f.mb,0) "UsedMB", nvl(f.mb,0) "FreeMB",
       lpad(ceil((1-nvl(f.mb,0)/t.mb)*100)||'%', 6) "% Used", t.ext "Ext",
       '|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/t.mb)*20),'#'),20,' ')||'|' "Used"
from (
  select tablespace_name, trunc(sum(bytes)/1048576) MB
  from dba_free_space
  group by tablespace_name
 union all
  select tablespace_name, trunc(sum(bytes_free)/1048576) MB
  from v$temp_space_header
  group by tablespace_name
) f, (
  select tablespace_name, trunc(sum(bytes)/1048576) MB, max(autoextensible) ext
  from dba_data_files
  group by tablespace_name
 union all
  select tablespace_name, trunc(sum(bytes)/1048576) MB, max(autoextensible) ext
  from dba_temp_files
  group by tablespace_name
) t
where t.tablespace_name = f.tablespace_name (+)
 order by 3
--order by t.tablespace_name
/



2.如果表空间只用了800M,但是resize 的是1G呢。以下脚本对XXX tablespace下的表做shrink.跑下生成的sql就OK

select 'alter table  '||owner||'.'||table_name||' enable row movement;' from dba_tables where tablespace_name like'%xxx%' 
union all
select 'alter table  '||owner||'.'||table_name||' shrink space;' from dba_tables where tablespace_name like'%xxx%' 
union all
select 'alter table  '||owner||'.'||table_name||' enable row movement;' from dba_tables where tablespace_name like'%xxx%' ;


3.跑以下脚本看下BLOCK_ID有没有出现很大的跳跃。比如4000跳到10000
select segment_name, block_id from dba_extents where tablespace_name like'%XXX%' order by block_id desc;

有的话,将那些高位的SEGMENT_NAME(也就是索引啦)记录下来运行如下 脚本:

alter index owner.aaa rebuild tablespace xxx;


4.这时resize应当是OK的,如果还不行,可能是有被回收的对象。

col topseg_segment_name head SEGMENT_NAME for a30


select * from (
	select 
		tablespace_name, 
		owner, 
		segment_name topseg_segment_name, 
		partition_name,
		segment_type, 
		round(bytes/1048576) MB 
	from dba_segments
	where upper(tablespace_name) like upper('%xxx%')
	order by MB desc
)
where rownum <= 50;
发现有以BIN$开头的对象的话,清空下回收站。
purge dba_recyclebin;


--------- 注:最好先看第三步,针对那些在高位的表或是索引做调整,因为我当前的表空间比较少,而且没在使用,所以直接把所有的表都shrink了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值