Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 数据库管理 » 管理数据库 » 数据库管理实用程序

 

初始化实用程序 (dbinit)

创建新数据库。

语法
dbinit [ options ] new-database-file
选项 说明
@data

读取来自指定的环境变量或配置文件的选项。请参见使用配置文件

如果要保护口令或配置文件中的其它信息,可以使用文件隐藏实用程序对配置文件的内容进行模糊处理。请参见文件隐藏实用程序 (dbfhide)

-a

如果对 CHAR 或 NCHAR 数据类型使用 UCA(Unicode 归类算法)(请参见 -z 和 -zn),使用该选项可以在进行字符串比较时考虑字母间重音的差异(例如,e 小于 é)。除使用 UCA 归类创建的日文数据库外,缺省情况下会忽略重音差异(也就是说 e 等于 é)。如果所有基本字母(去除了重音和大小写的字母)均相等,则从左向右 来比较重音。

创建日文数据库时 UCA 归类的区分重音缺省值为区分。也就是说,会考虑重音。请参见Unicode 归类算法 (UCA)

-af

如果对 CHAR 或 NCHAR 数据类型使用 UCA(请参见下文的 -z 和 -zn),使用该选项可以在进行字符串比较时考虑字母间重音的差异(例如,e 小于 é)。缺省情况下会忽略重音差异(也就是说 e 等于 é)。如果所有基本字母(去除了重音的字母)均相等,则按照法语规则从右向左 来比较重音。

有关详细信息,请参见Unicode 归类算法 (UCA)

-b

用空白填充数据库。

SQL Anywhere 在比较所有字符串时都会将它们视为具有可变的长度并存储在 VARCHAR 域。这包括涉及固定长度 CHAR 或 NCHAR 列的字符串比较。此外,当数值存储于数据库中时,SQL Anywhere 不会截断或添加尾随空白。

缺省情况下,SQL Anywhere 将空白视为有效字符。因此,值 'a '(后跟一个空格的字符 'a')不等同于单个字符串 'a'。不等比较还会将空白与归类中的任何其它字符同等看待。

如果启用空格填充(dbinit -b 选项),则字符串比较的语义更符合 ANSI/ISO SQL 标准。启用空格填充后,SQL Anywhere 会在所有比较中忽略尾随空白。

在上例中,在采用空格填充的数据库中 'a ' 与 'a' 的相等比较会返回 TRUE。对于采用空格填充的数据库,固定长度的字符串值在由应用程序读取时会以空白进行填充。ansi_blanks 连接选项可控制应用程序针对此类赋值是否会收到字符串截断警告。请参见ansi_blanks 选项 [兼容性]

-c

在比较操作和字符串操作中将所有值都视为是区分大小写的。数据库中的标识符不区分大小写,即使在区分大小写的数据库中也是如此。

除使用 UCA 归类创建的日文数据库外,其缺省行为是所有比较都不区分 大小写。创建日文数据库时 UCA 归类的区分大小写的缺省值为区分 大小写。

用作 QAnywhere 服务器存储库的数据库应区分大小写。

提供此选项是为了与 ISO/ANSI SQL 标准兼容。

-dba [ DBA-user ][ ,pwd ]

指定 DBA 用户 ID 和口令。如果为数据库 DBA 用户指定新的名称,即无法再以用户 DBA 身份连接到数据库。您也可以为 DBA 数据库用户指定一个不同的口令。如果不指定口令,则使用缺省口令 sql。如果不指定此选项,则将以口令 sql 创建缺省的用户 ID DBA。

下面两条命令都将创建一个数据库,其 DBA 用户名为 testuser,使用缺省口令 sql:

dbinit -dba testuser mydb.db

dbinit -dba testuser, mydb.db

以下命令使用缺省用户 ID DBA 和口令 mypwd:

dbinit -dba ,mypwd mydb.db

以下命令将 DBA 用户更改为 user1,口令为 mypwd:

dbinit -dba user1,mypwd mydb.db

建议采用由 7 位 ASCII 字符组成的口令,因为如果服务器不能将客户端的字符集转换为 UTF-8,其它字符可能会无法正常工作。

-dbs size[ k | m | g | p ]

为数据库预分配空间。预先为数据库分配空间有助于降低数据库所在驱动器空间不足的风险。而且,它还可以在数据库服务器有数据库扩充需要之前增加数据库的可存储数据量,从而有助于提高各项性能。扩充数据库是一项非常耗时的操作。

缺省情况下,size 以字节为单位。可以分别使用 kmgp 将单位指定为千字节、兆字节、千兆字节或页数。

-ea algorithm

指定用于数据库或表加密 (-et) 的加密算法。指定 -ea simple 可进行简单加密(不要指定 -ek 或 -ep)。简单加密等效于模糊处理,其目的只是为了使数据处于隐藏状态,以防有人意外地直接访问数据库文件,从而使要破译数据库中数据的人难于使用磁盘实用程序查看文件。

为获得更高的安全性,可指定 AES 或 AES256 以分别实现 128 位或 256 位高度加密。指定 AES_FIPS 或 AES256_FIPS 以分别实现 128 位或 256 位 FIPS 认可的高度加密。对于高度加密,还必须指定 -ek 或 -ep 选项。有关高度加密的详细信息,请参见高度加密

要创建未加密的数据库,请指定 -ea none 或者不包含 -ea 选项(并且不要指定 -et、-ep 或 -ek)。

如果未指定 -ea 选项,则缺省行为如下:

  • 如果未指定 -ek、-ep 或 -et,则为 -ea none
  • 如果指定了 -ek 或 -ep(带或不带 -et),则为 -ea AES
  • 如果指定了 -et,而未指定 -ek 或 -ep,则为 -ea simple

算法名称是不区分大小写的。

在 Windows Mobile 上,仅 ARM 处理器支持 AES_FIPS 和 AES256_FIPS 算法。

以下命令会创建一个高度加密的数据库,并指定加密密钥和算法。

dbinit -ek "0kZ2o56AK#" -ea AES_FIPS "myencrypteddb.db"

文件压缩实用程序在压缩加密数据库文件时,无法达到未加密数据库文件那样的压缩程度。

需要单独授予许可的组成部分

ECC 加密和 FIPS 认证的加密需要单独的许可。所有高度加密技术受出口法规约束。

请参见单独授权的组件

-ek key

通过直接在命令中指定加密密钥,来指定您希望创建高度加密的数据库。-ek 选项和 AES 算法一起使用,可选择使用 -ea 选项来指定该算法。如果您指定了 -ek 选项而没有指定 -ea 选项,则缺省情况下使用 AES 算法。

如果同时也指定 -et,则不会将数据库加密,而是启用表加密。请参见表加密

小心

对于高度加密的数据库,请务必将密钥的副本保存在安全的位置。如果丢失了加密密钥,就没有办法访问数据,即使有技术支持人员协助也不行。此时必须放弃该数据库并创建一个新的数据库。

-ep

指定您希望通过在窗口中输入加密密钥来创建高度加密的数据库。这样,加密密钥决不会以明文显示,从而提供了额外的安全保证。

加密密钥必须输入两次,以确认密钥的输入是正确的。如果密钥不匹配,则初始化失败。

如果同时也指定 -et,则不会将数据库加密,而是启用表加密。

有关详细信息,请参见高度加密

-et

使用为 -ea 选项指定的加密算法(和密钥)启用表加密。此选项在需要创建加密表时使用,而不是在加密整个数据库时使用。如果同时指定 -et 与 -ek 或 -ep 而不是 -ea,将缺省采用 AES 算法。如果仅指定 -et,则采用简单加密。

启用表加密并不表示您的表就会被加密。您必须在创建数据库后分别加密每张表。请参见加密表

启用表加密时,将对加密表的表页、相关联的索引页和临时文件页加密,并对包含有关加密表的事务的事务日志页加密。

以下示例会创建为表启用了高度加密的数据库 new.db,该加密使用密钥 abc 和 AES_FIPS 加密算法:

dbinit -et -ek abc -ea AES_FIPS new.db
-i

从数据库中排除 jConnect 系统对象。如果要使用 jConnect JDBC 驱动程序来访问系统目录信息,则需要安装 jConnect 目录支持(缺省情况下会安装)。指定此选项后,只要不访问系统信息,就仍然可以使用 JDBC。以后需要 jConnect 支持时,可以使用 Sybase Central 或 ALTER DATABASE 语句来添加它。

有关详细信息,请参见在数据库中安装 jConnect 系统对象

如果要创建在 Windows Mobile 上使用的数据库,请参见在 Windows Mobile 上使用 jConnect

-k 不创建 SYSCOLUMNS 视图和 SYSINDEXES 视图。缺省情况下,在创建数据库时会生成视图 SYS.SYSCOLUMNS 和 SYS.SYSINDEXES,以便与 Watcom SQL(本软件的版本 4 及更低版本)中所提供的系统表兼容。这些视图与 Sybase Adaptive Server Enterprise 兼容性视图 dbo.syscolumns 和 dbo.sysindexes 冲突。
-l 列出推荐的归类序列,然后停止。不创建数据库。在 Sybase Central 的 [创建数据库向导] 中,自动提供可用归类序列的列表。
-le

列出可用字符集编码,然后停止。不创建数据库。每个字符集编码由一个或多个标签标识。这些是可用于标识编码的字符串。所显示的每一行文本会列出用于标识编码的编码标签和替代标签。这些标签分为几种常用类别:SA(SQL Anywhere 标签)、IANA(Internet 编号授权委员会)、MIME(多用途 Internet 邮件扩展)、ICU(Unicode 的国际组件)、JAVA 或 ASE (Adaptive Server Enterprise)。

如果想要查看包含替换标签的字符集编码列表,请指定 -le+ 选项。

当初始化实用程序报告字符集编码时,它始终报告 SQL Anywhere 版本的标签。例如,以下命令会报告 CHAR 字符集编码 windows-1250:

dbinit -ze cp1250 -z uca test.db
-m filename 创建一个事务日志镜像。事务日志镜像是与事务日志完全相同的一个副本,通常在单独的设备上进行维护,以便更好地保护您的数据。缺省情况下,SQL Anywhere 不使用事务日志镜像。
-n 创建一个没有事务日志的数据库。创建没有事务日志的数据库可节省磁盘空间,但将导致性能较差,因为每次提交都会执行检查点操作。而且,如果数据库损坏并且运行时没有事务日志,数据将无法恢复。事务日志是数据复制所必需的,可在出现介质故障或系统故障时为数据库信息提供额外的安全保护。
-o filename 将输出消息写入指定的文件中。
-p page-size

指定数据库的页面大小。数据库的页面大小可以是(以字节为单位)2048、4096、8192、16384 或 32768,缺省值是 4096。

较大的页面大小对于大型数据库而言更有益。例如,由于一次读取一整页,因此扫描表所需的 I/O 操作数通常较少。但是,较大的页面大小会导致额外的内存要求。强烈建议在选择页面大小时进行性能测试(和一般测试)。然后选择可以产生满意结果的最小的页面大小。对于大多数应用程序,建议不要使用 16 KB 或 32 KB 页面大小。只有确定始终可以使用大容量的数据库服务器高速缓存,而且,只有在对内存和磁盘空间与其性能特点进行了权衡之后,才可以在生产系统中使用 16 KB 或 32 KB 的页面大小。如果要在同一服务器上启动大量数据库,请选择一个合理的页面大小。

有关详细信息,请参见:

-q 以安静模式运行—不显示消息。
-s

向数据库页添加校验和。校验和用于确定是否在磁盘上已修改了数据库页。在您创建启用校验和的数据库时,在将每一页写入磁盘前为其计算校验和。下次从磁盘中读取该页时,就会重新计算该页的校验和,并将其与该页上存储的校验和进行比较。如果校验和不同,说明页面在磁盘上已被修改或损坏,因此会产生一个错误。无论是否指定 -s,数据库服务器都会对重要的数据库页面进行校验和检查。

系统会自动为在 Windows Mobile 以及存储设备(例如可移动驱动器)上运行的数据库启用校验和,以帮助在数据库损坏时尽早地将其检测出来。

-t transaction-log-name 指定事务日志文件的名称。事务日志是数据库服务器用来记录所有用户所做的所有更改的文件,无论使用哪个应用程序。在备份和恢复(请参见事务日志)以及数据复制中,事务日志起着重要的作用。如果文件名没有路径,它将被放在与数据库文件相同的目录中。如果运行 dbinit 但不指定 -t 或 -n,则会创建与数据库文件同名的事务日志,但其扩展名为 .log
-z coll [ collation-tailoring-string ]

指定数据库的归类序列。归类序列用于字符数据类型(CHAR、VARCHAR 和 LONG VARCHAR)的排序和比较。归类为所使用的编码(字符集)提供字符比较和排序信息。谨慎选择归类非常重要。一旦数据库创建完毕,如果不卸载并重装数据库,就无法更改归类。如果不指定归类,SQL Anywhere 会根据操作系统语言和字符集选择一种归类。请参见:

您还可以指定归类定制选项 (collation-tailoring-string),以便能够对字符的排序和比较进行更多的控制。这些选项采用 "关键字=值" 对的形式,包括在圆括号内,位于归类名后。例如:

dbinit -c -z uca(locale=es;case=LowerFirst) spanish2.db

请参见归类定制选项

若指定了这两者,则 collation-tailoring-string 中指定的大小写和重音设置会替换 dbinit(-c、-a 和 -af)的大小写和重音选项。

注意

通过归类定制选项初始化的数据库无法通过 10.0.1 之前版本的数据库服务器启动。

-ze encoding

为归类指定编码。通过 -z 所指定的大多数归类都会规定出编码(字符集)和排序信息。对于这些归类,不应指定 -ze。

如果 -z 所指定的归类为 UCA(Unicode 归类算法),则 -ze 可以针对 CHAR 数据类型指定 UTF-8 或任何单字节编码。缺省情况下,SQL Anywhere 会使用 UTF-8。使用 -ze 可以指定特定于区域设置的编码并利用 UCA 进行比较和排序。

-zn coll [ collation-tailoring-string ]

指定用于排序和比较国家字符数据类型(NCHAR、NVARCHAR 和 LONG NVARCHAR)的归类序列。该归类为所用的 UTF-8 编码(字符集)提供字符排序信息。其值为 UCA(缺省值)或 UTF8BIN(提供编码大于 0x7E 的所有字符的二进制排序)。如果未安装 dbicu11 和 dbicudt11 DLL,那么缺省 NCHAR 归类为 UTF8BIN。有关详细信息,请参见选择归类

您还可以指定归类定制选项 (collation-tailoring-string),以便能够对字符的排序和比较进行更多的控制。这些选项采用 "关键字=值" 对的形式,包括在圆括号内,位于归类名后。例如:

dbinit -c -zn UCA(case=LowerFirst) sens.db

请参见归类定制选项

若指定了这两者,则 collation-tailoring-string 中指定的大小写和重音设置会替换 dbinit(-c、-a 和 -af)的大小写和重音选项。

注意

通过归类定制选项初始化的数据库无法通过 10.0.1 之前版本的数据库服务器启动。

注释

有若干个数据库属性在初始化时指定。除非卸载、重新初始化和重建整个数据库,否则以后无法更改这些属性。这些数据库属性包括:

例如,可按如下所示创建页面大小为 8192 字节的数据库 test.db

dbinit -p 8192 test.db

您不能将数据库命名为 utility_db。该名称已保留供实用程序数据库使用。请参见使用实用程序数据库

当在初始化命令中指定归类定制选项时,如果数据库不区分大小写或重音,将无法为标点符号区分指定四进制。

另外,在进行初始化时选择是否使用事务日志和事务日志镜像。此选择可以在以后使用事务日志实用程序或 ALTER DATABASE 语句进行更改。

需要单独授予许可的组成部分

ECC 加密和 FIPS 认证的加密需要单独的许可。所有高度加密技术受出口法规约束。

请参见单独授权的组件

还可以通过以下方法来创建数据库:

注意

当部署应用程序时,需要使用个人数据库服务器 (dbeng11),通过 dbinit 实用程序来创建数据库。如果在没有运行其它数据库服务器时,从本地计算机的 Sybase Central 创建数据库,也需要使用个人数据库服务器。

退出代码是零(成功)或非零(失败)。请参见软件组件的退出代码

示例

以下命令创建区分大小写的数据库 spanish.db,它对非 NCHAR 数据使用 1262spa 归类。对于 NCHAR 数据,指定 UCA 归类,地区设置为 es,并且按小写字母在前排序。

dbinit -c -z 1252spa -zn uca(locale=es;case=LowerFirst) spanish.db