db2move - 数据库移动工具命令
DB2MOVE 命令与 EXPORT, IMPORT或 LOAD 操作配合使用时,有助于在工作站上的 Db2® 数据库之间移动大量表。 当 DB2MOVE 命令与 COPY 操作配合使用时,此工具将促进模式的重复。
与 EXPORT, IMPORT或 LOAD 操作配合使用时,该工具将查询系统目录表以获取特定数据库,并编译所有用户表的列表。 然后以 PC/IXF 格式导出这些表。 可以将这些 PC/IXF 文件导入或装入到同一系统上的另一个本地 DB2 数据库;也可以将它们传输至另一个工作站平台,然后导入或装入到该平台上的 DB2 数据库中。 当使用此工具时,不会移动具有结构化类型列的表。
与 COPY 操作配合使用时,该工具将装入 API 与 SQLU_REMOTEFETCH 介质类型配合使用,以直接将数据从一个数据库传输到另一个数据库。
权限
此工具将根据用户请求的操作来调用 DB2 导出、导入和装入 API。 因此,发出请求的用户标识必须具有这些 API 所要求的权限,否则请求将失败。
命令语法
命令参数
- dbname
- 指定数据库的名称。
- 操作
- 指定操作。 值如下所示:
- EXPORT
- 导出所有满足过滤条件(根据所指定的选项)的表。 如果未指定选项,那么将导出所有表。 内部登台信息存储在 db2move.lst 文件中。
- IMPORT
- 导入内部登台文件 db2move.lst 中所列示的所有表。 将 -io 选项用于特定于 IMPORT 的操作。
- LOAD
- 装入内部登台文件 db2move.lst 中所列示的所有表。 将 -lo 选项用于特定于 LOAD 的操作。
- COPY
- 将模式复制到目标数据库中。 目标数据库必须是本地数据库。 使用 -sn 选项来指定一种或多种模式。 请参阅 -co 选项以获取特定于 COPY 的选项。 使用 -tn 或 -tf 选项,以 LOAD_ONLY 方式过滤表。 如果使用 ADMIN_COPY_SCHEMA () 存储过程,或者如果将 db2move 命令与 COPY 操作配合使用,那么必须使用 SYSTOOLSPACE 表空间。
- -tc table_definers
- 指定一个或多个表定义程序(创建程序)。
此参数仅适用于 EXPORT 操作。 如果指定 -tc 参数,那么将仅导入由指定定义程序创建的那些表。 如果未指定此参数,那么将使用所有定义程序。 如果指定了多个定义程序,那么必须将它们用逗号分隔开;定义程序标识之间不允许存在空格。 可以将此参数与 -tn table_names 参数一起使用来选择要导出的表。
可以使用星号(*)作为通配符,并且可以将星号放在字符串中的任何位置。
- -tn 表名
- 指定一个或多个表名。 此参数仅适用于 EXPORT 和 COPY 操作。
如果将 -tn 参数与 EXPORT 操作一起指定,那么只导出名称与指定字符串中的名称相匹配的那些表。 如果未指定此参数,那么将使用所有用户表。 如果指定了多个表名,那么必须将它们用逗号分隔开;表名之间不允许存在空格。 必须以未限定格式列示表名。 要过滤模式,应当使用 -sn 参数。
对于导出操作,可以使用星号(*)作为通配符,并且可以将星号放在字符串中的任何位置。
如果将 -tn 参数与 COPY 操作一起指定,那么还必须指定 -co "MODE" LOAD_ONLY copy_option 参数,并且只会在目标数据库中重新填充指定的表。 必须以 "schema". "table" 格式列出表名及其模式限定符。
- -sn schema_names
- 指定一个或多个模式名称。 如果指定此参数,那么只会导出模式名称与指定字符串中的模式名称相匹配的那些表。 EXPORT 操作的缺省值是所有模式。 该缺省值不适用于 COPY 操作。
如果指定了多个模式名称,那么必须将它们用逗号分隔开;模式名称之间不允许存在空格。 对于少于 8 个字符的模式名称,会将它填充为 8 个字符。
对于 EXPORT 操作来说,如果在模式名称中使用了星号 (*) 通配符,那么会将星号更改为百分号 (%),并且将在 WHERE 子句的 LIKE 谓词中使用(带有百分号)表名。 如果将 -sn 参数与 -tn 或 -tc 参数一起使用,那么 db2move 命令将仅对其模式与指定模式名称相匹配或者其定义程序与指定的定义程序相匹配的那些表执行操作。 使用星号作为通配符时,必须将模式名称
fred
指定为-sn fr*d*
而不是指定为-sn fr*d
。注: -sn 选项在 Db2 for z/OS®上不受支持。 - -ts tablespace_names
- 指定一组表空间名称。 此参数仅适用于 EXPORT 操作。
如果指定 -ts 参数,那么将仅导出指定表空间中的那些表。 如果在表空间名中使用了星号(*)作为通配符,那么会将星号更改为百分号(%),并且将在 WHERE 子句的 LIKE 谓词中使用(带有百分号)表名。 如果未指定 -ts 参数,那么将使用所有表空间。 如果指定了多个表空间名称,那么必须将它们用逗号分隔开;表空间名称之间不允许存在空格。 对于少于 8 个字符的表空间名,会将它填充为 8 个字符。 要指定表空间名称
mytb
,在使用星号时必须将其指定为-ts my*b*
而不是-sn my*b
。 - -tf 文件名
- 指定文件名。 此参数仅适用于 EXPORT 和 COPY 操作。 如果将 -tf 参数与 EXPORT 操作一起指定,那么只导出名称与指定文件中的名称相匹配的那些表。 在该文件中,应当每行列示一个表,并且应当对每个表名称进行完全限定。 不允许在字符串中使用通配符。 样本文件内容如下所示:
如果未指定 -tf 参数,那么将使用所有用户表。"SCHEMA1"."TABLE NAME1" "SCHEMA NAME77"."TABLE155"
如果将此参数与 COPY 操作一起指定,那么还必须指定 -co "MODE" LOAD_ONLY copy_option 参数,并且将仅在目标数据库上重新填充那些该文件中指定的表。 在该文件中,应以 "schema". "table" 格式列出表名及其模式限定符。
- -io import_option
- 指定 IMPORT 操作的选项。 有效选项为 INSERT、INSERT_UPDATE、REPLACE、CREATE 和 REPLACE_CREATE。 缺省值为 REPLACE_CREATE。 有关导入创建功能的限制,请参阅
不推荐使用 IMPORT 命令选项 CREATE 和 REPLACE_CREATE
。 - -lo load_option
- 指定 LOAD 操作的选项。 有效选项为 INSERT 和 REPLACE。 缺省值为 INSERT。
- -co
- 指定 COPY 操作的选项。
- "TARGET_DB 数据库名称 [USER userid USING password]"
- 指定目标数据库的名称、用户标识和密码。 (可以使用现有的 -p 和 -u 选项来指定源数据库用户标识和密码)。 USER USING 子句是可选子句。 如果 USER 指定了用户标识,那么必须在 USING 子句后面提供密码,或者,如果未指定密码,那么 db2move 将提示输入密码信息。 之所以提示您输入密码信息,是因为以下部分所讨论的安全性原因。 TARGET_DB 是 COPY 操作的必需选项。 TARGET_DB 不能与源数据库相同,并且必须是本地数据库。 ADMIN_COPY_SCHEMA 过程可以用于复制同一数据库中的模式。 COPY 操作要求至少输入一种模式 (-sn) 或一个表(-tn 或 -tf)。
运行多个 db2move 命令以将模式从一个数据库复制到另一个数据库时将导致死锁。 一次只能发出一个 db2move 命令。 在复制处理期间对源模式中的表进行更改,可能意味着在复制后目标模式中的数据与之不相同。
- "MODE"
- 此选项是可选的。
- DDL_AND_LOAD
- 根据源模式创建所有受支持的对象,并使用源表数据来填充表。 这是缺省选项。
- DDL_ONLY
- 根据源模式创建所有受支持的对象,但是不重新填充表。
- LOAD_ONLY
- 将指定的所有表从源数据库装入到目标数据库中。 表必须已存在于目标上。 LOAD_ONLY 方式要求使用 -tn 或 -tf 选项来输入一个或多个表。
这是一个只能用于 COPY 操作的可选选项。
- "SCHEMA_MAP"
- 当复制到目标时重命名模式。 此选项是可选的。
要使用此选项,请提供源-目标模式映射的列表,以逗号分隔,以括号括起,例如
schema_map ((s1, t1), (s2, t2))
。 在此情况下,会将模式 s1 中的对象复制到目标上的模式 t1;而将模式 s2 中的对象复制到目标上的模式 t2。 缺省情况是目标模式名称与源模式名称相同,并且也建议您这样做。 因为 db2move 命令不会尝试修改对象主体中任何限定对象的模式。 因此,如果对象主体中有限定对象,那么使用不同的目标模式名称可能会导致问题。请考虑以下示例,它将创建一个称为 v1 的视图:
create view FOO.v1 as 'select c1 from FOO.t1'
在此例中,将 FOO 模式复制到 BAR 时会重新生成 v1:
create view BAR.v1 as 'select c1 from FOO.t1'
这将由于目标数据库上不存在 FOO 模式而失败,或者由于 FOO 不同于 BAR 而产生意外的结果。 保持与源数据库具有相同模式名称就可以避免这些问题。 如果模式之间存在交叉依赖性,那么必须复制所有互相依赖的模式,否则在复制具有交叉依赖性的对象时可能会出错。
例如:
create view FOO.v1 as 'select c1 from BAR.t1'
在此例中,如果没有同时复制 BAR,那么复制 v1 时将失败;如果目标上的 BAR 不同于源中的 BAR,那么复制 v1 时将产生意外的结果。 db2move 将不会尝试检测交叉模式依赖性。
这是一个只能用于 COPY 操作的可选选项。
如果目标模式已存在,该实用程序将失败。 使用 ADMIN_DROP_SCHEMA 过程可删除模式及与该模式关联的所有对象。
- "NONRECOVERABLE"
- 此选项允许用户覆盖要使用 COPY-NO 来完成的装入操作的缺省行为。 在缺省行为下,将强制用户为要装入到的每个表空间生成备份。 当指定此 NONRECOVERABLE 关键字时,将不会强制用户立即生成表空间的备份。 但是,强烈建议您尽快生成备份,以确保可正确地恢复新创建的表。 这是一个用于 COPY 操作的可选选项。
- "所有者"
- 在成功执行 COPY 操作后,允许用户更改在目标模式中创建的每个新对象的所有者。 目标对象的缺省所有者将是连接用户;如果指定了此选项,那么会将所有权转移给新的所有者。 这是一个用于 COPY 操作的可选选项。
- "TABLESPACE_MAP"
- 在复制期间,用户可指定要使用的表空间名称映射,而不是源系统中的表空间。 这将是一些表空间映射的数组,并用括号括起来。 例如,
tablespace_map ((TS1, TS2),(TS3, TS4))
。 这意味着会将表空间 TS1 中的所有对象复制到目标数据库上的表空间 TS2,而将表空间 TS3 中的对象复制到目标上的表空间 TS4。 对于((T1, T2),(T2, T3))
,将在目标数据库的 T2 中重新创建在源数据库的 T1 中找到的所有对象,并且将在目标数据库的 T3 中重新创建在源数据库的 T2 中找到的任何对象。 缺省情况是使用与源数据库中的表空间名相同的表空间名。在这种情况下,不需要此表空间的输入映射。 如果指定的表空间不存在,那么复制使用该表空间的对象将失败,并且会记录到错误文件中。用户还可以选择使用 SYS_ANY 关键字来指示应使用缺省表空间选择算法来选择目标表空间。 在这种情况下,db2move 将能够选择任何可用表空间来用作目标。 SYS_ANY 关键字可用于所有表空间。示例:
tablespace_map SYS_ANY
。 另外,用户可以对一些表空间指定特定映射,并对其余表空间指定缺省表空间选择算法。 例如,tablespace_map ((TS1, TS2),(TS3, TS4), SYS_ANY)
。 这指示表空间 TS1 映射至 TS2 以及 TS3 映射至 TS4,但其余表空间将使用缺省表空间目标。 由于不可能有一个以“SYS”开头的表空间,因此将使用 SYS_ANY 关键字。这是一个用于 COPY 操作的可选选项。
- "PARALLEL" number_of_threads
- 指定此选项可使模式中表的装入操作在一定数量的线程中传播。 number_of_threads 的值范围是 0-16
- 如果未指定 PARALLEL,那么不会使用任何线程且会连续执行装入操作。
- 如果在没有一定数量的线程的情况下指定 PARALLEL,那么 db2move 实用程序将选择相应的值。
- 如果指定 PARALLEL 并提供 number_of_threads,那么会使用指定的线程数量。 如果 number_of_threads 是 0 或 1,那么会连续执行装入操作。
- 可以为 number_of_threads 指定的最大值是 16。
这是一个用于 COPY 操作的可选选项。
- -l lobpath
- 对于 IMPORT 和 EXPORT,如果指定了此选项,那么它还将用于 XML 路径。 缺省值是当前目录。
此选项指定将创建(作为 EXPORT 的一部分)或搜索(作为 IMPORT 或 LOAD 的一部分)LOB 或 XML 文件的绝对路径名。 当指定多个路径时,必须将它们用逗号分隔开;路径之间不允许存在空格。 如果指定了多个路径,那么 EXPORT 将以循环方式使用这些路径。 它会将一个 LOB 文档写入第一个路径,将下一个 LOB 文档写入第二个路径,以此类推,直到写入最后一个路径,然后又开始写入第一个路径。 对于 XML 文档,情况亦如此。 (在 IMPORT 或 LOAD 期间)如果在第一个路径中找不到文件,那么将使用第二个路径,以此类推。
- -u 用户标识
- 缺省值是已登录的用户标识。
用户标识和密码均为可选。 但是,如果指定了其中任何一项,就必须指定另一项。 如果在与远程服务器相连的客户机上运行命令,那么应指定用户标识和密码。
- -p 密码
- 缺省值是已登录的密码。 用户标识和密码均为可选。 但是,如果指定了其中任何一项,就必须指定另一项。 当指定了 -p 选项但是未提供密码时,db2move 将提示您输入密码。 这样做是为了安全起见。 通过命令行输入密码会产生安全性问题。 例如,ps -ef 命令就会将密码显示出来。 但是,如果通过脚本调用了 db2move,那么将必须提供密码。 如果在与远程服务器相连的客户机上发出命令,那么应指定用户标识和密码。
- -aw
- 允许警告。 如果未指定 -aw,那么在导出期间产生警告的表将不会包括在 db2move.lst 文件中(尽管仍然会生成表的 .ixf 文件和 .msg 文件)。 在某些情况下(例如,数据截断),用户可能想允许将这些表包括在 db2move.lst 文件中。 如果指定此选项,那么会允许在导出期间将接收到警告的那些表包括在
.lst
文件中。
示例
- 要导出 SAMPLE 数据库中的所有表(对所有选项都使用缺省值),请发出以下命令:
db2move sample export
- 要导出由
userid1
或用户标识 LIKEus%rid2
创建的、并且名称为tbname1
或者表名 LIKE%tbname2
的所有表,请发出以下命令:db2move sample export -tc userid1,us*rid2 -tn tbname1,*tbname2
- 要导入 SAMPLE 数据库中的所有表 (LOB 路径 D:\LOBPATH1 和 C:\LOBPATH2 将搜索 LOB 文件; 此示例仅适用于 Windows 操作系统) ,请发出:
db2move sample import -l D:\LOBPATH1,C:\LOBPATH2
- 要装入 SAMPLE 数据库中的所有表 (将在/home/userid/lobpath 子目录和 tmp 子目录中搜索 LOB 文件; 此示例仅适用于 Linux® 和 UNIX 系统) ,请发出:
db2move sample load -l /home/userid/lobpath,/tmp
- 要使用指定的用户标识和密码以 REPLACE 方式导入 SAMPLE 数据库中的所有表,请发出以下命令:
db2move sample import -io replace -u userid -p password
- 要将
schema1
模式从源数据库dbsrc
复制到目标数据库dbtgt
中,请发出以下命令:db2move dbsrc COPY -sn schema1 -co TARGET_DB dbtgt USER myuser1 USING mypass1
- 要将
schema1
模式从源数据库dbsrc
复制到目标数据库dbtgt
中,在目标数据库上将该模式重命名为newschema1
,并将源表空间ts1
映射至目标数据库上的ts2
,请发出以下命令:db2move dbsrc COPY -sn schema1 -co TARGET_DB dbtgt USER myuser1 USING mypass1 SCHEMA_MAP ((schema1,newschema1)) TABLESPACE_MAP ((ts1,ts2), SYS_ANY))
使用说明
- 将一个或多个模式复制到目标数据库时,模式必须相互独立。 否则,某些对象可能未成功复制到目标数据库。
- 仅 LOAD 操作支持将数据装入到包含 XML 列的表中,COPY 操作不支持这样做。 变通方法是手动发出 IMPORT 或 EXPORT 命令,或者使用 db2move Export 和 db2move Import 行为。 如果这些表还包含 GENERATED ALWAYS 标识列,那么不能将数据导入到表中。
- db2move EXPORT后跟 db2move IMPORT 或 db2move LOAD有助于表数据的移动。 必须手动移动与表相关联的所有其他数据库对象(例如别名、视图或触发器)以及这些表可能依赖于的对象(例如用户定义的类型或用户定义的函数)。
- 如果使用带有 CREATE 或 REPLACE_CREATE 选项的 IMPORT 操作在目标数据库上创建表 (不推荐使用这两个选项,并且在将来的发行版中可能会除去这两个选项) ,那么将实施
导入的表重新创建
中概述的限制。 如果在使用 REPLACE_CREATE 选项的 db2move 导入阶段期间迂到意外错误,请检查相应的 tabnnn.msg 消息文件,并考虑这些错误是否可能是表创建限制的结果。 - 使用 db2move 时无法导入或装入包含 GENERATED ALWAYS 标识列的表。 但是,您可以手动导入或装入这些表。 有关更多信息,请参阅
身份列装入注意事项
或身份列导入注意事项
。 - 当 db2move 调用导出、导入或装入 API 时,FileTypeMod 参数设置为 lobsinfile。 即,对于每个表,LOB 数据保存在 PC/IXF 文件之外的文件中。
- 必须在数据库和数据文件所在的机器上以本地方式运行 LOAD 命令。
- 使用 db2move LOAD 操作时,将对数据库启用 LOGARCHMETH1 数据库配置参数 (例如, 数据库可恢复) , db2move 将使用 NONRECOVERABLE 选项调用 db2Load API。 用于提高装入性能的选项中描述了 NONRECOVERABLE 选项的前滚恢复行为。
- 使用 db2move COPY 操作时,将对数据库启用 LOGARCHMETH1 数据库配置参数 (例如, 数据库可恢复):
- 如果未指定 NONRECOVERABLE 选项,那么 db2move 将使用缺省 COPY NO 选项调用 db2Load API ,并且在实用程序完成后,装入的表所在的表空间将处于 "备份暂挂" 状态 (需要完全数据库或表空间备份才能使表空间脱离 "备份暂挂" 状态)。 如果启用了 DB2_LOAD_COPY_NO_OVERRIDE 注册表变量,那么 Load 将采用优先于 COPY NO 行为的配置值。 请参阅 DB2_LOAD_COPY_NO_OVERRIDE 以获取详细信息。
- 如果指定了 NONRECOVERABLE 选项,那么不会将表空间置于备份暂挂状态。 用于提高装入性能的选项中描述了 NONRECOVERABLE 选项的前滚恢复行为。
- 通过更改缺省缓冲池 IBMDEFAULTBP 以及更新配置参数 sortheap, util_heap_sz, logfilsiz和 logprimary,可以提高带有 IMPORT 或 LOAD 操作的 db2move 命令的性能。
- 运行数据移动实用程序(例如,export 和 db2move)时,查询编译器可能会确定对 MQT(与基本表相比)执行底层查询更有效率。 在这种情况下,查询将针对刷新延迟的 MQT 执行,并且实用程序的结果可能不会准确地表示底层表中的数据。
- db2move 操作不可用于 Db2 客户机。 如果从客户机发出 db2move 命令,那么您将收到db2move is not recognized as an internal or external command, operable program or batch file错误消息。 为了避免此问题,可以直接在服务器上发出 db2move 命令。
- db2move COPY 操作和 ADMIN_COPY_SCHEMA 过程执行类似的任务。 ADMIN_COPY_SCHEMA 过程在同一数据库中复制模式,而 db2move COPY 命令从一个数据库复制到另一个数据库。 过程中涵盖的许多用法说明,行为和限制-复制特定模式及其对象,也适用于 db2move COPY 命令。
- 行和列访问控制 (RCAC) 适用于对受行许可权和列掩码保护的表的任何 SQL 访问。 RCAC 在应用程序和实用程序 (例如 IMPORT 和 EXPORT) 中包含 SQL。 例如,从使用 EXPORT 实用程序的行许可权和列掩码保护的表中导出数据时,将仅导出您有权访问的数据。 如果您打算导出表的完整内容,那么需要确保 SECADM 授予您正确的权限。
使用 EXPORT 时需要的/生成的文件
- 输入:无。
- 输出:
- EXPORT.out
- EXPORT 操作的汇总结果。
- db2move.lst
- 原始表名、它们的相应 PC/IXF 文件名(tabnnn.ixf)和消息文件名(tabnnn.msg)的列表。 此列表、已导出的 PC/IXF 文件以及 LOB 文件 (tabnnnc.yyy) 被用作 db2move IMPORT 或 LOAD 操作的输入。
- 选项卡nnn.ixf
- 特定表的已导出 PC/IXF 文件。
- 选项卡nnn.msg
- 相应表的导出消息文件。
- 选项卡nnnc。yyy
- 特定表的已导出 LOB 文件。
nnn 是表的编号。 c 是字母表中的一个字母。 yyy 是从 001 到 999 范围内的一个数字。
仅当要导出的表包含 LOB 数据时才会创建这些文件。 如果创建了这些 LOB 文件,那么会将它们放入 lobpath 目录中。 LOB 文件共有 26,000 个可能的名称。
使用 IMPORT 时需要的/生成的文件
- 输入:
- db2move.lst
- EXPORT 操作产生的输出文件。
- 选项卡nnn.ixf
- EXPORT 操作产生的输出文件。
- 选项卡nnnc。yyy
- EXPORT 操作产生的输出文件。
- 输出:
- IMPORT.out
- IMPORT 操作的汇总结果。
- 选项卡nnn.msg
- 相应表的导入消息文件。
使用 LOAD 时需要的/生成的文件
- 输入:
- db2move.lst
- EXPORT 操作产生的输出文件。
- 选项卡nnn.ixf
- EXPORT 操作产生的输出文件。
- 选项卡nnnc。yyy
- EXPORT 操作产生的输出文件。
- 输出:
- LOAD.out
- LOAD 操作的汇总结果。
- 选项卡nnn.msg
- 相应表的 LOAD 消息文件。
使用 COPY 时需要的/生成的文件
- 输入:无
- 输出:
- COPYSCHEMA.msg
- 输出文件,包含执行 COPY 操作期间生成的消息。
- COPYSCHEMA.err
- 输出文件,包含执行 COPY 操作期间遇到的每个错误的错误消息,还包含无法在目标数据库上为每个对象重新创建的 DDL 语句。
- LOADTABLE.msg
- 输出文件,包含 LOAD 实用程序(用于在目标数据库上重新填充数据)的每次调用所生成的消息。
- LOADTABLE.err
- 输出文件,包含装入期间遇到失败的表名或仍需要在目标数据库上进行填充的表的名称。 请参阅
重新启动失败的复制模式操作
主题以获取更多详细信息。
这些文件都具有时间戳记,并且运行一次命令所生成的所有文件都具有相同的时间戳记。