Oracle数据库调用和存储方式不得不知道的秘密

一,表空间 tablespace
    系统表空间       一定要online
    辅助表空间
    回滚表空间       一定要online
    临时表空间
    应用表空间
    SELECT * FROM Database_Properties      记录db级的一些参数的缺省值
    如缺省表空间,缺省临时表空间,缺省表空间类型
    1,创建表空间:
    create tablespace ts datafile '/u1/oradata/a/ts.dbf' size 10M
    extent management local autoallocate    也可为unifom size 1M
    segment space management auto;      也可为manual
    创建临时表空间:
    create temporary tablespace mytemp tempfile '/u1/oradata/a/mytemp.dbf' size 10M
    extent management local uniform size 1M
    segment space management manual;
    临时表空间只可以用uniform size 和 manual
    设定表空间为DB的默认表空间
    alter database default tablespace ts
    设定某临时表空间为DB的默认表空间
    alter database temporary tablespace mytemp
    查 Database_Properties发现默认表空间改变
    2,临时表空间组 (10g新特性)
    用于解决同一用户多个会话表空间争用问题
    创建临时表空间组(添加组员):
    alter tablespace mytemp tablespace group g1;
    alter tablespace mytemp2 tablespace group g1;
    产生一个组后产生一个数据字典:SELECT * FROM Dba_Tablespace_Groups 可查
    将用户的临时表空间设置成该临时表空间组
    alter user scott temporary tablespace g1
    将DB默认的临时表空间设为该临时表空间
    alter database default temporary tablespace g1;
    将临时表空间成员从临时表空间组中删除
    alter tablespace mytemp tablespace group '';
    v$tempfile 和 dba_temp_files区别?
    v$tempfile 在控制文件中,mount状态可读。dba_temp_files在数据文件中
    设计这两个功能相近的数据字典是为了恢复方便
    3,辅助表空间,
    SELECT * FROM v$sysaux_occupants;  可查看辅助表空间有哪些工具
    二,数据块
    标准块:大小和db_block_size一样的块
    非标准块:大小和db_block_size不一样的块
    块的大小
    块小:每一块中的记录少,并发概率小,但是块比较多,查询速度慢
    块大:并发概率大,但是查询速度快
    若建表是块大小已经比较大了,事后发现并发量太大如和做?
    调整pct_free
    复合型:
    在内存中每个块的缓冲区大小show parameter cache_size可查
    若内存中默认cache_size 为8k有一个表的块大小是16k,则需要在内存中开辟一段空间,器
    cache_size为16k。所以 cache中既有8k的空间又有16k的空间,所以称为复合型
    alter system set db_32k_cache_size=20M    把32k的cache设置为20M大小
    可用dump oracle最底层剖析来分析
    三,对象管理
    1,表:
    分类:
    a,normal 对表
    b,分区表(方便维护,可以提高性能)
    c,索引组织表(IOT)
    d,簇表  会减少链接的代价:当需要两个表连接时会生成一个簇表,查询时减少链接代价
    表的属性:    SELECT * FROM Dba_Tables;
    logging :默认写日志,参照表空间的属性
    initextent:不指定默认和表空间一致
    pct_free
    pct_used
    ini_trans   事务槽的初始长度
    max_trans   事务槽的最大长度
    事务槽位于块头下面,当块中记录被修改了事务槽就记录一条,如事务槽最大长度为200
    那么当修改第201次记录且之前事务都没结束时会报错
    创建表时指定事务槽大小:
    create table aaa(a int) max_trans=3;
    rowid 逻辑地址:rowid是不存在任何块中,存在索引中
    前6位:对象ID(表或索引)     Dba_Objects
    7-9位:对象所在文件ID        Dba_Data_Files      v$datafile
    10-15位:数据块ID,针对数据文件的
    16-18位:块内行号
    SELECT dbms_rowid.rowid_object(ROWID) AS obj#,
    dbms_rowid.rowid_relative_fno(ROWID) AS file#,
    dbms_rowid.rowid_block_number(ROWID) AS block#,
    dbms_rowid.rowid_row_number(ROWID) AS row#
    FROM scott.dept;
    查dept表中所有记录的rowid
    rowid 如何映射到块内的行的?
    通过查询索引,查到要查信息的rowid。通过rowid的信息查找到块以及块内的行号,若块中那
    行记录曾经alter并且新记录没有记录在原来的部位,则原来的部位会记录一个偏移量,从而找到该
    记录的新位置
    消除碎片的方法:
    (1)move   (8i,9i)
    alter table ts move TBSNAME;
    show parameter user_segment 可查
    注意:move时全表锁,做完后重建索引
    (2)shink  (10g新特性)
    原理:先排序后释放空间
    要先让表有行移动的功能:
    alter table test1 enable row movement
    排序:
    alter table test1 shink space compact
    释放空间:
    alter table test1 shink space
    shink过程不会引发行级触发器,但索引要重建
    (3)exp imp  备份恢复技术
    面试题:如何清空一个大表?
    若delete from  要写日志
    若truncate 只在数据字典中标记,并不删除数据释放区间;
    所以要删除一个大表应该先回落HWL在系统空闲的时候在释放空间:
    所以先truncate
    然后系统空闲时 alter table scott.tab1 deallocate unused keep 100m  释放到还剩100m
    alter table scott.tab1 deallocate unused keep 0m    完全释放
    建表时设定不记录日志:
    create table scott.tab as select * from dba.objects nologging;
    删除表并释放空间:
    truncate table scott.tab1 reuse storage
    2,索引:
    在无索引的情况下:要查找empno=7369的人的name时,要全表扫描,即使找到一个还是要继
    Oracle数据库存储方式如何认识并应用好它呢 b2b软件  
  其实,我前面一篇讲表空间的时候就介绍了数据库的结构,只是那个图只是简单的层次关系,这张图片看上去挺封复杂的,只要关注几个概念就行了。
Database(数据库) :数据库是按照数据结构来组织、存储和管理数据的仓库。
Tablespaces(表空间) :表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表, 所以称作表空间。
Segments (段): 段是表空间的重要组织结构,段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
extents (盘区):是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,oracle为该段分配一个新的范围。
Data Block (数据块):是oralce 管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统的标准I/O块大小。

(Storage Clause Precedence)存储规范优先

Oracle数据库存储方式如何认识并应用好它呢 b2b软件
  Oracle 在存储控制上可以分为三个方式。oracle缺省级别、表空间级别、段级别,可以理解中央、省级、县级。从中央到地方的法规条例。比如为了发展经济,对于招商引资的规范。中央规定可以实行招商引资,某省比较穷,为了吸引投资商,规定降低企业所得税。某县为了吸引资源,可以规定对于投资商土地免费使用5年,不征收土地使用税。那么某投资商来本县后首先适用县级规定。
具体规定:
1、不管你在哪个层面上修改存储方式,修改的参数是对未来要分配的存储extents (盘区)起作用。
2、一些参数只能在指定的级别上进行修改。有些参数只能表空间级别设置,有些参数只能在段级别设置。


Types of segments (段的类型)                                                                        

  因为关于表空间的一些基本知识我在另一节里做过专门介绍,这里我们认识一下段都有哪些常见类型。
Oracle数据库存储方式如何认识并应用好它呢 b2b软件
Table :
  对于一个只有几百条几千条数据,一个学校的学生成绩表,那么一张表就是一个segments 。
Table partition :
  如果一张表非常大,里面存储了几千万条、上亿条记录,那么对这一张表进行操作,效率就非常低了。分区表是将大表的数据分成称为分区的许多小的子集。假如一张表是存放中国13亿人口信息的表,那么这么多条记录是有规律的,可以基于某一个字段将其分开。那么可以根据省级行政区可以划分34个分区,每个分区实际上就是一个独立的表,但在逻辑上这些分区又同属于一张表。
如果一张表是普通的表,只点一个segments;如果一张表是partition的表,可能占多个segments。
Cluster :
  Oracle中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。如下图所示,索引中相同的key对应的数据存放在不同的block中,这时,如果要通过索引查询某个key的数据,就需要访问很多不同的block,代价非常高。
我们发现很多表与表,他们的数据有相关性,因为我们访问一个表里的数据,往往要访问另一些表里的数据。我们可以把这些数据物理上存储在一块。
Index
索引是与表和聚集相关的一种选择结构,就当于我们一本书的目录,可以快快速的定位某章某节的页数。索引可以建立在一个表的一列或多列上,那就可以大大提高对表的查询。那么一个index也可能会占一个多个segments 。

Oracle数据库存储方式如何认识并应用好它呢 b2b软件
Index-organized table :
  索引组织表(IOT),就是存储在一个索引结果中的表。存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可放在任何地方),IOT中 暗则按主键存储和排序。对你的应用来说,IOT表和一个“常规”表并无差别。使用堆组织表时,我们必须为表和表主键上的索引分别留出空间。而IOT不存在主键的空间开销,因为所引就是数据,数据就是所引。
  IOT带来的好处不仅节约磁盘空间的占用,更重要的是大幅度降低了I/O,减少了访问缓冲区缓存(尽管从缓冲区缓存获取数据比硬盘要快得多,但缓冲区缓存并不是免费,而且也绝不是廉价的。第个缓冲区缓存获取都需要缓冲区缓存的多个闩,而闩是串行化设备,会限制应用的扩展能力)
Index partition
      对于table有partition ,那么对一个大的index有也partition 。
  分区所引可以分为全局分区索引与本地分区索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引。
本地索引的分区和其对应的表分区数量相等,因此每个表分区都对应着相应的索引分区。使用本地索引,不需要指定分区范围因为索引对于表而言是本地的,当本地索引创建时,Oracle会自动为表中的每个分区创建独立的索引分区。
全局索引以整个表的数据为对象建立索引,索引分区中的索引条目既可能是基于相同的键值但是来自不同的分区,也可能是多个不同键值的组合。 全局索引既允许索引分区的键值和表分区键值相同,也可以不相同。全局索引和表之间没有直接的联系,这一点和本地索引不同。
Undo segment
回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。
Temporary segment   
当Oracle处理一个查询时,经常需要为SQL语句的解析与执行的中间结果(intermediate stage)准备临时空间。Oracle会自动地分配被称为临时段(temporary segment)的磁盘空间。例如,Oracle在进行排序操作时就需要使用临时段。当排序操作可以在内存中执行,或Oracle设法利用索引就执行时,就不必创建临时段。
Oracle数据库存储方式如何认识并应用好它呢 b2b软件
LOB segment
Large  object (LOB) 大大的对象,我们知道数据库不但可以存数据,有些可以存储视频声音图片等文件,对于这种类型的文件一个大小几MB,几十MB很正常。当然,有些数据库是不支持LOB数据块的,可以在表里存一个指针,来指向某个文件下的视频声音文件。
Nested table
嵌套表,表中表,和LOB思想很类似,就是在表里存一个指针,指针指向另外一张表。
Bootstrap segment
关于引导段,暂时没找到相关解释。^_^


Extent alloc & dealloc(盘区分配与释放)                        

  盘区是段下面的一个存储单位,一个盘区在物理上是一段连续的数据块。

Oracle数据库存储方式如何认识并应用好它呢 b2b软件
一个数据文件有一个文件头,点用了若干个数据块,这这个文件头里记录着盘区的分配与释放的信息。在这个文件中有些盘区是被使用的,有些盘区是空闲的。
什么时候创建盘区:
创建
扩展
改变(改大)
什么时候释放盘区:
删除
改变(改小)


Database Block(数据库块)                                    

最小单位的输入/输出
数据块由操作系统中的一个或多个块组成
数据块是表空间的基本单位
DB_BLOCK_SIZE 文件来表示缺省块的大小

查看oracle 块的大小:
[[email protected] dbs]$ strings spfileora10.ora | grep -i db_block*.db_block_size=8192  (8KB)

  在早期的数据库中,oracle只支持一种数据块的大小。从9i版本支持了改变大小的设置。但也不是任用户随便改动的,规定范围在2KB到32KB之间,必须是倍数增加的,也就是2KB\4KB\8KB\16KB\32KB 五种大小。
  需要注意的是,块大小的设置是在数据库创建时候设置的,一旦设置好是不可更改的。类似于我们磁盘的存储格式,FAT16、FAT32、NTFS.... ,要想改变存储格式只能数数据全部格式化掉。
Oracle数据库存储方式如何认识并应用好它呢 b2b软件

Hearder : 块头记录一些控制信息,帮助oracle定位这个块,块与块之间的串联信息。
Free space :处于重现状态的这空间。
Data :已经写入数据的空间。数据存放数据的方式是自底往上的,就像现实中的一个箱子。

Orcale 是如何管理数据的存储的                                    

High-Water Mark
Oracle数据库存储方式如何认识并应用好它呢 b2b软件
对一一个新建立的表,表中包含很多数据块,water mark 原始指向表中的第一个数据块。
water mark随着插入的数据“向前”移动。当把插入的数据删除掉一些,water mark 并不会“向后”移动。也就是water mark 的位置表示历史的最高水位。

那么我们要想插入一些数据时,oralce是按什么样的规则输选择插入位置呢?

Oracle数据库存储方式如何认识并应用好它呢 b2b软件
  首先会先查找灰色的,灰色部分表示就已经插入数据的块,但这些块并不是已经被完全占满了,有些或多或少的都会留下一些空间,关于留空间的规则,后面细说。如果插入一个很小的数据,灰色被占的数据块中可以完全插入的,就会被插在这一部分。
  如果数据比较大,查找了所有被占用块都无法插入,那么将会选择“曾经”插入过数据的空白块进行插入,也就是上图浅灰色部分。 发帖软件   B2B发帖软件
  如果数据非常大,曾经插入数据的空白块都无法插入,那么只好动用从未被插入过数据的空白块进行插入。当然water mark 也就会“向前”移动。

OK下面就来具体分析,每个数据块,是否允许插入数据的规则。

Oracle数据库存储方式如何认识并应用好它呢 b2b软件
  块头(数据块的头)不在百分比的范围内,当剩余空间大于20%的时候,那这个块就是纳入freelist中,当我要插入一条数据时,freelist是会扫描这个块的,检查其它是否可以存放要插入的数据。当小于20%的这间时,说明这个块已经满了,会从freelist中去掉,插入数据时不作为扫描的对象。
  一个小于20%空闲的块会从freelist上摘除,那么一个块在什么情况下会被重新挂到freelist上呢?对于一个已经从freelist上摘除的块,可以能由于删除更新操作,其空间会得到释放,当占用空间小于40%时,也就是空闲空间大于60%时,这个块被有认为是空间的块又会被重现挂到freelist上。


  从逻辑上讲,数据存储在段(通常是表)中;从物理上讲,数据存储在数据文件(datafile)中。表空间(tablespace)实体是二者的象,一个表空间可能包含多个段,并由多个数据文件组成。段和数据文件没有直接关系。数据文件可以作为文件系统中的文件存在,从10 g版本开始,也可以作为自动存储管理(Automatic Storage  Management,ASM)设备上的文件存在。
   www.2cto.com  
一、Oracle数据存储模型

  将逻辑存储与物理存储分开是关系数据库范例的必要部分。关系数据库范例表明:编程人员只处理逻辑结构,而让数据库去管理到物理结构的映射。这意味着,可以重新组织物理存储,也可以将整个数据库移动到完全不同的硬件和操作系统上,而应用程序意识不到任何更改。
  如下图展示Oracle存储模型,逻辑结构在左,物理结构在右。
   www.2cto.com    Oracle数据库存储方式如何认识并应用好它呢 b2b软件 


1、Oracle数据库逻辑结构
(1)DATABASE:一个数据库可划分为多个称为表空间的逻辑存储单元。

(2)TABLESPACE:只能属一个数据库,包括一个或多个文件。

(3)SEGMENT:存在于表空间中,包含一个或多个区。
包括:表段、表分区段、索引段、索引分区段、临时段、撤销段、BLOB、CLOB
  高水位
    PCTFREE和PCTUSED
  行迁移和行链接
  INITRANS和MAXTRANS

(4)EXTENT:由相邻的数据块的组成,这意味着每个区只能存在于一个数据文件中。

(5)BLOCK:是数据库中最小的I/O单元,db_block_size
产品推广软件   企业推广软件

2、Oracle数据库物理结构 
(1)、OS文件
  A、仅属于一个表空间
  B、是构成表空间的基础文件

(2)、OS块
  A、tune2fs -l /dev/sda1
  B、扇区:512字节 操作系统一次IO的大小

3、表空间、表、区、块及文件号的关系由视图dba_extents展显出来
[email protected]> create tablespace tp1 datafile'/u01/app/oracle/oradata/ocm/tp1.dbf' size 100M,'/u01/app/oracle/oradata/ocm/tp2.dbf' size 100M EXTENT MANAGEMENT LOCAL UNIFORMSIZE  1M;
[email protected]> alter user gyj defaulttablespace tp1;
[email protected]> conn gyj/gyj
[email protected]> create table t10 (id int,namevarchar2(100));
[email protected]> begin
2  for i in 1 .. 200000 loop
3  insert into t10values(i,'gyj'||i);
4  commit;
5  end loop;
6  end;
7  /
[email protected]> col tablespace_name for a10
[email protected]> col segment_name for a10
[email protected]> selecttablespace_name,segment_name,extent_id,file_id,block_id,bytes,blocks fromdba_extents where segment_name='T10' order by extent_id;

TABLESPACE SEGMENT_NA  EXTENT_ID FILE_ID  BLOCK_ID  BYTES BLOCKS
---------- ---------- ---------- -------------------- ---------- ----------
TP1 T10  0  6  128 1048576  128
TP1 T10  1  7  128 1048576  128
TP1 T10  2  6  256 1048576  128
TP1 T10  3  7  256 1048576  128
TP1 T10  4 6 384  1048576  128

二、表空间类型
1、普通表空间:系统表空间与非系统表空间

2、临时表空间

3、回滚表空间

三、创建空间
CREATE TABLESPACE TP25 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M,
'/u01/app/oracle/oradata/ocp/tp2502.dbf' size50M
AUTOEXTEND ON next 10M MAXSIZE 2G,
'/u01/app/oracle/oradata/ocp/tp2503.dbf' size50M
--EXTENT MANAGEMENT DICTIONARY
AUTOEXTEND ON next 10M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE  2M
SEGMENT SPACE MANAGEMENT AUTO;
万能营销   万能群发
CREATE TABLESPACE TP21 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M
EXTENT MANAGEMENT DICTIONARY;

create tablespace tp22 datafile'/u01/app/oracle/oradata/ocp/tp22_1.dbf' size10M,'/u01/app/oracle/oradata/ocp/tp22_2.dbf' size 10M EXTENT MANAGEMENT LOCAL;

四、删除表空间
1.删除没有对象的表空间
drop tablespace tp1;

2、删除有对象的表空间,但不删除物理文件
drop tablespace tp1 including contents;

3、删除有对象的表空间和删除物理文件
drop tablespace tp20 including contents and datafiles cascadeconstraints;

五、管理表空间中的空间
1、区管理方式(8i的默认空间管理是DMT,9I的默认空间管理是LMT)
  (1)数据字典管理
   SYS.UET$    ――具有描述已用的区的行
   SYS.FET$    ――具有描述可用区的行

  (2)本地管理
  a.统一
   b.自动
    alter system dump datafile 5 block 2;
   alter system dump datafile 5 block 3;

   (3)本地管理表空间的优势
    a.不需要执行递归空间管理操作
    b.不记录数据字典表中的的空闲空间,可以减少争用
    c.可自动跟踪相邻的空闲空间无需合并空闲空间
    d.系统自动确定本地管理区的大小
    e.对区位图进行更改不会生成还原信息,国为这些更改并不更新数据字典中的表(表空间限额信息等特殊情况除外)

  (4)可以使用下面的PL/SQL程序,将任何字典管理的表空间转换成为本地管理:
    Executedbms_space_admin.tablespace_migrage_to_local(‘tablespacename’);

2、段管理方式
  (1)SSM:自动管理方式(BMB段:BitmapManagedSegments),使用位图管理段中的数据块空闲空间,大并发量。

  (2)MSSM:手工管理方式(FreeList),使用空闲列表来管理段中的数据块空闲空间,串行操作容易引起段头的争用。
--dump段头信息

(3)OMF(OracleManaged Files)管理
  ①设置参数
   DB_CREATE_FILE_DEST
   DB_CREATE_ONLINE_LOG_DEST_n
   DB_RECOVERY_FILE_DEST
  ②创建表空间
  ALTERSYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
   CREATETABLESPACE tbs_1;

六、临时表空间
1、数据库默认的临时表空间
[email protected]> select * fromdatabase_properties where property_name='DEFAULT_TEMP_TABLESPACE';
[email protected]> alter databasedefault temporary tablespace temp1;

2、创建临时表空间或临时表空间组
(1)创建临时表空间
 CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10m;

(2)创建临时表空间组
 CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10M TABLESPACE GROUP group1;
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE'/u01/app/oracle/oradata/ocp/temp2.dbf' SIZE 10M TABLESPACE GROUP group1;

3、收缩临时表空间和临时文件
(1)方法一收缩临时表空间
   [email protected]>  alter tablespace TEMP shrink space keep 10M;

 Tablespace altered.

(2)方法三收缩临时表空间的某个文件
[email protected]>alter tablespace temp shrink tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' keep 10M;

Tablespace altered.

(3)方法三重新定义临时文件的大小
[email protected]> alter database tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' resize 100M;

Database altered. 

3、删除临时表空间
(1)查临时表空间
[email protected]> selecttablespace_name,file_name,bytes/1024/1024 file_size,autoextensible fromdba_temp_files;

TABLESPACE_NAME  FILE_NAME FILE_SIZE AUT
-------------------------------------------------------------------------------- ---------- ---
TEMP  /u01/app/oracle/oradata/ocm/temp01.dbf  10.9921875 YES

(2)彻底删除临时表空间 
[email protected]> drop tablespace temp includingcontents and datafiles cascade constraints;

(3)删除临时表空间某个文件
[email protected]>alter database tempfile'/u01/app/oracle/oradata/orcl/temp02.dbf' drop;-

七、监控表空间
[email protected]> set line 200 pagesize 9999
[email protected]> select b.tablespace_name,round(sum(b.bytes)/1024/1024,0) sum_MB,round(sum(nvl(a.bytes,0))/1024/1024,0)
2  free_MB,round((sum(b.bytes)-sum(nvl(a.bytes,0)))/sum(b.bytes),4)*100use_precent
3  from (selecttablespace_name,file_id,sum(bytes) bytes from dba_free_space group bytablespace_name,file_id ) a,dba_data_files b
4  where a.file_id(+)=b.file_idand a.tablespace_name(+)=b.tablespace_name
5  group by b.tablespace_name;
order by use_precent;

TABLESPACE  SUM_MB FREE_MB  USE_PRECENT
---------- -----------  ---------------  ---------------------
TP1  200  193  3.5
UNDOTBS1 145  18  87.84
SYSAUX  520  29  94.45
USERS  5  1  81.25
SYSTEM  680  4  99.39
EXAMPLE  100  21  78.75

八、扩大数据库的方式
1、创建新表空间

 2、在表空间添加文件
  [email protected]> alter tablespace tp1 add datafile'/u01/app/oracle/oradata/ocm/tp3.dbf' size 10M;

 Tablespace altered

 3、增加文件大小
   [email protected]> alter database datafile'/u01/app/oracle/oradata/ocm/tp3.dbf' resize 20M;

  Database altered.
   www.2cto.com  
  4、动态扩展数据文件
  (1)查数据文件的自动扩展
   [email protected]> col file_name for a50;
   [email protected]> select file_name,autoextensiblefrom dba_data_files;

  FILE_NAME  AUT
  -----------------------------------------------------
  /u01/app/oracle/oradata/ocm/users01.dbf  YES
  /u01/app/oracle/oradata/ocm/undotbs01.dbf  YES
  /u01/app/oracle/oradata/ocm/sysaux01.dbf  YES
  /u01/app/oracle/oradata/ocm/system01.dbf  YES
  /u01/app/oracle/oradata/ocm/example01.dbf  YES
  /u01/app/oracle/oradata/ocm/tp1.dbf NO
  /u01/app/oracle/oradata/ocm/tp2.dbf  NO
  /u01/app/oracle/oradata/ocm/tp3.dbf  NO

  (2)把tp3.dbf文件改成自动扩展
    [email protected]> alter database datafile'/u01/app/oracle/oradata/ocm/tp3.dbf'autoextend on next 2M maxsize 2048M;

   Database altered.

  (3)再次确认tp3.dbf文件是否自动扩展
    [email protected]> select file_name,autoextensiblefrom dba_data_files;    FILE_NAME  AUT    -----------------------------------------------------  /u01/app/oracle/oradata/ocm/users01.dbf  YES  /u01/app/oracle/oradata/ocm/undotbs01.dbf  YES  /u01/app/oracle/oradata/ocm/sysaux01.dbf  YES  /u01/app/oracle/oradata/ocm/system01.dbf  YES  /u01/app/oracle/oradata/ocm/example01.dbf  YES  /u01/app/oracle/oradata/ocm/tp1.dbf  NO  /u01/app/oracle/oradata/ocm/tp2.dbf  NO  /u01/app/oracle/oradata/ocm/tp3.dbf  YES