查看表空间使用情况,增加表空间大小
SELECT a
.tablespace_name tablespace_name
,'onilne',
round(total
/ (1024 * 1024 * 1024), 2) "表空间大小(G)",
round((total
- free
) / (1024 * 1024 * 1024), 2) "表空间使用大小(G)",
round(free
/ (1024 * 1024 * 1024), 2) "表空间剩余大小(G)",
round((total
- free
) / total
, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name
, SUM(bytes
) free
FROM dba_free_space
GROUP BY tablespace_name
) a
,
(SELECT tablespace_name
, SUM(bytes
) total
FROM dba_data_files
GROUP BY tablespace_name
) b
WHERE a
.tablespace_name
= b
.tablespace_name
order by 6 desc;
system和sysaux为数据库系统表空间,不用太注意。主要看TBS_DATA01 (数据库表的表空间,带_IDX是索引的表空间,也有可能没有,名字大家也可能各不相同)。当它使用率过高或者表空间剩余大小不足,则需要扩容
alter tablespace TBS_DATA01
add datafile size
31G
;
查看表的使用状况,整理表碎片
SELECT owner
,TABLE_NAME
,ROUND((BLOCKS
*8192/1024/1024),2)"理论大小M",
ROUND((NUM_ROWS
*AVG_ROW_LEN
/1024/1024),2)"实际大小M",
ROUND( (BLOCKS
* 8192 / 1024 / 1024) - (NUM_ROWS
* AVG_ROW_LEN
/ 1024 / 1024),2) "Data lower than HWM in MB" ,
to_char
(round((NUM_ROWS
*AVG_ROW_LEN
/1024/1024)/(BLOCKS
*8192/1024/1024),3)*100,'fm999990.99999')||'%' "实际使用率%"
FROM dba_TABLES
where (NUM_ROWS
*AVG_ROW_LEN
/1024/1024)/(BLOCKS
*8192/1024/1024)<0.6
AND OWNER
NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'DMSYS', 'OLAPSYS', 'XDB','EXFSYS', 'CTXSYS','WMSYS', 'DBSNMP', 'ORDSYS', 'OUTLN', 'TSMSYS', 'MDSYS','OGG')
AND BLOCKS
NOT IN ('0') ORDER BY 3 DESC;
SELECT bytes
/1024/1024/1024 "单位G" FROM USER_SEGMENTS
WHERE SEGMENT_NAME
='表名';
若某些表实际使用率过低,则需要进行碎片整理。分区表需要单独整理每个分区,或者清除空分区。
alter table TB_UTOWNERCLEARINGDETAIL move online
;
alter table TB_UTOWNERCLEARINGDETAIL move
PARTITION SYS_P13236 online
;
alter table TB_UTOWNERCLEARINGDETAIL move
PARTITION SYS_P13271 online
;
alter table TB_UTOWNERCLEARINGDETAIL move
PARTITION SYS_P13278 online
;
set serveroutput
on;
declare
vsql varchar2
(1000);
vcount number
;
begin
for i
in(select * from user_tab_partitions a
where a
.table_name
='TB_UTOWNERCLEARINGDETAIL' and a
.partition_name
<>'P1')
loop
vsql:
='select /*+ parallel(8)*/ count(1) from TB_UTOWNERCLEARINGDETAIL partition('||i
.partition_name
||')';
execute immediate vsql
into vcount
;
if vcount
=0 then
vsql:
='alter table TB_UTOWNERCLEARINGDETAIL drop partition '||i
.partition_name
||';';
dbms_output
.put_line
(vsql
);
end if;
end loop;
end;
整理完碎片后,若该表有索引则必须重建索引。
alter index IDX_OTHERTRANS_NEW_BATNO1 rebuild online
;
alter index IDX_OTHERTRANS_NEW_EXTIME1 rebuild online
;
以上步骤结束,必须做表分析,避免数据库出现异常。
begin
dbms_stats
.gather_table_stats
(
ownname
=>'CMMUSERDEV',
tabname
=>'RD_EXPASS_NEW',
degree
=> 8,
cascade => true,
force=>true);
end;