#CREATE DATABASE

# 通用描述

CREATE DATABASE用于创建一个新的数据库。该语句只能用于一个处于NOMOUNT状态的空实例(Instance)。创建完新数据库后,该实例会将数据库启动至OPEN状态。

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

分布式部署中用户无法执行本语句。

# 语句定义

create database::=

syntax
CREATE DATABASE database 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 LOGFILE logfiles_clause DOUBLE_WRITE DATAFILE dbwfile SIZE size_clause tablespace_clause USER SYS IDENTIFIED BY password CONTROLFILES ( controlfile , ) MAXDATAFILES integer MAXDATABUCKETS integer MAXINSTANCES integer CHARACTER SET charset UNDO_SEGMENTS integer MAXLOGFILES integer MAXLOGHISTORY integer ARCHIVELOG NOARCHIVELOG LOGFILE logfiles_clause DOUBLE_WRITE DATAFILE dbwfile SIZE size_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 ,

# database

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

# user sys identified by

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

# controlfiles

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

# maxdatafiles

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

# maxdatabuckets

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

# 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。

# logfile logfiles_clause

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

# logfiles_clause

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

SIZE:日志文件的大小。

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

# double_write datafile dbwfile size size_clause

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

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

# 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)的数据文件。

# databucket_clause

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

# extent

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

# memory mapped

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

示例

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;