Oracle空间清理及表空间扩容
1、1:查看表空间使用率
SELECT a.tablespace_name "表空间名",
total / 1024 / 1024 "表空间大小单位M",
free / 1024 / 1024 "表空间剩余大小单位M",
(total - free) / 1024 / 1024 "表空间使用大小单位M",
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;
2、2:日终性能测试前对于一些类似于his表,settinit表都可以直接清理掉
------HS_HIS_DATA;HS_SETTINIT_DATA;HS_FIL_DATA 可以全部干掉
------例如清理hs_settinit用户,注意尽量使用truncate,不易产生碎片
这里有必要提一下drop truncate 以及 delete 的区别
Truncate:其作用会删除表所有的记录同时释放占用的空间,期间不会产生碎片,不产生日志,速度快,其缺点是不能回滚,删除的数据不能恢复;
Delete:delete可以有where条件,而且可以回滚,不可以回收索引占有的表空间
Drop:其作用将表的所有属性全部干掉,且对应表所占用的空间全释放掉
begin
for cur_tables in(select *
from user_tables)
loop
execute immediate 'truncate table hs_settinit.' || cur_tables.table_name;
end loop;
end;
3、3:查看用户默认的表空间.
select username,default_tablespace from dba_users;
4、4:查看要扩展的表空间使用的数据文件路径与名字
select * from dba_data_files where tablespace_name like 'HS_HIS_DATA%';
5、5:查询oracle本次修改的数据文件及其编号。
select file#,name from v$datafile;

6、6:查找该数据文件的最大块号。语句如下:
select max(block_id) from dba_extents where file_id=15;

7、7:显示SXSJ表空间每个数据块的大小。
select tablespace_name,blocK_size,status,contents from dba_tablespaces where tablespace_name like 'HS_HIS_DATA%';---8192
计算该数据块占用的物理空间
语句如下:
select 472536*8/1024 from dual;
---执行结果为: 3691,就是3个G左右
例如更改hisdat.dbf表空间大小
alter database datafile '/ora10g/ora11g/ora11gdata/pbox21/hisdat.dbf' resize 1000M; 执行失败
说明:之所以执行失败是因为当初我们执行修改数据文件为1G,但是实际数据已经占用了3G多了,不能修改为1G,只能比实际值大些。
select file#,name from v$datafile;

8、8:查一下占用最大块(segment 534785)的是什么。语句如下:
select distinct owner, segment_name, segment_type,tablespace_name from dba_extents where file_id =15 and block_id=472536;
此时我们把这张表drop掉,记住一定要先备份表结构等信息,然后再重新导入表结构等数据信息,再重新查看这张表会发现占用的块减小了;如此反复操作我们可以把占用较大的快都减小,对应的表空间时间物理占用空间也减小了,可以相应的优化数据库空间;
占用较大的快原因:产生的一些碎片等原因,例如DELETE 的话连HMW都不会降低的,其实数据文件在系统一级就是一个已经指定的文件;


9、9:查看表空间是否为自动扩展(性能测试时尽量关闭表空间自动扩展)
select tablespace_name,file_name,autoextensible from dba_data_files ;
10、10:总结修改语句语法
开启自动扩展功能语法:
alter database datafile '对应的数据文件路径信息' autoextend on;
关闭自动扩展功能语法:
alter database datafile '/u01/app/oracle/oradata/orcl/assetdat.dbf' autoextend off;