Oracle空间清理及表空间扩容

2025-12-30 00:16:03

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;

Oracle空间清理及表空间扩容

6、6:查找该数据文件的最大块号。语句如下:

select max(block_id) from dba_extents where file_id=15;

Oracle空间清理及表空间扩容

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;

Oracle空间清理及表空间扩容

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都不会降低的,其实数据文件在系统一级就是一个已经指定的文件;

Oracle空间清理及表空间扩容

Oracle空间清理及表空间扩容

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;

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢