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:APPADMINORADATAORCLstudent.DBF' size 100m autoextend on next 10m maxsize 500m permanent extent management local;