日期:2014-05-16  浏览次数:20608 次

oracle数据文件自动扩展与表收缩
=========================================================================================================================
1.数据文件自动扩展的好处
1)不会出现因为没有剩余空间可以利用到数据无法写入
2)尽量减少人为的维护
3)可以用于重要级别不是很大的数据库中,如测试数据库等
2.数据文件自动扩展的弊端
1)如果任其扩大,在数据量不断变大的过程中会导致某个数据文件异常的大
2)没有人管理的数据库是非常危险的
3.查询当前数据库中所有数据文件是否为自动扩展
SQL> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'SEC_D';
TABLESPACE_NAME?? FILE_NAME???????????????????????????????? AUT
----------------- ----------------------------------------- ---
SEC_D???????????? /data/oracle/dbfile.dbf? NO
4.通过修改SEC_D的数据文件为自动扩展达到表空间SEC_D为自动扩展的目的
SQL> alter database datafile '/data/oracle/dbfile.dbf' autoextend on;
Database altered.
5.确认是否已经修改成功
SQL> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'SEC_D';
TABLESPACE_NAME?? FILE_NAME???????????????????????????????? AUT
----------------- ----------------------------------------- ---
SEC_D???????????? /data/oracle/dbfile.dbf? YES
6.总结修改语句语法
开启自动扩展功能语法:
alter database datafile '对应的数据文件路径信息' autoextend on;
关闭自动扩展功能语法:
alter database datafile '对应的数据文件路径信息' autoextend off;
-- The End --

======================================================================================================================
Shrink space合并表的碎片
一般表里有碎片我们都采用alter table table_name move tablespace_name,或者exp,drop table table_name,imp的2种方式10G给我们其他的方法.下面我来试一吧
用Shrink Space收缩Oracle数据段
在oracle中可以使用alter table table_name shrink space收缩表,使用shrink有两个前提条件:
? 1、表必须启用row movement
? 2、表段所在表空间的段空间管理(segment space management)必须为auto
实验如下:
--建立一个segment space management auto表空间
SQL> create tablespace ts_auto datafile 'd:\oracle\product\10.2.0\oradata\orcl\ts_auto.dbf' size 100m
?extent management local segment space management auto;
表空间已创建。
--建议测试表
SQL> create table? table_auto? as select * from dba_objects;
表已创建。
--查看shrink前的块数量
SQL> select blocks from dba_segments where segment_name='table_auto';
??? BLOCKS????????????????????????????????????????????????????????????????????
----------????????????????????????????????????????????????????????????????????
?????? 768???????????????????????????????????????????????????????????????????
--delete数据后,空间占用没有变化
SQL> delete from table_auto;
已删除50390行。
SQL> commit;
提交完成。
SQL> select blocks from dba_segments where segment_name='table_auto';
??? BLOCKS????????????????????????????????????????????????????????????????????
----------????????????????????????????????????????????????????????????????????
?????? 768????????????????????????????????????????????????????????????????????
--直接收缩,提示必须启动row movement选项
SQL> alter table table_auto shrink space;
alter table table_auto shrink space
*
第 1 行出现错误:
ORA-10636: ROW MOVEMENT is not enabled