#CREATE TABLESPACE

# 通用描述

CREATE TABLESPACE用于在数据库中创建一个新的表空间。

SYSTEM/SYSAUX/UNDO/SWAP/TEMPORARY/DEFAULT表空间在CREATE DATABASE时创建,不能用CREATE TABLESPACE语句创建。

可同时指定挂载到该表空间的数据文件(不指定时系统自动创建一个数据文件并挂载)和数据桶(bucket,对象存储目录,包含slice文件,不指定时系统不会自动创建)。在创建LSC表所属表空间时,必须同时进行数据桶挂载,否则该表空间下将无法创建LSC表,除非通过ALTER TABLESPACE语句为该表空间进行bucket挂载。

# 语句定义

create tablespace::=

syntax
CREATE TABLESPACE tablespace_name datafile_clause extent_management_clause MEMORY MAPPED databucket_clause encryption_clause

datafile_clause::=

syntax
DATAFILE file_specification ,

file_specification::=

syntax
'file_name' SIZE size_clause AUTOEXTEND OFF ON NEXT size_clause MAXSIZE UNLIMITED size_clause PARALLEL parallel

extent_management_clause::=

syntax
EXTENT AUTOALLOCATE UNIFORM SIZE size_clause

databucket_clause::=

syntax
DATABUCKET bucketurl ,

encryption_clause::=

syntax
ENCRYPTION ENCRYPT

# tablespace_name

该语句用于指定要创建的表空间的名称,不可省略,且需符合YashanDB的对象命名规范

分布式部署需注意创建的表空间的名称不可与已有的表空间集中分配的表空间名称相同,否则会返回错误。

# datafile_clause

该语句用于指定创建表空间对应的数据文件,可省略,则系统按如下规则自动创建一个数据文件:

  • 文件名称由表空间名称以及数据文件在表空间内的序号组合生成,如:tablespace_name1,tablespace_name2...,且统一转换为大写。
  • 文件的默认大小为8192个BLOCK,文件路径为系统默认的数据文件路径。
  • 对于非MEMORY MAPPED表空间,默认文件开启自动扩展,next为8192个块,maxsize为64MB个块。
  • 如果没有显式的规定extent分配方式,extent的默认分配方式为系统自动分配。

# file_specification

指定多个数据文件用,分隔,可省略,则系统将在默认的数据文件路径下创建一个以表空间名称(转换为大写)命名,大小为8192个块,开启自动扩展,每次扩展8192个块,最大可扩展到64MB个块的数据文件。 可以通过PARALELL指定创建数据文件的并行度,取值范围为1到8。 如果未指定并行度数据库会根据文件大小自适应并行度,文件不超过1G时并行度为1,文件超过128G并行度为8,文件大小在1G到128G之间时并行度为4。

# file_name

指定数据文件的名称,如名称里未包含路径,则取系统默认的数据文件路径。

分布式部署中数据文件路径仅允许使用相对路径。

# size

指定数据文件的大小,遵循通用size_clause定义。

单个数据文件最少具有128个块用于存储元信息。

UNDO表空间内的单个数据文件最多具有8MB个块,非UNDO表空间内的单个数据文件最多具有64MB个块。

数据文件的大小等于数据库块大小乘以数据文件块个数,例如当数据库块大小为8K时非UNDO表空间的单个数据文件最小值为1M,最大值为512G。

# autoextend on|autoextend off

对创建的数据文件打开|关闭自动扩展,该语句省略时默认为关闭自动扩展。当打开自动扩展时:

  • NEXT size_clause:数据文件每次自动扩展时的大小由此值指定,默认为8192个块。
  • MAXSIZE UNLIMITED/size_clause:数据文件可扩展到的最大数由此值决定,默认为64MB个块。UNLIMITED表示不限制最大值。

不能对MMS表空间指定AUTOEXTEND ON。

# parallel

当创建一个较大的数据文件时,可以通过本语句指定并行度, 提高创建大文件的速度 。不指定本语句时,系统根据文件大小自动选取并行度,例如文件不超过1G时的并行度为1,文件超过128G时的并行度为8,文件大小在1G到128G之间时的并行度为4。

parallel的值应该介于1~8之间。

示例

CREATE TABLESPACE yashan1 DATAFILE 'yashan1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G PARALLEL 2;

# extent_management_clause

该语句用于指定表空间里的对象申请extent时的空间分配方式:

  • AUTOALLOCATE:根据对象当前大小由系统自动分配extent空间。
  • UNIFORM SIZE size_clause:每次为对象分配的extent空间为固定的值。
  • 创建表空间后不能修改extent分配方式。
  • 创建undo和swap表空间不允许指定extent分配方式,只能使用UNIFORM分配方式。
  • 创建非undo和swap表空间时若不指定extent分配方式,使用AUTOALLOCATE分配方式。
  • 使用UNIFORM分配方式的表空间内的每个数据文件大小都必须大于UNIFORM SIZE。

示例

CREATE TABLESPACE yashan1 DATAFILE 'yashan1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G EXTENT UNIFORM SIZE 64K; 

# memory mapped

当指定MEMORY MAPPED关键字时,表示所创建表空间的文件的所有页面都将映射在内存中 (AIM:all in memory),YashanDB将此种类型的表空间命名为内存映射表空间(MMS:Memory mapped space)。

MMS表空间支持在数据库启动时采用预加载方式,将表空间数据全部加载到内存中,提高访问性能,具体的预加载策略通过MMS_DATA_LOADERS参数配置。

通过V$TABLESPACE视图的MEMORY_MAPPED字段可查询某个表空间是否为MMS表空间。

示例

CREATE TABLESPACE yashan2 DATAFILE 'yashan2' SIZE 4M EXTENT UNIFORM SIZE 64K MEMORY MAPPED; 
CREATE TABLESPACE yashan3 DATAFILE 'yashan3' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G PARALLEL 6 EXTENT UNIFORM SIZE 64K;  

# databucket_clause

指定对象存储目录的路径信息,指定多个路径用,分隔,每一个路径表示创建一个bucket(数据桶)。 系统将对指定的路径进行以下有效性判断:

  • 允许指定一个不存在的目录,执行本语句将创建该目录。
  • 允许指定一个已存在的目录,但该目录不能为已被其他bucket使用的路径。
  • 系统对指定的目录必须拥有写权限。

V$DATABUCKET视图将展示当前系统中所有创建的bucket信息。

示例

--如下语句将新建lsc_tb表空间,同时将在默认数据文件路径下新建lscfile1/lscfile2两个bucket,同时也将默认新建一个名称为LSC_TB0的数据文件
CREATE TABLESPACE lsc_tb DATABUCKET 'lscfile1','lscfile2';

# encryption_clause

该语句用于指定表空间加密属性,以ENCRYPTION开头。本语句可省略,表示创建的表空间为非加密表空间。 指定为ENCRYPT时,表示创建的表空间为加密表空间,即该表空间对应存储介质上的数据将被加密。YashanDB对加密表空间的约束规则如下:

  • 不能将内置表空间指定为加密表空间。
  • 对于加密表空间的表对象,在其上创建的索引和AC也必须位于某个加密表空间。
  • 加密属性在创建表空间时指定,后续不可更改。

对于分区表,系统并不限制各分区所在的表空间加密属性是否一致,在更新操作引发的数据分区移动时,该数据将依据新分区的加密属性按明文或密文存储。

示例

-- 如下语句将新建yashan1表空间,并指定为加密表空间
CREATE TABLESPACE yashan1 ENCRYPTION ENCRYPT;