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

 

翻译日志文件实用程序 (dbtran)

将事务日志文件翻译为 SQL 命令文件。

语法

针对数据库服务器运行:

dbtran [ options ] -c { connection-string } -n SQL-file

针对事务日志运行:

dbtran [ options ] [ transaction-log ] [ SQL-file ]
选项 说明
@data

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

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

-a

控制是否在事务日志中显示未提交的事务。

事务日志包含任何事务在最近一次执行 COMMIT 之前做出的更改。最近一次提交之后做出的更改不会出现在事务日志中。

如果没有指定 -a,则输出文件中只显示已提交的事务。如果指定 -a,则会输出事务日志中存在的任何未提交事务,并且后跟一条 ROLLBACK 语句。

-c "keyword=value; ..." 在针对数据库服务器运行该实用程序时,此选项用于指定连接字符串。请参见连接参数
-d 指定按照从最早到最晚的次序写入事务。提供此功能的主要目的是在审计数据库活动时使用:不能针对数据库应用 dbtran 的输出。
-ek key

为高度加密的数据库指定加密密钥。如果您有一个高度加密的数据库,则必须提供加密密钥才能使用数据库或事务日志。

对于高度加密数据库,您必须指定 -ek 或 -ep,但不要同时指定这两者。如果没有指定正确的加密密钥,则该命令将失败。

如果要针对数据库服务器运行 dbtran(使用 -c 选项),请使用连接参数而非 -ek 选项来指定密钥。例如,以下命令用于从数据库服务器 sample 中获取有关数据库 enc.db 的事务日志信息,并将其输出保存到 log.sql 中。

dbtran -n log.sql -c "ENG=sample;DBF=enc.db;
UID=DBA;PWD=sql;DBKEY=mykey"
-ep

提示输入加密密钥。使用此选项将显示一个窗口,可以在其中输入加密密钥。加密密钥从不以明文显示,因此提供了额外的安全保证。

对于高度加密数据库,您必须指定 -ek 或 -ep,但不要同时指定这两者。如果没有指定正确的加密密钥,则该命令将失败。

如果要针对数据库服务器运行 dbtran(使用 -c 选项),请使用连接参数而非 -ep 选项来指定密钥。例如,以下命令用于从数据库服务器 sample 中获取有关数据库 enc.db 的事务日志信息,并将其输出保存到 log.sql 中。

dbtran -n log.sql -c "ENG=sample;DBF=enc.db;
UID=DBA;PWD=sql;DBKEY=mykey"
-f 只输出上一个检查点之后完成的事务。
-g

如果启用了审计数据库选项,则审计信息会添加到事务日志中。使用此选项,可将审计信息作为注释包括在输出文件中。请参见auditing 选项 [数据库]

-g 选项隐含 -a、-d 和 -t 选项。

-ir offset1,offset2 输出在两个指定偏移之间的事务日志部分。
-is source,...

输出对行(以下一个或多个源中的操作已修改了这些行)的操作,这些源被指定为逗号分隔的列表:

  • All   所有行。这是缺省设置。

  • SQLRemote   只包括使用 SQL Remote 修改的行。您也可以使用简写形式 SR。

  • RepServer   只包括使用复制代理 (LTM) 和复制服务器修改的行。您也可以使用简写形式 RS。

  • Local   只包括没有复制的行。

-it owner.table,... 输出对位于逗号分隔的列表中的并且是指定的表所执行的操作。应该以 owner.table 的形式指定每个表。
-j date/time 只翻译给定日期和/或时间之前的最后一次检查点操作以来的事务。用户提供的参数可以是用引号括起来的日期、时间或时间及日期。如果省略时间,则将时间假定为一天的起始时间。如果省略日期,则假定为当天。以下是可接受的日期及时间格式:"YYYY/MMM/DD HH:NN"
-k 防止检测到错误时消除部分 .sql 文件。如果在 dbtran 运行期间检测到错误,通常会消除到该时刻为止所生成的 .sql 文件,以确保不会因不小心而使用部分文件。如果试图从损坏的事务日志中保留事务,指定此选项将甚为有用。
-m 指定包含事务日志的目录。此选项必须与 -n 选项联合使用。
-n filename 在针对数据库服务器运行 dbtran 实用程序时,使用此选项指定保存 SQL 语句的输出文件。
-o filename 将输出消息写入指定的文件中。
-q 以安静模式运行—不显示消息。
-r 删除所有未提交的事务。这是缺省行为。
-rsu username,... 指定以逗号分隔的用户名列表以替换缺省的复制服务器用户名。缺省情况下,-is 选项假定缺省的复制服务器用户名为 dbmaint 和 sa。
-s 控制如何生成 UPDATE 语句。如果不使用此选项,而且在表上没有主键或唯一索引,则在有重复行的情况下,翻译日志文件实用程序生成带有非标准 FIRST 关键字的 UPDATE 语句。如果使用此选项,则忽略 FIRST 关键字,以便与 SQL 标准兼容。
-sr 将生成的用以说明 SQL Remote 如何将操作分发到远程站点的注释保存到输出文件中。
-t 控制是否在命令文件中包含触发器。缺省情况下,触发器执行的操作不包括在命令文件中。如果在数据库中有匹配的触发器,则在针对该数据库运行命令文件时,触发器将自动执行操作。如果运行命令文件的数据库中不存在匹配触发器,则应该包括触发器操作。
-u userid,... 将事务日志的输出限制为只包括指定的用户。
-x userid,... 将事务日志的输出限制为不包括指定的用户。
-y 在不提示进行确认的情况下替换现有的命令文件。如果您指定了 -q,则还必须指定 -y,否则操作将失败。
-z 将触发器生成的事务只作为注释包括在输出文件中。
transaction-log 指定要翻译的日志文件。不能与 -c 或 -m 选项一起使用。
SQL-file 命名包含已翻译信息的输出文件。只与 transaction-log 一起使用。
注释

dbtran 实用程序获取事务日志中的信息,并将该信息作为一组 SQL 语句和注释置于输出文件中。该实用程序可以按照以下方式运行:

  • 针对数据库服务器   如果 dbtran 针对数据库服务器运行,则该实用程序为标准客户端应用程序。它使用在 -c 选项之后指定的连接字符串连接到数据库服务器,并将输出保存在使用 -n 选项指定的文件中。以此方式运行需要有 DBA 权限。

    以下命令用于翻译来自服务器 demo11 的日志信息,并将输出保存在名为 demo.sql 的文件中。

    dbtran -c "ENG=demo11;DBN=demo;UID=DBA;PWD=sql" -n demo.sql

  • 针对事务日志文件   dbtran 针对事务日志运行时,该实用程序直接作用于事务日志文件。如果不想让用户拥有运行此语句的能力,则应保护事务日志文件以禁止一般性访问。
    dbtran demo.log demo.sql

dbtran 实用程序运行时,它会显示事务日志中最早的日志偏移。这可以作为确定多个日志文件的生成顺序的有效方法。

如果使用 -c,dbtran 将尝试翻译联机事务日志文件及其同一目录中的所有脱机事务日志文件。如果目录中包含不止一个数据库的事务日志文件,dbtran 可能会给出错误消息。为了避免此问题,请确保每个目录中包含的是仅针对一个数据库的事务日志文件。

一个事务可以跨多个事务日志。如果事务日志文件包含跨多个日志的事务,则只翻译一个事务日志文件(例如,dbtran demo.log)可能会导致跨日志的事务丢失。为了让 dbtran 生成完整的事务,请将 -c 或 -m 选项与目录中的事务日志文件一起使用。请参见通过多个事务日志恢复数据库

您可以以下列方式访问翻译日志文件实用程序。

  • 从 Sybase Central 使用 [翻译日志文件向导]。

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

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