表空间基本概念

数据库的运行需要依赖于操作系统,而数据库本身也保存在操作系统的磁盘上,所以当用户向数据表中保存数据时,最终数据是被保存在了磁盘上,只是这些数据是按照固定的格式进行保存,就像这样:

通过上图可发现,在数据库数据和磁盘数据之间存在下面两种结构:

逻辑结构:Oracle中所引入的结构,开发人员所操作的都只针对Oracle的逻辑
物理结构:操作系统所拥有的存储结构,逻辑结构到物理结构的转换由Oracle数据库管理系统来完成;

Oracle引入两个操作结构的目的:

系统数据库具有很强的可移植性,即只要数据文件按照规定的标准进行数据的存储,那不同的厂商就可以定义属于自己的逻辑结构,实现逻辑结构的关键就是表空间;

表空间是Oracle最大的逻辑结构,每一个Oracle数据库都会由若干表空间组成,每个表空间由多个数据文件组成。

用户创建的表也统一被表空间管理;

表空间与磁盘上的数据文件对应,所以直接与物理存储结构关联;

用户在数据库中创建的数据表,索引,视图,子程序等,都被表空间保存到了不同的区域内;

数据库,表空间,表的理解:可见整个数据库理解为图书馆,每一个表空间相当于书架,每张表相当于书架上的书。为了方便用户查阅,图书的分类依靠书架上的标签(表受表空间管理),而书架必须放在图书馆(表空间受到数据库管理)里;

表空间分类

系统表空间:是在数据库创建时与数据库一起建立起来的,例如用户用于撤销的事务处理,或者使用的数据字典就保存在系统表空间中,例如system或sysaux表空间;

非系统表空间:由具备指定管理员权限的数据库用户创建,主要用于保存用户数据,索引等数据库对象,例如USERS,TEMP,UNDOTBSI等表空间;

实际上,一般用户使用的都是非系统表空间;

 

创建表空间

定义非系统表空间的基本语法:

create [TEMPORARY] tablespace 表空间名称  
[DATAFILE | TEMPFILE 表空间文件保存路径 ....] [SIZE 数字[K|M]]  
[AUTOEXTEND ON|OFF] [NEXT 数字 [K|M]]  
[LOGGING | NOLOGGING];本语法各个创建子句的相关说明: 

 

  1. datafile:保存表空间的磁盘路径,可以设置多个保存路径;
  2. tempfile:保存临时表空间的磁盘路径;
  3. size:开辟的空间大小,其单位有K(字节)和M(兆);
  4. autoextend:是否为自动扩展表空间,如果为ON表示可以自动扩展表空间大小,反之为OFF;
  5. next:可以定义表空间的增长量;
  6. logging|nologging:是否需要对DML进行日志记录,记录下的日志可以用于数据恢复;

 

永久性表空间是为了保存用户的对象数据,例如,当使用create语句创建对象,或者使用insert语句进行数据保存,实际上这些信息都保存在了永存表空间中。

临时表空间的是用于排序操作使用,如果用户在sql中order by或group by子句时,Oracle需要对所选的数据进行排序,如果排序量较大,就需要把一些中间的排序结果保存在磁盘上,即保存在临时表空间中;

示例:创建一个mldn_data的数据表空间:此实例可使用sys账号来做,使用其它账号可能会出现权限不足的问题;

CREATE TABLESPACE mldn_data  
  
DATAFILE  'd:\mldnds\mldn_data01.dbf' SIZE 50M ,  
  
 'e:\mldnds\mldn_data02.dbf' SIZE 50M  
  
AUTOEXTEND on NEXT 2M  
  
LOGGING ; 
此sql会创建一个mldndata的数据表空间,而此表空间对应两个数据文件,data01,data02。同时这两个数据文件的初始化大小均为50m。当空间不足时,可以自动进行容量的扩容,每次扩充2M大小;
注意:此sql不会自动创建跟目录,要人工手动创建;

示例2:创建一个mldn_temp的临时表空间,创建临时表空间的关键字是tempfile

CREATETEMPORARY TABLESPACE mldn_temp  
  
TEMPFILE'd:\mldnds\mldn_temp01.dbf' SIZE 50M ,  
  
 'e:\mldnds\mldn_temp02.dbf' SIZE 50M  
  
AUTOEXTENDon NEXT 2M ; 

示例3:创建完表空间后,可以利用dba_tablespaces这个数据字典查看表空间信息

  利用dba_tablespaces查看表空间信息
SELECTtablespace_name,block_size,extent_management,status,contents FROMdba_tablespaces ;  

通过此数据字典的查询结果可以发现,此表空间为本地磁盘管理(LOCAL),mldn_data表空间为永久表空间(permanent),而mldn_temp为临时表空间;

示例4:利用dba_temp_files数据字典查看数据文件信息

SELECTtablespace_name,file_name,bytes,autoextensible FROM dba_temp_files ;  

示例5:利用dba_data_files数据字典查看数据文件信息

SELECTtablespace_name,file_name,bytes,autoextensible,online_status FROMdba_data_files ; 

使用表空间

用户在默认情况下所创建的数据表都会保存在默认表空间中(可由用户定义,默认为users表空间)。如果需要将数据表保存在不同的表空间下,可使用如下的语法:

语法:创建数据表并使用特定表空间

create table 用户名.表名称(  
  
字段名称 字段类型 default 默认值,  
  
字段名称 字段类型 default 默认值,  
  
....  
  
) tablespace 表空间名称;

示例1:用户在定义表时直接使用tablespace就可以指定要操作的表空间

创建数据表,指定表空间,此sql执行完毕之后,创建mytab会保存在mldn_data表空间中保存;
CREATE TABLE mytab(  
  
id        NUMBER ,  
  
title        VARCHAR2(50)  
  
) TABLESPACE mldn_data ; 

 

附录:Oracle中的默认表空间

Oracle默认提供的表空间,作用如下:

system表空间:在一个数据库中至少有一个表空间,即system表空间,创建数据库时必须指明表空间数据文件的特征,如数据文件名称,大小,system主要是存储数据库的数据字典,在Oracle系统表空间中存储全部的PL/SQL程序的源代码和编译后的代码。例如存储过程,函数,包,数据库触发器。如果要大量PL/SQL,就应该设置足够大的system表空间;
sysaux表空间:是system表空间的辅助表空间,许多数据库的工具和可选组件将其对象存储sysaux表空间内,它是许多数据库工具和可选组件的默认表空间;
users表空间:用于存储用户的数据;
undo表空间(undotbsi)表空间:用于事务的回滚,撤销;
temp临时表空间:用于存放Oracle运行中需要临时存放的数据,如排序的中间结果等;

 

posted @ 2017-11-11 11:25  DravenZ  阅读(512)  评论(0编辑  收藏  举报