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 服务器 - 数据库管理 » 管理数据库 » 数据库管理实用程序

 

卸载实用程序 (dbunload)

将数据库卸载到 SQL 命令文件中。

语法
dbunload [ options ] [ directory ]
选项 说明
@data

从指定的环境变量或配置文件中读入选项。请参见使用配置文件

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

-ac "keyword=value; ..."

连接现有数据库并直接将数据重装到其中,它将卸载某个数据库并将结果重装到一个现有数据库中的操作结合起来。在 Windows Mobile 中不支持此选项。

例如,可以使用初始化实用程序创建一个新数据库,然后使用此选项进行重装。在希望更改初始化选项时,这一方法非常有用。

以下命令(所有内容应在一行中输入)将 c:\mydata.db 数据库的副本装载到名为 c:\mynewdata.db 的现有数据库文件中:

dbunload -c "UID=DBA;PWD=sql;DBF=c:\mydata.db"
         -ac "UID=DBA;PWD=sql;DBF=c:\mynewdata.db"

如果原始数据库是使用 SQL Anywhere 版本 9 或更早版本创建的,并且新数据库尚未运行,则必须在 -ac 选项中提供数据库服务器的名称。例如:

dbunload -c "UID=DBA;PWD=sql;DBF=c:\mydata.db"
          -ac "UID=DBA;PWD=sql;DBF=c:\mynewdata.db;ENG=newserver"

如果使用此选项,则不会在磁盘上创建数据的中间副本,因而无需在命令行中指定卸载目录。这为数据提供了更高的安全性。

-an database

使用此选项可将卸载数据库、创建新数据库和装载数据这三个操作组合起来。此选项在 Windows Mobile 上不受支持,在 Intel 的 Mac OS X 上重建版本 9 或更早版本的数据库时也不受支持。

在创建源数据库时所指定的选项将用于创建新的数据库。但是,可以根据需要通过指定其它受支持的 dbunload 选项来更改初始化选项(例如指定 -ap 以更改页面大小或指定 -et 以启用表加密)。

例如,以下命令(所有内容应在一行中输入)将创建名为 mydatacopy.db 的新数据库文件,并将 mydata.db 的模式和数据复制到其中:

dbunload -c "UID=DBA;PWD=sql;DBF=c:\mydata.db"
         -an c:\mydatacopy.db

如果使用此选项,则不会在磁盘上创建数据的中间副本,因而无需在命令行中指定卸载目录。这为数据提供了更高的安全性。

在创建新数据库时,如果新数据库的 dbspace 文件与原数据库的 dbspace 文件位于同一目录中,新的 dbspace 文件名的末尾会附加一个 R 字母,以避免文件名冲突。例如,如果所卸载数据库在文件 library.db 中的 dbspace 称为 library,则新数据库的 library dbspace 为 library.dbR

-an 所指定的文件相对于数据库服务器。

-ap size 设置新数据库的页面大小。除非另外指定了 -an 或 -ar,否则将忽略此选项。数据库的页面大小(以字节为单位)可以是 2048、4096、8192、16384 或 32768,缺省值为原数据库的页面大小。必须使用该选项指定 -an 或 -ar。如果数据库服务器上已有数据库在运行,则服务器的页面大小(使用 -gp 选项设置)必须大到足以处理新的页面大小。请参见-gp 服务器选项
-ar [ directory ]

以旧数据库的设置创建新数据库,重装新数据库,并替换旧数据库。但是,可以根据需要通过指定其它受支持的 dbunload 选项来更改初始化选项(例如指定 -ap 以更改页面大小或指定 -et 以启用表加密)。

如果您使用此选项,则不能有到该数据库的其它连接,且数据库连接必须是本地的,而不是在网络上。此选项在 Windows Mobile 上不受支持,在 Intel 的 Mac OS X 上重建版本 9 或更早版本的数据库时也不受支持。

如果指定可选的 directory,则事务日志偏移会因复制目的而被重置,来自旧数据库的事务日志会被移动到指定的目录中。指定的目录应该是保存由 [消息代理] 和 [复制代理] 使用的旧事务日志的目录。只有在数据库参与到复制中时,才会进行事务日志管理:如果没有 SQL Remote 发布者或 LTM 检查,则不需要旧事务日志,旧事务日志会被删除,而不会复制到指定的目录中。请参见备份参与同步和复制的数据库

在创建新数据库时,如果新数据库的 dbspace 文件与原数据库的 dbspace 文件位于同一目录中,新的 dbspace 文件名的末尾会附加一个 R 字母,以避免文件名冲突。例如,如果所卸载数据库在文件 library.db 中的 dbspace 称为 library,则新数据库的 library dbspace 为 library.dbR

在重建加密的数据库时,用于原数据库和新数据库的加密密钥必须相同。

使用 -ar 选项将数据库截断点重置为零。

-c "keyword=value; ..."

指定源数据库的连接参数。有关连接参数的说明,请参见连接参数。用户 ID 应具有 DBA 权限以确保用户有权访问数据库中的所有表。

例如,以下语句将卸载示例数据库,它会以用户 ID DBA 和口令 sql 进行连接。这些数据被卸载到 c:\unload 目录中。

dbunload -c "DBF=samples-dir\demo.db;UID=DBA;PWD=sql" c:\unload

有关 samples-dir 的信息,请参见示例目录

-cm { sql | dbinit }

在服务器消息窗口中显示 CREATE DATABASE 或 dbinit 命令,以创建一个与正在卸载的数据库相同的数据库。如果另外还指定了 -an,则显示的命令是用于创建新数据库的命令。

  • sql   显示写入到 reload.sql 文件的 CREATE DATABASE 语句。

  • dbinit   显示初始化实用程序 (dbinit) 命令。

针对现有的强加密数据库显示该语句或命令时(未指定 -an),无法从数据库获得加密密钥,因此,将在 ENCRYPTED 子句或 -ek 选项中出现一个问号 (?)。

如果卸载一个使用版本 10 或更早版本数据库服务器创建的数据库,则不会显示创建命令或语句。
-cp 通过将 COMPRESSED 关键字附加到它所执行的 UNLOAD TABLE 语句中来压缩表数据输出文件。与 -an 或 -ar 选项一同指定时,此选项无效。
-d 如果使用此选项,将不会生成任何数据库定义命令(CREATE TABLE、CREATE INDEX,等等);reload.sql 中只包含用于重装数据的语句。
-dc

强制重新计算数据库中所有计算列。缺省情况下,计算列的值不会被重新计算。指定 -dc 选项后,reload.sql 脚本中会加入一个新的代码段,用以对计算列进行重新计算。添加的语句形式如下。

ALTER TABLE "owner"."table-name"
ALTER "computed-column" SET COMPUTE (compute-expression);

如果表中包含上下文相关的计算值(例如 CURRENT DATE),建议使用 ALTER TABLE 语句来对计算列的值进行重新计算,而不应使用 -dc 选项。请参见ALTER TABLE 语句

-e table, ...

reload.sql 文件中排除指定的表。表名始终不区分大小写,即使在区分大小写的数据库中也是如此。

使用 -e 选项创建的 reload.sql 文件不应用于数据库的重建,因为该文件并不包含所有的数据库表。如果有外键引用某个表,则必须有该表的内容才能重建数据库。

建议只将 -e 选项和 -d 选项一起使用,用以卸载除 -e 所指定表外的所有表的数据。

-ea algorithm

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

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

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

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

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

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

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

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

请参见单独授权的组件

-ek key

如果卸载并重装数据库(使用 -an 选项),则可以使用此选项在 dbunload 命令中为新建的数据库指定加密密钥。如果您创建高度加密的数据库,则必须提供加密密钥,以便能够以任何方式使用数据库或事务日志。用于加密数据库的算法是由 -ea 选项指定的算法。如果您指定了 -ek 选项而没有指定 -ea,则使用 AES 算法。请参见高度加密

请保护密钥。请务必将密钥副本存储在一个安全的位置。丢失密钥将导致数据库完全无法访问,而且也无法对数据库进行恢复。

-ep

如果使用 -an 选项卸载并重装数据库,则可以使用此选项提示为新建的数据库指定加密密钥。这样,加密密钥决不会以明文显示,从而提供了额外的安全保证。如果指定 -ep 选项但不指定 -an 选项,则忽略 -ep 选项。如果指定 -ep 和 -an,则必须输入两次加密密钥,以确保正确地输入了密钥。如果两次输入的密钥不匹配,则卸载将失败。请参见高度加密

-er

在卸载过程中,从加密表中删除加密。

在重建已启用表加密的数据库时,必须指定 -er 或 -et 来指明新数据库是否启用表加密,否则在尝试向该新数据库装载数据时可能会出错。

以下命令将拥有加密表的数据库 (mydata.db) 卸载到不启用表加密的新数据库 (mydatacopy.db) 中,即删除了所有加密表的加密:

dbunload -an c:\mydatacopy.db -er 
         -c "UID=DBA;PWD=sql;
         DBF=c:\mydata.db;
         DBKEY=29bN8cj1z"
-et

在新数据库中启用数据库表加密(还必须指定 -an 或 -ar)。如果指定 -et 选项但未指定 -ea 选项,将会使用 AES 算法。如果指定 -et 选项,就必须也指定 -ep 或 -ek。可以将新数据库的表加密设置更改为与所卸载的数据库不同的设置。

在重建已启用表加密的数据库时,必须指定 -er 或 -et 来指明新数据库是否启用表加密,否则在尝试向该新数据库装载数据时可能会出错。

下面的示例将含有简单加密算法加密表的数据库 (mydata.db) 卸载到启用表加密的新数据库 (mydatacopy.db) 中,采用 AES_FIPS 加密算法,密钥为 34jh:

dbunload -an c:\mydatacopy.db -et -ea AES_FIPS
         -ek 34jh
         -c "UID=DBA;PWD=sql;DBF=c:\mydata.db"
-g

实例化视图   缺省情况下,执行重装操作后不会初始化定义为 MANUAL REFRESH 的实例化视图。如果想将这些实例化视图作为重装过程的一部分进行初始化,则应指定 -g 选项。指定 -g 选项会导致数据库服务器执行 sa_refresh_materialized_views 系统过程。请参见sa_refresh_materialized_views 系统过程

在决定是否使用 -g 选项时,需考虑到如果初始化所有实例化视图可能会大大延长完成重装过程的时间。另一方面,如果不使用 -g 选项,意味着第一个尝试使用未初始化的实例化视图的查询必须等待数据库服务器对该视图进行初始化,这可能会导致意外的延迟。如果不使用 -g 选项,也可以在重装完成后手工初始化实例化视图。请参见初始化实例化视图

文本索引   缺省情况下,执行重装操作后不会初始化定义为 MANUAL REFRESH 的文本索引。如果想将这些文本索引作为重装过程的一部分进行初始化,则应指定 -g 选项。指定 -g 选项会导致数据库服务器执行 sa_refresh_text_indexes 系统过程。请参见sa_refresh_text_indexes 系统过程

-ii 使用 UNLOAD 语句从数据库中抽取数据,并使用 reload.sql 文件中的 LOAD 语句用数据重新填充数据库。这是缺省设置。
-ix 使用 UNLOAD 语句从数据库中抽取数据,并使用 reload.sql 文件中的 Interactive SQL INPUT 语句用数据重新填充数据库。
-k

填充 sa_diagnostic_auxiliary_catalog 表。该表将表、用户、过程等数据库对象的 ID 从源数据库映射到跟踪数据库。它还会使所有直方图被卸载/重装。创建跟踪数据库(即,接收诊断跟踪信息的数据库)时,应使用此选项。sa_diagnostic_auxiliary_catalog 表使服务器可以模拟在捕获到跟踪数据时的各种条件(例如,用于索引顾问或应用程序分析)。与 -n 选项一起使用时,此选项非常有用。请参见使用诊断跟踪进行高级应用程序分析sa_diagnostic_auxiliary_catalog 表

-l

在数据库重建期间,强制保留 SYSTABCOL.max_identity 的当前值。

缺省情况下,在重新构建其中包含带有自动增量列的表的数据库时,数据库服务器会根据表的当前内容计算每个自动增量列的下一可用值。在大多数情况下,这已足够;但如果从值范围的末尾删除了若干行,则这些值可以重新使用,但在某些情况下这不是我们所希望的。

指定 -l 选项会针对包含自动增量值的每个表,将对 sa_reset_identity 系统过程的调用添加到生成的 reload.sql 脚本中,从而保留 SYSTABCOL.max_identity 的当前值。

另请参见:

-m 不保留在复制中所涉及的数据库的 用户 ID。
-n 不卸载数据库中的数据;reload.sql 只包含用于构建数据库结构的 SQL 语句。如果希望 reload.sql 文件包含 LOAD TABLE 或 INPUT 语句,则应使用 -nl。
-nl 卸载结构(与 -n 选项的行为相同),但结果 reload.sql 文件中还包含每个表的 LOAD TABLE 或 INPUT 语句。使用此选项时不会卸载任何用户数据。如果指定 -nl,还必须包括一个数据目录,以便可以生成 LOAD/INPUT 语句,即使没有文件写入该目录中。此选项使您可以在不卸载数据的情况下生成重装脚本。可以通过指定 -d 来卸载数据。如果数据库中的某个表包含不应卸载的数据,可以使用 dbunload -d -e table-name 跳过卸载该表的数据。
-no

卸载按名称排序的数据库对象。缺省情况下,dbunload 会按对象创建时的顺序来生成这些对象。在各数据库中包含相同的对象但这些对象的创建顺序不同时,指定 -no 选项会在比较数据库模式时很有用。

如果指定 -no 选项,在 reload.sql 文件中会将对象定义按对象类型分组并按字母顺序排列:

  • 用户
  • 组成员
  • 索引和外键
  • 视图
  • 过程
  • 函数
  • 触发器
  • 事件
  • Web 服务

对象定义按照所有者、名称的顺序输出。有时候,在排序中还包含第三个元素(例如,外键角色名、触发器名)。

-no 选项不能和 -n、-nl、-ar、-an 或 -ac 选项共用。为简化比较,建议在比较使用同一数据库服务器版本创建的数据库的重装脚本时,使用 -no 选项,因为二者的对象定义差异很小。

小心

请勿使用生成的文件创建新数据库,因为在某些情况下对象的创建顺序很重要。例如,如果过程 p2 调用过程 p1 并且 p1 返回结果集,则在定义 p2 之前先定义 p1 就会很重要。试图执行使用 -no 选项生成的 reload.sql 脚本会导致发生错误。

-o filename 将输出消息写入指定的文件中。该文件的位置相对于 dbunload。
-p char 将外部卸载(dbunload -x 选项)的缺省转义字符 (\) 替换为其它字符。只有在命令提示符下运行此实用程序时才可以使用此选项。
-q 以安静模式运行—不显示消息或窗口。只有在命令提示符下运行此实用程序时才可以使用此选项。如果指定 -q,就必须也指定 -y。否则如果 reload.sql 已经存在,卸载就将失败。
-qc 指定在卸载完成时立即关闭消息窗口。缺省情况下,在用户执行关闭操作之前,dbunload 消息窗口会始终保持打开状态。此选项只能在 Windows Mobile 上使用。
-r reload-file 修改所生成重装命令文件的名称和目录。缺省值为当前目录中的 reload.sql。此目录相对于客户端应用程序的当前目录,而不是相对于服务器。
-t table, ...

指定要卸载的表的列表。缺省情况下,卸载所有表。此选项与 -n 选项一起使用时,将只卸载一组表定义。表名始终不区分大小写,即使在区分大小写的数据库中也是如此。

使用 -t 选项创建的 reload.sql 文件不应用于数据库的重建,因为该文件并不包含所有的数据库表。如果有外键引用某个表,则必须有该表的内容才能重建数据库。

建议只将 -t 选项和 -d 选项一起使用,用以卸载除 -t 所指定表的数据。

-u 如果您要卸载索引已损坏的数据库,使用此选项可避免使用已损坏的索引对数据进行排序。通常,如果表中定义了主键或聚簇索引,则每个表中的数据都会按主键或聚簇索引来排序。
-v 显示所卸载的表的名称以及已卸载的行数。只有在命令提示符下运行 dbunload 时才可以使用此选项。
-xi 通过将数据卸载到 dbunload 客户端,执行外部卸载,然后使用所生成重装命令文件 reload.sql 中的 LOAD 语句来将数据重新填充到数据库中。
-xx 通过将数据卸载到 dbunload 客户端,执行外部卸载,然后使用所生成重装命令文件 reload.sql 中的 Interactive SQL INPUT 语句来将数据重新填充到数据库中。
-y

在不提示进行确认的情况下替换现有的命令文件。如果指定 -q,就必须也指定 -y。否则如果 dbunload 检测到命令文件已经存在,卸载就将失败。

在卸载参与复制的数据库时,有一些特殊的注意事项。请参见抽取远程数据库升级 SQL Remote

directory 指定用于放置卸载数据的目录。reload.sql 命令文件始终相对于用户的当前目录。
注释
升级到版本 11

有关将现有数据库重建为版本 11 数据库的信息,请参见升级 SQL Anywhere

在使用 dbunload 卸载版本 10.0.0 或更高版本的数据库时,所使用的 dbunload 的版本必须与用于访问数据库的数据库服务器的版本相匹配。如果将较旧版本的 dbunload 和相对较新版本的数据库服务器一起使用,会报告出现错误,反之亦然。

通过卸载实用程序,您可以卸载数据库,并将一组数据文件放在指定的目录中。卸载实用程序会创建一个 Interactive SQL 命令文件来重建您的数据库。它还将卸载每个表中的所有数据,并以逗号分隔格式将这些数据放到指定目录下的文件中。二进制数据通过转义序列来准确表示。

通过执行 UPDATE ISYSUSER 语句,内部卸载/重装操作会卸载有关每位用户当前状态的信息。外部卸载/重装不包含此类信息,并且会重置所有用户的状态。请参见管理登录策略概述

当通过卸载和重装来重建数据库时,重建的数据库可能会比原数据库小。数据库大小的减少可能是由于 SQL Anywhere 中的索引变化所致,并 表示出现了问题或有数据丢失。

注意

需要恢复的版本 9 及更早版本的数据库无法使用版本 10 或更高版本的卸载实用程序 (dbunload) 进行重新装载。必须使用版本 9 或更早版本的 dbunload 重新装载该数据库。

使用卸载实用程序也可以直接从现有数据库创建新的数据库。这样可以避免将数据库内容写入普通磁盘文件所带来的潜在安全问题。

如果您只想卸载表数据,则可以在 Sybase Central 中使用 [卸载数据] 窗口一步完成。

有关详细信息,请参见使用 [卸载数据] 窗口导出数据

在卸载参与复制的数据库时,有一些特殊的注意事项。请参见抽取远程数据库

您可以以下列方式访问卸载实用程序:

  • 从 Sybase Central 使用 [卸载数据库向导]。请参见使用 [卸载数据库向导] 导出数据

  • 在命令提示符处,使用 dbunload 命令。如果要合并到批处理文件或命令文件中,此命令比较有用。

卸载实用程序应由具有 DBA 权限的用户 ID 运行。只有这样,才能确保有权卸载所有数据。此外,reload.sql 文件也应由具有 DBA 权限的用户运行。(通常,它运行于只拥有用户 ID DBA 和口令 sql 的新数据库上。)

数据库服务器 -gl 选项用于控制从数据库卸载数据所需要的权限。请参见-gl 服务器选项

dbo 用户 ID 在数据库中拥有一组系统对象,其中包括视图和存储过程。

卸载实用程序不会卸载在数据库创建期间为 dbo 用户 ID 所创建的对象。对这些对象进行的更改(例如,重新定义系统过程)会在数据库卸载后丢失。而在数据库初始化后由 dbo 用户 ID 所创建的所有对象都会被卸载实用程序卸载,因此这些对象会保留下来。

在卸载数据库时,任何对系统对象权限的更改都不会 卸载。必须在新数据库中授予或撤消这些权限。

提示

在重建数据库之前,建议通过运行与以下命令类似的命令来重装不带任何数据的数据库以校验重装过程:

dbunload -n -an new.db -c "UID=your-user-id;PWD=your-password;DBF=original-database-file"

在重建数据库之前,必须修复在原数据库中发现的所有问题。

在缺省模式下,或在使用 -ii 或 -ix 时,dbunload 保存数据所使用的目录相对于数据库服务器,而不是相对于用户的当前目录。

如果使用 -xi 或 -xx,则此目录相对于用户的当前目录。

有关在此模式下提供文件名和路径的详细信息,请参见UNLOAD 语句

如果不提供表的列表,则卸载整个数据库。如果提供表的列表,则只卸载这些表。

卸载的数据包括 reload.sql 文件中所生成的 LOAD TABLE 语句的列列表。卸载列列表便于对表中的列进行重新排序。各表可以删除或重新创建,然后使用 reload.sql 重新填充。

由 dbunload 生成的 LOAD TABLE 语句会关闭检查约束和计算列。

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

具有实例化视图的数据库

建议在重建数据库后,在数据库中刷新实例化视图。请参见刷新手动视图

运行诊断跟踪的数据库

跟踪信息不会 作为数据库卸载或重装操作的一部分被卸载。如果需要从一个数据库向另一个数据库传输跟踪信息,必须通过复制 sa_diagnostic_* 表的内容来手动执行;但是,不建议采用此方法。

内部与外部卸载和重装

以下选项提供了内外部卸载和重装的组合:-ii、-ix、-xi 和 -xx。相对于外部命令(Interactive SQL 的 INPUT 和 OUTPUT 语句),使用内部命令 (UNLOAD/LOAD) 会获得更高的性能。但是,内部命令由服务器执行,因此文件和目录路径相对于数据库服务器的位置。而使用外部命令时,文件和目录路径相对于用户的当前目录。

在 Sybase Central 中,您可以指定是相对于服务器还是相对于客户端进行卸载。请参见UNLOAD 语句

当使用外部卸载和重装来卸载、重装或重建数据库时,如果此数据库的字符集与运行 dbunload 的主机系统的字符集不兼容,在此数据库的字符集与主机系统的字符集进行数据转换时,字符集转换可能会引起数据损坏。

为避免此问题,可在数据库的连接字符串中指定数据库的字符集(-c 和 -ac 选项)。例如,如果数据库字符集为 UTF-8,您应该在连接字符串中包括 "charset=utf-8":

dbunload -c UID=user-ID;PWD=password;
CHARSET=utf-8;DBF=filename -ac UID=user-ID;
PWD=password;CHARSET=utf-8;ENG=server-name -xx

执行外部卸载时,reload.sql 的开头部分包括一条注释过的 CREATE DATABASE 语句。使用该语句,可以创建一个与正要卸载的数据库相当的数据库。

如果被卸载的数据库是使用 SQL Anywhere 版本 9 或更早的版本创建的,并且包含自定义归类,则 COLLATION 子句以如下形式出现:

COLLATION collation-label DEFINITION collation-definition

其中 collation-definition 是用于指定自定义归类的字符串。

保留自定义归类的唯一方法是以单步方式(内部卸载)重建数据库。如果选择卸载数据库,然后将模式和数据装载到您创建的数据库中,则必须使用所提供归类中的一种。

如果被卸载的数据库是通过高度加密的方法创建的,则 CREATE DATABASE 语句中的 KEY 子句的值会显示为三个问号 (???)。

失败的卸载

如果在使用 -ar 或 -an 进行数据库内部重建期间出现故障,则重装表数据并重建表上的所有索引后,dbunload 会在当前目录中创建一个名为 unprocessed.sql 的文件。该文件中包含所有因故障而未执行的语句,还包含引发故障的语句,以此作为一个注释。下面是 unprocessed.sql 文件的示例:

-- The database reload failed with the following error:
-- ***** SQL error: the-SQL-ERROR 
-- This script contains the statements that were not executed as a
-- result of the failure. The statement that caused the failure is
-- commented out below. To complete the reload, correct the failing
-- statement, remove the surrounding comments and execute this script. 
/*
the failing statement 
go

*/

setuser "DBA" 
go

... the remainder of the statements to be processed

有了此文件,您将有机会修正、删除或变更失败的语句。unprocessed.sql 文件仅在所有表数据和参照完整性约束重装后创建。使用 Interactive SQL,您可以连接到新数据库并执行更新后的 unprocessed.sql 文件。这样,您就无需再次启动重建即可完成数据库的重建,从而节约大量的时间。

生成 unprocessed.sql 文件后,dbunload 将停止并返回故障错误代码,以将这一失败的重建告知其它工具和脚本。

加密的数据库

在重建已启用表加密的数据库时,必须指定 -er 或 -et 来指明新数据库是否启用表加密,否则在尝试向该新数据库装载数据时可能会出错。

如果要卸载高度加密的数据库,则必须提供加密密钥。您可以使用 DatabaseKey (DBKEY) 连接参数在命令行上提供密钥。或者,如果您希望得到输入加密密钥的提示,而不是在普通视图中的命令行上输入密钥,则可以使用 -ep 服务器选项,如下所示:

dbunload -c "DBF=enc.db;START=dbeng11 -ep"

如果要使用 -an 选项来卸载数据库并重新装入新数据库中,并且要使用 -ek 或 -ep 选项来为新数据库设置加密密钥,请记住以下注意事项:

  • 如果原数据库采用了高度加密,则需要使用 -c 选项中的 DatabaseKey (DBKEY) 连接参数来指定原数据库的密钥,而不是使用 -ek 或 -ep 选项。

  • 使用 -ek 和 -ep 选项,可以卸载未加密的数据库并重装到高度加密的新数据库中。在使用 -ep 和 -an 时,必须正确地确认密钥,否则卸载就会失败。

  • 如果原数据库是高度加密的,但是没有使用 -ek 和 -ep 选项,则可使用简单加密对新数据库进行加密。

  • 如果不指定 -an,则忽略 -ek 和 -ep 选项。dbunload -ek 和 -ep 选项应用于新数据库,而数据库服务器 (dbeng11/dbsrv11) 选项和 DBKEY= 应用于现有数据库。

  • 在重建同步或复制中所涉及的数据库时,dbunload 会假定使用 -ek 或 -ep 选项所指定的加密密钥是原始数据库及新建的数据库的加密密钥。

有关加密的详细信息,请参见-ep 服务器选项DatabaseKey 连接参数 [DBKEY]

重建数据库

要卸载数据库,首先要确保该数据库未在运行。然后,运行 dbunload,指定 DBA 用户和口令,通过 DBF= 连接参数引用该数据库。

要重装数据库,应创建一个新的数据库,然后通过 Interactive SQL 运行所生成的 reload.sql 命令文件。

要将卸载和重装步骤结合起来,除遵循上述有关卸载的说明外,还应添加 -an 选项以指定新数据库文件的名称。请参见有关 -ac 和 -an 选项的说明。