Oracle收缩或释放剩余 空闲表空间 数据文件

oracle database用一段时间以后,硬盘空间会不够,更甚者硬盘会used 100%。(oracle表空间设置为自动扩展)。此时oracle会出现各种莫名其妙的错误,为保持oracle数据库的稳定,我们需要实时查看硬盘空间。 那么怎样缩小一些不用的表空间,以释放硬盘空间?

  oracle常用的此类命令Alter database datafile(tempfile),当然也可从toad等UI工具去操作。

ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 1229M;

    如果盲目去操作,oracle会报ora-03297错误。表示在所定义的空间之后有数据存在,不能收缩。我们不得不查出最后的数据所处的位置, 然后表空间设置到稍比这位置大一点的大小。

  1. 查该数据文件中数据处在最大位置

select max(block_id) from dba_extents where file_id=15;< /FONT>

      max(block_id)

        383497 

    查询file_id,也可在toad工具tablespace直接看到。

select file#,name from v$datafile;

  2. 查出最大块位置

select 383497*8/1024 from dual;

      2996.0703125

    这说明该文件中最大使用块位于2996M与3000M之间,

  3. 修改表空间(也可用toad工具界面修改)

ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 3000M;

  4、Oracle创建表空间语法结构如下:

create tablespace tab_name
datafile 'filename'
size n
[autoextend on next n1 maxsize m /of]
[permanent] 
[extent management local/dictionary];

create tablespace:创建表空间的关键字。语法解析:

tab_name:创建后表空间的名字。

datafile:指定数据文件的路径为filename。

size n:指定数据文件的大小。

[autoextend on next n1 maxsize m /of ]:表示表空间是否是自动扩展的,on 为自动扩展,of为不扩展,当自动扩展时,next n1表示自动扩展的大小,max size m 表示数据文件最大扩展到m大小。

[permanent] :表示创建的表空间的类型,permanent表示永久表空间,不填都是默认永久表空间。

[extent management local/dictionary]:表示表空间管理的方式,local表示本地的管理模式,dictionary表示数据字典管理模式,默认都是本地管理方式。

 


案例1、根据表空间创建语法,创建一个100M大小数据文件(student.dbf)的表空间student,代码如下:

create tablespace student
datafile 'E:\APP\ADMIN\ORADATA\ORCL\student.DBF'
size 100m
autoextend on next 10m maxsize 500m
permanent
extent management local;

  

 

posted @ 2020-10-15 09:30  洺剑残虹  阅读(2103)  评论(0编辑  收藏  举报