Oracle表空间

  在oracle数据库中,真正存放数据的是数据文件(datafiles),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。

Oracle表空间

  Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优。(Oracle数据库独特的高级应用)

  表空间是存储数据的地方,存储数据库对象的地方,在磁盘上对应有数据文件。

  不同于mysql有多个数据库,oracle新增了表空间和用户的概念,表空间是虚拟的,并且只有一个数据库,为了方便维护,一般一个表空间上只创建一个用户。

系统表空间和临时表空间:

  Oracle中默认有一个系统表空间,和临时表空间。如果创建用户不指定用户的表空间则默认把用户创建在系统表空间。系统表空间类似于Windows的C盘(系统盘),如果把所有软件安装在C盘是不合理的,Oracle中把用户分配在系统表空间也是不合理的。最理想的是一个用户一个表空间,在删除用户时可以删除表空间,这样管理比较好。

  临时表空间是数据库操作时临时使用,如排序去重复,统计大小等数据时使用,小规模可以在内存中完成。

  创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因。

Oracle安装完数据库的一般流程:

建表空间(分区)--> 建用户(分配相应的表空间和用户权限)--> 登录用户,建表

表空间属性:

  一个数据库可以包含多个表空间,一个表空间只能属于一个数据库一个表空间包含多个数据文件,一个数据文件只能属于一个表空间表这空间可以划分成更细的逻辑存储单元。

创建表空间:

要想创建表空间首先需要让用户拥有创建表空间的权限:

grant create tablespace to 用户名;

创建表空间:

create tablespace sp1 datafile 'sp1.dbf' size 1m;
// 大小最小为81k

  创建完表空间后会在数据库目录下创建一个sp1.dbf文件,路径:F:app86153product11.2.0dbhome_1database

创建临时表空间:

create temporary tablespace tmpsp1 tempfile ‘tmp1.dbf’ size 2m;

创建用户时默认表空间和临时表空间:

  创建用户时指定表空间,如果没有指定表空间时,创建的用户使用的是系统表空间,不建议使用系统表空间,如果用户使用自己的表空间时,可以在删除用户时把表空间也删除,这样比较彻底。当然,可以多个用户共用一个表空间,这个另当别论。

create user 用户名 identified by 用户密码 default tablespace tabsp1 temporary tablespace tmpsp1;

扩容表空间:

方法一:

如果表空间满了可以扩容,但是需要用户拥有响应的权限:

grant alter database to 用户名;

扩容表空间:

alter database datafile 'sp1.dbf' resize 2m;

方法二:

grant alter tablespace to 用户名;
// 先保证用户有相应权限
alter tablespace sp1 add datafile ‘sp22.dbf’ size 1m;
// 增加一个数据文件给表空间

删除表空间:

删除表空间,但是不包含物理文件:

drop tablespace 表空间的名字;

删除空表空间,包含物理文件:

drop tablespace 表空间的名字 including datafiles;

删除非空表空间,但是不包含物理文件:

drop tablespace 表空间的名字 including contents;

删除非空表空间,包含物理文件:

drop tablespace 表空间的名字 including contents and datafiles;

如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS

drop tablespace 表空间的名字 including contents and datafiles CASCADE CONSTRAINTS;