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 Remote » SQL Remote 参考 » SQL Remote 实用程序和选项参考

 

抽取实用程序 (dbxtract)

从 SQL Anywhere 统一数据库中抽取远程数据库。

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

从配置文件读入选项。请参见@data 服务器选项

此选项用于从指定的环境变量或配置文件中读入选项。如果存在具有相同名称的环境变量和配置文件,则使用环境变量。请参见使用配置文件

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

-ac "keyword=value; ..."

连接到在连接字符串中指定的数据库以进行重装。

您可以使用此选项,将数据库卸载操作与将结果重装入现有数据库的操作合并执行。

例如,以下命令(所有内容应在一行中输入)将预订者 field_user 的数据副本装载到名为 c:\field.db 的现有数据库文件中:

dbxtract -c "UID=DBA;PWD=sql;DBF=c:\cons.db" 
-ac "UID=DBA;PWD=sql;DBF=c:\field.db" field_user

如果使用此选项,则不会在磁盘上创建数据的副本,因而无需在命令中指定卸载目录。这可以使数据更安全,但对性能会造成一定的影响。

-al filename 如果使用 -an 选项,则指定新数据库的事务日志文件名。
-an database

创建与所抽取的数据库具有相同设置的数据库文件,并自动重装。

您可以使用此选项,将卸载数据库、创建新数据库和装载数据这三个操作组合起来。

例如,以下命令(所有内容应在一行中输入)将创建一个名为 c:\field.db 的新数据库文件,并将 c:\cons.db 的 field_user 预订者的模式和数据复制到其中:

dbxtract -c "UID=DBA;PWD=sql;DBF=c:\cons.db" 
-an c:\field.db field_user

如果使用此选项,则不会在磁盘上创建数据的副本,因而无需在命令中指定卸载目录。这可以使数据更安全,但对性能会造成一定的影响。

-ap size

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

-b

不启动预订。如果指定了此选项,则必须使用 START SUBSCRIPTION 语句显式启动位于统一数据库的预订(用于远程数据库)和位于远程数据库的预订(用于统一数据库),以便开始复制。请参见START SUBSCRIPTION 语句 [SQL Remote]

-c "keyword=value; ..."

提供字符串形式的数据库连接参数:

用户 ID 应具有 DBA 权限以确保用户有权访问数据库中的所有表。

例如,以下语句(所有内容应在一行中键入)以用户 ID DBA 和口令 sql 进行连接,从正在 sample_server 数据库服务器上运行的示例数据库中为远程用户 ID joe_remote 抽取数据库。这些数据被卸载到 c:\extract 目录中。

dbxtract -c "ENG=sample_server;DBN=demo;
UID=DBA;PWD=sql" c:\extract joe_remote

如果未指定连接参数,则使用来自 SQLCONNECT 环境变量的连接参数(如果已设置)。

-d

仅抽取数据。如果指定了此选项,则不卸载模式定义且不在远程数据库中创建发布和预订。此选项适用于:已存在具有正确模式的远程数据库且该数据库只需用数据来填充。

-ea alg

指定新数据库的加密算法此选项允许您选择使用何种高度加密算法来加密您的新数据库。您可以选择 AES(缺省值)或 FIPS 认可的算法 AES_FIPS。AES_FIPS 使用独立的库并且与 AES 不兼容。

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

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

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

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

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

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

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

请参见单独授权的组件

-ek key

指定新数据库的加密密钥。使用此选项,您可以通过直接在命令中指定加密密钥,来创建高度加密的数据库。用于加密数据库的算法是 AES 还是 AES_FIPS,由 -ea 选项指定。如果您指定了 -ek 选项而没有指定 -ea,则使用 AES 算法。

小心

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

-ep

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

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

-er

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

从启用了表加密的数据库进行抽取时,必须指定 -er 或 -et 来指示新数据库是否启用表加密,否则在尝试向该新数据库装载数据时会发生错误。

以下命令将拥有加密表的数据库 (cons.db) 抽取到不启用表加密的新数据库 (field.db) 中,即解除了所有加密表的加密:

dbxtract -an c:\field.db -er -c "UID=DBA;PWD=sql;DBF=c:\cons.db;DBKEY=29bN8cj1z field_user"
-et

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

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

下面的示例将使用简单加密算法进行表加密的数据库 (cons.db) 卸载到启用表加密的新数据库 (field.db) 中,并采用 AES_FIPS 加密算法,密钥为 34jh:

dbxtract -an c:\field.db -et -ea AES_FIPS -ek 34jh -c "UID=DBA;PWD=sql;DBF=c:\cons.db field_user"
-f

抽取完全限定的发布。在大多数情况下,您不需要为远程数据库抽取完全限定的发布定义,因为它通常会将所有行复制回统一数据库。

但是,对于多层设置,或者对于在其中远程数据库所具有的行不位于统一数据库中的设置,您可能需要完全限定的发布。

-ii

执行内部卸载和内部重装。通过使用此选项,可以强制重装脚本使用内部 UNLOAD 和 LOAD TABLE 语句(而非 Interactive SQL OUTPUT 和 INPUT 语句)来分别卸载和装载数据。这一操作组合是缺省行为。

外部操作采用相对于 dbxtract 的当前工作目录的数据文件路径,而内部语句则采用相对于数据库服务器的路径。

-ix

执行内部卸载和外部重装。通过使用此选项,可强制重装脚本使用内部 UNLOAD 语句卸载数据,并使用 Interactive SQL INPUT 语句将数据装载到新数据库中。

外部操作采用相对于 dbxtract 的当前工作目录的数据文件路径,而内部语句则采用相对于数据库服务器的路径。

-l level

以指定隔离级别执行所有抽取操作缺省设置是隔离级别 0。如果从活动数据库服务器抽取数据库,请选择在隔离级别 3 运行该抽取操作,以确保抽取的数据库中的数据与数据库服务器上的数据保持一致。提高隔离级别可能导致抽取实用程序 (dbxtract) 使用大量锁定,并且可能限制其他用户使用数据库。请参见抽取实用程序 (dbxtract)

-n

仅抽取模式定义。使用此定义,将不卸载任何数据。重装文件只包含用来建立数据库模式的 SQL 语句。您可以使用 SYNCHRONIZE SUBSCRIPTION 语句通过消息系统装载数据。发布、预订、PUBLISH 和 SUBSCRIBE 权限都是模式的一部分。

dbxtract -c "UID=DBA;PWD=sql;DBF=c:\remote\cons\cons.db" -n "c:\remote\reload.sql" UserName
-nl

抽取结构(与 -n 选项的行为相同),但结果 reload.sql 文件中还包含每个表的 LOAD TABLE 或 INPUT 语句。使用此选项时不会抽取任何用户数据。如果指定 -nl,还必须包括一个数据目录,以便可以生成 LOAD/INPUT 语句,即使没有文件写入该目录中。此选项使您可以在不卸载数据的情况下生成重装脚本。可以通过指定 -d 来抽取数据。如果数据库中的某个表包含不应卸载的数据,可以使用 dbxtract -d -e table-name 避免卸载该表中的数据。

-o file

将消息输出到输出日志文件。

-p character

指定转义字符。通过此选项可以使用其它字符替代缺省的转义字符 (\)。

-q

安静地运行:不显示消息,也不显示窗口。如果指定此选项,就必须也指定 -y,否则操作将失败。

此选项只用于命令行实用程序。

-r file

指定生成的重装 Interactive SQL 命令文件的名称。

恢复命令文件的缺省名称为当前目录中的 reload.sql。可使用此选项指定不同的文件名。

-u

在卸载操作期间不排序数据。缺省情况下,每个表中的数据都按主键排序。使用 -u 选项可以加快卸载,但会降低向远程数据库装载数据的速度。

-v

显示详细消息。所卸载的表的名称、卸载行数,以及所使用的 SELECT 语句。

-xf

排除外键。如果远程数据库包含统一数据库模式的子集,并且在远程数据库中不存在某些外键引用,则可以使用此项。

-xh 排除过程挂接。
-xi

执行外部卸载和内部重装。卸载数据库的缺省行为是使用 UNLOAD 语句,这是由数据库服务器执行的。如果选择外部卸载,则 dbxtract 会改为使用 OUTPUT 语句。在客户端上执行 OUTPUT 语句。

外部操作采用相对于 dbxtract 的当前工作目录的数据文件路径,而内部语句则采用相对于数据库服务器的路径。

-xp

不从数据库抽取存储过程。

-xt

不从数据库抽取触发器。

-xv

不从数据库抽取视图。

-xx

执行外部卸载和外部装载。使用 OUTPUT 语句卸载数据,使用 INPUT 语句将数据装入新的数据库中。

缺省的卸载行为是使用 UNLOAD 语句,缺省的装载行为是使用 LOAD TABLE 语句。内部 UNLOAD 和 LOAD TABLE 语句的执行速度要快于 OUTPUT 和 INPUT。

外部操作采用相对于 dbxtract 的当前工作目录的数据文件路径,而内部语句则采用相对于数据库服务器的路径。

-y

覆盖命令文件,无须确认。如果不指定此选项,将提示确认覆盖现有命令文件。

directory 指定写入文件的目录。指定 -an 或 -ac 时不需要此选项。
subscriber 指定正在为其抽取数据库的预订者。
注释

缺省情况下,抽取实用程序 (dbxtract) 在隔离级别 0 运行。如果从活动数据库服务器抽取数据库,请选择在隔离级别 3 运行该抽取操作,以确保抽取的数据库中的数据与数据库服务器上的数据保持一致。在隔离级别 3 运行可能会由于需要大量锁定而延长数据库服务器上其它进程的周转时间。建议您在服务器不繁忙时运行抽取实用程序 (dbxtract),或者对数据库的副本运行该抽取实用程序。

抽取实用程序 (dbxtract) 会创建一个命令文件和一组关联的数据文件。该命令文件可在新初始化的数据库上运行,以创建数据库对象及装载远程数据库的数据。

缺省情况下,命令文件被命名为 reload.sql

如果远程用户为一个组,则抽取属于该组的所有用户 ID。这允许远程数据库上存在具有不同用户 ID 的多个用户,并且不需要自定义抽取进程。

在将抽取实用程序 (dbxtract) 或 [抽取数据库向导] 用于版本 10.0.0 或更高版本的数据库时,所使用的 dbxtract 的版本必须与用于访问该数据库的数据库服务器的版本相符。如果将较旧版本的 dbxtract 和相对较新版本的数据库服务器一起使用,会报告出现错误,反之亦然。

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

另请参见