Oracle 表空间(tablespace)

Oracle 表空间(tablespace)

​ 在oracle中,表空间是Oracle数据对象和数据存储的容器,是一个逻辑概念。若干操作系统文件就可以组成一个表空间。表空间统一管理空间中的数据文件(通常,文件的后缀名是dbf),一个数据文件只能属于一个表空间;而一个数据库空间由若干个表空间组成。表空间是ORACLE数据库恢复的最小单位。

Oracle表空间之作用

表空间的作用能帮助DBA用户完成以下工作:

1.决定数据库实体的空间分配;

2.设置数据库用户的空间份额;

3.控制数据库部分数据的可用性;

4.分布数据于不同的设备之间以改善性能;

5.备份和恢复数据。

​ 用户创建其数据库实体时,必须给予表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该:

1.被授予关于一个或多个表空间中的RESOURCE特权(角色);

2.被指定缺省表空间;

3.被分配指定表空间的存储空间使用份额;

4.被指定缺省临时段表空间,建立不同的表空间,设置最大的存储容量。

Oracle 12c数据库系统默认创建的空间及其对应的默认用户如下表:

表空间名称 对应的默认用户 功能
SYSTEM SYS、SYSTEM、OUTLN、LBACSYS 创建数据库时自动创建的表空间,存储系统重要的数据库对象,例如数据库的数据字典、系统的管理信息、系统存储过程和系统回退段等
SYSAUX APEX_040200、DVF、MDSYS、OLAPSYS、CTXSYS、DVSYS、ORDDATA、FLOWS_FILES、GSMADMIN_INTERNAL、ORDPLUGINS、DBSNMP、ORDSYS、APPQOSSYS、XDB、SI_INFORMTN_SCHEMA、WMSYS、ANONYMOUS 是SYSTEM表空间的一个辅助表空间,一些与Oracle特性相关的对象,例如LogMiner、CTX、Streams等创建对象都保存在该表空间中。SYSAUX表空间用于减少SYSTEM表空间的负荷,提高系统的作业效率。这个表空间是在创建数据库时自动创建的,主要用于存放数据库组件,一般不用于存储用户数据,由Oracle系统内部自动维护。如果SYSAUX表空间不可用时,数据库的核心功能还是可以继续运行的,只是一些存放在SYSAUX表空间里的功能受到限制
USERS SYSKM、XS$NULL、DIP、SPATIAL_WFS_ADMIN_USR、GSMUSER、GSMCATUSER、SPATIAL_CSW_ADMIN_USR、SYSBACKUP、AUDSYS、ORACLE_OCM、OJVMSYS、APEX_PUBLIC_USER、MDDATA、SYSDG 是用户的默认永久性表空间,用于存储永久用户对象和私有信息
UNDOTBS1 UNDOTBS1为数据库的撤消表空间,用于在自动撤消管理方式下存储撤消信息。在此空间存储对数据库进行修改操作之前的数据,用于数据恢复。在撤消表空间中,除了回退段以外,不能建立任何其他类型的段。所以,用户不可以在撤消表空间中创建数据库对象
TEMP TEMP为临时表空间,用于存放临时数据,例如存储排序时产生的临时数据。一般情况下,数据库中的所有用户都使用temp作为默认的临时表空间。临时表空间本身不是临时存在的,而是永久存在的,只是保存在临时表空间中的段是临时的。临时表空间的存在,可以减少临时段与存储在其他表空间中的永久段之间的磁盘I/O争用

表空间的模式(状态):

处于读写(Read/write)状态的表空间任何拥有表空间配额并有权限的用户都可以读写该表空间中的数据;

处于只读(Read-only)状态的表空间任何用户无法向该表空间写入数据,也无法修改其中已有的数据。

脱机(offline)有4种模式:正常、临时、立即、用于恢复。

默认情况下所有表空间的状态都是读写状态。

Oracle创建表空间语法结构:

​ 创建表空间使用CREATE TABLESPACE语句,创建的用户必须拥有CREATE TABLESPACE系统权限。语法格式为:

CREATE [temporary] TABLESPACE <表空间名>
   DATAFILE∣TEMPFILE '<文件路径>/<文件名>' [SIZE <文件大小> [ K∣M ]][ REUSE ]
   [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小> [ K∣M ]]
   [ MAXSIZE [ UMLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ] ]
   [ MINMUM EXTENT <数字值>[ K | M ] ]
   [ DEFAULT <存储参数>]
   [ ONLINE∣OFFLINE ]
   [ LOGGING∣NOLOGGING ]
   [ PERMANENT∣TEMPORARY ]
   [ EXTENT MANAGEMENT [ DICTIONARY∣LOCAL [ AUTOALLOCATE∣UNIFORM [ SIZE <数字值>[ K∣M ] ] ] ] ]

其中,

[TEMPORARY]: 表示构建的临时表空间,如果是临时表空间则需要用 TEMPFILE 指定文件路径。

**[AUTOEXTEND ON NEXT N1 MAXSIZE M /OF ]:**表示表空间是否是自动扩展的,ON 为自动扩展,OF为不扩展,当自动扩展时,NEXT N1表示自动扩展的大小,MAX SIZE M 表示数据文件最大扩展到M大小。

**[PERMANENT] :**表示创建的表空间的类型,PERMANENT表示永久表空间,不填都是默认永久表空间。

**[EXTENT MANAGEMENT LOCAL/DICTIONARY]:**表示表空间管理的方式,LOCAL表示本地的管理模式,DICTIONARY表示数据字典管理模式,默认都是本地管理方式。

例:

create tablespace student
datafile 'C:APPADMINORADATAORCLstudent.DBF'
size 100m
autoextend on next 10m maxsize 500m
permanent
extent management local;

说明:创建一个student表空间,指定了数据文件为“C:APPADMINORADATAORCLstudent.DBF”,表空间是自动扩展的,每次自动扩展大小为10M,最大扩展到500M,创建的是永久表空间,用来存储student用户的数据库对象和数据,管理模式为本地管理。

通过查看数据字典dba_data_files和dba_tablespaces,可对表空间进行查询,查询代码如下:

select t.TABLESPACE_NAME, --表空间名
       t.FILE_NAME, --文件名
       t.AUTOEXTENSIBLE, --是否自动扩展
       t.BYTES / 1024 / 1024, --表空间初始大小
       t.MAXBYTES / 1024 / 1024, --表空间最大扩展到多少
       b.CONTENTS, --表空间类型
       b.EXTENT_MANAGEMENT --表空间管理模式
from dba_data_files t, dba_tablespaces b
where t.TABLESPACE_NAME = b.TABLESPACE_NAME

修改表空间

​ ALTER TABLESPACE命令可以修改现有的表空间或它的一个或多个数据文件。可以为数据库中每一个数据文件指定各自的存储扩展参数值;Oracle 12c会在自动扩展数据文件时使用这些参数。语法格式为:

 ALTER TABLESPACE <表空间名>
 [ ADD DATAFILE∣TEMPFILE  '<路径>/<文件名>' [ SIZE <文件大小> [ K∣M ] ]
 [ REUSE ]
   [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小>  [ K∣M ] ] ] ]
   [MAXSIZE [ UNLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ]
   [ RENAME DATAFILE '<路径>/<文件名>',…n TO '<路径>/<新文件名>'',…n ]
   [ DEFAULT STORAGE <存储参数>]
   [ ONLINE∣OFFLINE [ NORMAL∣TEMPORARY∣IMMEDIATE ] ]
   [ LOGGING∣NOLOGGING ]
   [ READ ONLY∣WRITE ]
   [ PERMANENT ]
   [ TEMPORARY ]

删除表空间

​ 如果不再需要表空间和其中保存的数据,可以使用DROP TABLESPACE语句删除已经创建的表空间。语法格式为:

DROP TABLESPACE <表空间名>
   [ INCLUDING CONTENTS [ {AND | KEEP} DATAFILES ]
   [ CASCADE CONSTRAINTS ]
   ]

其中:

DROP TABLESPACE:删除表空间的关键字。

[INCLUDING CONTENTS]:表示在删除表空间的时候把表空间中的数据文件一并删除。

[CASCADE CONSTRAINTS]:表示在删除表空间的时候把表空间的完整性也一并删除。比如表的外键,和触发器等就是表的完整性约束。

表空间的使用

建立用户时指定表空间:

create user <用户名> identified by <密码>
[default tablespace <默认表空间名>]
[temporary tablespace <临时表空间名>]
[profile DEFAULT] - -使用默认数据文件
[account lock|unlock];		--修改锁定状态(LOCK|UNLOCK )

建立表时指定表空间:

create table <表名>
(
  <列名>   <类型>(精度),
  ...
)
tablespace <表空间名>