#CREATE DATABASE

# 通用描述

CREATE DATABASE用于创建一个新的数据库,该语句只能在一个处于NOMOUNT状态的空实例(Instance)中执行。系统通过本语句成功创建新数据库后,同时将其启动至OPEN状态。

单机部署中,使用CREATE DATABASE语句可以创建一个新的单实例数据库。单机部署下不支持创建多实例数据库,且数据库文件路径仅支持指定为本地文件系统路径。

对于分布式部署,通过yasboot安装过程中即在所有的分布式节点上依据配置文件中指定参数创建数据库,后续不再允许在某个节点上执行本语句(除非用于故障恢复),否则将导致分布式集群出现节点不一致情况。

对于共享集群部署,可通过CLUSTER关键字创建一个新的多实例数据库,创建多实例数据库需先设置配置参数CLUSTER_DATABASE=TRUE,共享集群部署下不支持创建单机数据库,且redo、undo、swap等所有数据文件须指定为以+DG名称开头的YFS(Yashan File System)路径,否则返回错误。

创建数据库的过程中会在指定或默认位置创建物理文件,如过程中出现任何异常导致创建数据库失败时,这些已创建的文件将残留,用户需进行手动清理,未清理且使用相同文件再次CREATE DATABASE时将失败。

# 语句定义

create database::=

syntax
create_single_instance_database create_multiple_instance_database

create_single_instance_database::=

syntax
CREATE DATABASE database_name attribute_clause

attribute_clause::=

syntax
USER SYS IDENTIFIED BY password CONTROLFILES ( controlfile , ) MAXDATAFILES integer MAXDATABUCKETS integer MAXINSTANCES integer CHARACTER SET charset NATIONAL CHARACTER SET charset UNDO_SEGMENTS integer MAXLOGFILES integer MAXLOGHISTORY integer ARCHIVELOG NOARCHIVELOG DOUBLE_WRITE DATAFILE dbwfile SIZE size_clause logfiles_clause tablespace_clause

logfiles_clause::=

syntax
( logfile SIZE size_clause BLOCKSIZE size_clause , )

tablespace_clause::=

syntax
SYSTEM SYSAUX UNDO SWAP TEMPORARY DEFAULT TABLESPACE TEMPFILE DATAFILE datafiles_clause extent_clause MEMORY MAPPED databucket_clause

datafiles_clause::=

syntax
datafile SIZE size_clause AUTOEXTEND ON OFF NEXT size_clause MAXSIZE UNLIMITED size_clause ,

extent_clause::=

syntax
EXTENT AUTOALLOCATE UNIFORM SIZE size_clause

databucket_clause::=

syntax
DATABUCKET bucketurl ,

create_multiple_instance_database::=

syntax
CREATE CLUSTER DATABASE database_name INSTANCES integer attribute_clause instance_clause

instance_clause::=

syntax
INSTANCE ( logfiles_clause UNDO TABLESPACE DATAFILE datafiles_clause )

# create_single_instance_database

该语句用于创建一个单实例的数据库。

# database_name

指定要创建的数据库的名称,不可省略,且需符合YashanDB的对象命名规范

# attribute_clause

该语句用来指定创建数据库的配置。

# user sys identified by

该语句用于指定SYS用户的口令,可省略,则数据库创建后SYS用户的口令仍为初始值,并可通过ALTER USER语句并更口令。

# controlfiles

该语句用于指定创建数据库时,同时创建的控制文件,多个控制文件用,分隔,可省略,则系统根据CONTROL_FILES参数定义的默认值在磁盘上生成控制文件。YashanDB支持指定最多8个控制文件。

# maxdatafiles

该语句用于指定数据库能打开的数据文件的最大个数,该值决定了控制文件里Datafile Section所占的初始空间,可省略,则取系统默认值4096。YashanDB支持指定的最大值为16384。

# maxdatabuckets

该语句用于指定数据库能挂载的databucket的最大个数,可省略,则取系统默认值256。YashanDB支持指定的最大值为4096。

# maxinstances

该语句用于指定能同时挂载(Mount)该数据库的最大实例个数,可省略,则取系统默认值8。YashanDB支持指定的最大值为64。

# character set

该语句用于指定数据库存储数据到文件所使用的字符集,可省略,则取系统默认值UTF8。YashanDB支持指定的字符集有ASCII、GBK、UTF8、ISO8859-1。

# national character set

该语句用于指定数据库使用的国家字符集,可省略,则取系统默认值UTF16。YashanDB支持指定的国家字符集仅有UTF16。

# undo_segments

该语句用于指定数据库可自动扩展回滚段的最大个数,可省略,则为默认值64。YashanDB支持指定的最大值为256。

# maxlogfiles

该语句用于指定redo日志文件的元数据预留个数,该值决定了控制文件里Redofile Section所占的初始空间,可省略,则取系统默认值256,YashanDB支持指定的最大值为4096。该值不限制实例可创建的redo日志文件个数,当创建的redo日志个数超过该值时,控制文件可能会扩展。

# maxloghistory

该语句用于指定归档日志文件的元数据预留个数,该值决定了控制文件里Archfile Section所占的初始空间,可省略,则取系统默认值64000。YashanDB支持指定的最大值为1000000。该值不限制实例可创建的归档日志文件个数,当创建的归档日志个数超过该值时,控制文件可能会扩展。

# archivelog|noarchivelog

该语句用于指定数据库是否开启归档模式,可省略,则取系统默认值NOARCHIVELOG。

# double_write datafile dbwfile size size_clause

该语句用于指定创建数据库时,同时创建的双写文件的路径和大小,可省略,则在系统默认的数据文件路径下创建一个名称为dwf,大小为8192个BLOCK的文件。

当指定创建双写文件时文件过小会出现建库失败,双写文件的可用最小值受配置参数DBWR_BUFFER_SIZE和DBWR_COUNT影响,最小值近似公式:4 * DBWR_BUFFER_SIZE * DBWR_COUNT + 4M。

# logfile logfiles_clause

该语句用于指定创建数据库时,同时创建的redo日志文件的路径和大小,可省略,则在系统默认的数据文件路径下创建三个名称为redo1/redo2/redo3,大小为128M,BLOCKSIZE为4K的文件。

# logfiles_clause

logfile:日志文件的名称,未包含路径时,取系统默认的数据文件路径。

SIZE:日志文件的大小。

BLOCKSIZE:日志文件的页面大小。默认是4K,最小512字节,最大32K。其值一般设置为操作系统BLOCK的大小,小于系统BLOCK大小的话,会有性能影响。一般不建议修改。

# tablespace_clause

该语句用于指定创建数据库时,同时创建SYSTEM/SYSAUX/UNDO/SWAP/TEMPORARY/DEFAULT表空间,可省略,则系统按下面各项给出的缺省值创建这些表空间。

# tempfile|datafile

表空间对应的数据文件类型,其中SWAP/TEMPORARY表空间的数据文件类型缺省为TEMPFILE,其他表空间缺省为DATAFILE。

# datafiles_clause

表空间对应的数据文件名称,多个数据文件用,分隔。缺省在系统默认的数据文件路径下创建名称与表空间名称相同(DEFAULT表空间对应的数据文件名默认为users),大小为8192个BLOCK,开启自动扩展,每次扩展8192个BLOCK,最大可扩展到64MB个BLOCK(UNDO表空间为8MB个BLOCK)的数据文件。

# extent_clause

表空间对象申请extent时的空间分配方式,其中UNDO/SWAP表空间默认为UNIFORM SIZE 1个BLOCK的方式,其他表空间默认为AUTOALLOCATE(系统自动分配)。

# memory mapped

指定是否启用数据常驻内存模式,默认不启用。

# databucket_clause

当为表空间指定了DATABUCKET时,系统将按指定路径信息创建用于对象存储的目录。对于DEFAULT表空间,如未指定DATABUCKET,系统将在默认路径(local_fs)下创建users文件夹用于对象存储。

示例

CREATE DATABASE yashan;

CREATE DATABASE yashan
CHARACTER SET utf8
NATIONAL CHARACTER SET utf16
ARCHIVELOG
LOGFILE ('/home/yasdb/YASDB_DATA/dbfiles/redo1' size 2G BLOCKSIZE 512,
'/home/yasdb/YASDB_DATA/dbfiles/redo2' size 2G BLOCKSIZE 512,
'/home/yasdb/YASDB_DATA/dbfiles/redo3' size 2G BLOCKSIZE 512,
'/home/yasdb/YASDB_DATA/dbfiles/redo4' size 2G BLOCKSIZE 512)
UNDO TABLESPACE DATAFILE '?/dbfiles/undo' size 2G autoextend ON NEXT 256M MAXSIZE 64G
SWAP TABLESPACE TEMPFILE '?/dbfiles/swap' size 2G autoextend ON NEXT 256M MAXSIZE 64G
SYSTEM TABLESPACE DATAFILE 'system' size 128M MEMORY MAPPED
DEFAULT TABLESPACE DATAFILE '?/dbfiles/users' size 5G;

# create_multiple_instance_database

该语句用于在共享集群部署下创建多实例数据库。

# database_name

指定要创建的数据库的名称,不可省略,且需符合YashanDB的对象命名规范

# instances interger

该语句用于指定共享集群部署下多实例数据库的实例个数,可省略,如省略必须指定instance_clause。YashanDB支持指定的最大值为4,遵循如下规则:

  • YashanDB不支持同时指定INSTANCES和instance_clause,但须指定其中一项。

# attribute_clause

指定除redo文件和undo文件之外的数据库配置,这些属性定义与创建单实例数据库时的属性定义一致,见create_single_instance_database中的attribute_clause。

Note

共享集群部署中redo、undo、swap、default等所有数据文件路径需指定为YFS路径,否则返回错误。

# instance_clause

该语句用于指定共享集群部署下多实例数据库每个实例相关undo、redo日志文件和数据文件配置,根据所需实例个数多次指定本语句,最多支持指定4次,即创建4个实例,语句之间使用空格间隔。

示例

--通过INSTANCES关键字创建2个实例的数据库,数据库文件均为默认属性
CREATE cluster DATABASE yashan instances 2; 
--通过instance_clause语句创建2个实例的数据库,且自定义数据库文件属性
CREATE cluster DATABASE yashan
SYSTEM TABLESPACE DATAFILE 'system' size 64M
SYSAUX TABLESPACE DATAFILE 'sysaux' size 64M
DEFAULT TABLESPACE DATAFILE 'users' size 64M
TEMPORARY TABLESPACE TEMPFILE 'temp' size 64M
SWAP TABLESPACE TEMPFILE 'swap' size 64M
instance(
LOGFILE('logfile11' size 32M, 'logfile12' size 32M, 'logfile13' size 32M)
UNDO TABLESPACE DATAFILE 'undo1' size 64M
)
instance (
LOGFILE('logfile21' size 32M, 'logfile22' size 32M, 'logfile23' size 32M)
UNDO TABLESPACE DATAFILE 'undo2' size 64M
); 
--指定路径的配置
CREATE cluster DATABASE yashan
instance (
LOGFILE('+DG_0/redo1' size 128M BLOCKSIZE 512,
'+DG_0/redo2' size 128M BLOCKSIZE 512)
UNDO TABLESPACE DATAFILE '+DG_0/undo1' size 128M autoextend ON)
SWAP TABLESPACE TEMPFILE '+DG_0/swap' size 128M autoextend ON
SYSAUX TABLESPACE DATAFILE '+DG_0/sysaux' size 128M autoextend ON
SYSTEM TABLESPACE DATAFILE '+DG_0/system' size 128M autoextend ON
TEMPORARY TABLESPACE TEMPFILE '+DG_0/temp' size 128M autoextend ON
DEFAULT TABLESPACE DATAFILE '+DG_0/users' size 128M autoextend ON;