DB2 实用程序介绍之数据移动实用程序
db2move
db2move 是用于在 DB2 数据库之间移动大量表的一个数据移动工具。这个命令中支持的动作有 EXPORT、IMPORT、LOAD 和 COPY。EXPORT、IMPORT 和 LOAD 这几个动作的行为与前一屏中描述的完全相同。您可能不熟悉的惟一一个动作就是 COPY。它将一个或多个模式中的表复制到一个目标数据库中。db2move 的语法很简单:
db2move database_name
action
options
db2move 将一组用户表从系统编目表中提取出来,并将每个表以 PC/IXF 格式导出。然后,PC/IXF 文件可以被导入或装载到另一个 DB2 数据库中。
下面是一些例子。这个命令用指定的用户 ID 和密码以 REPLACE 模式导入 sample 数据库中的所有表:
db2move sample IMPORT -io REPLACE -u userid -p password
下面的命令以 REPLACE 模式装载 db2admin 和 db2user 这两个模式下的所有表:
db2move sample LOAD -sn db2admin,db2user -lo REPLACE
请参考 Command Reference,以获得所有选项的完整列表和相关描述。不过,COPY 动作值得一谈。在 COPY 动作中,可以用 -sn 选项指定一个或多个模式。只有具有 -sn 选项中指定的模式名的表才被复制(通过导出)。如果指定多个模式名,则使用逗号将它们隔开,这里不允许使用空格。请参考下面的例子。
db2move sample COPY -sn db2inst1,prodschema -co TARGET_DB acctdb USER peter
USING petepasswd DDL_AND_LOAD
上面的 db2move 命令复制 db2inst1 和 prodschema 模式下受支持的对象。后面跟着的 -co 选项使这个命令更加有趣。TARGET_DB 选项指定这些模式将被复制到的目标数据库。当指定了 COPY 动作时,这个选项是强制性的。此外,目标数据库必须不同于源数据库。当连接到目标数据库时,可以通过 USER 和 USING 选项提供用户名和密码。
默认情况下,db2move 命令将根据源模式创建受支持的对象,并填充目标数据库中的表。这是 DDL_AND_LOAD 模式的行为。有两种可用的模式:DDL_ONLY 和 LOAD_ONLY。顾名思义,DDL_ONLY 只根据源模式创建所有受支持的对象,而 LOAD_ONLY 则将所有指定的表从源数据库装载到目标数据库。注意,当使用这个选项时,那些表必须已经存在于目标数据库中。
在将对象复制到目标数据库时,可能需要重新命名模式。可以使用 SCHEMA_MAP 选项来实现这个目的。您只需提供一个或多个模式映射对,就像下面这样:
SCHEMA_MAP ((source_schema1,target_schema1),(source_schema2,target_schema2))
在使用 SCHEMA_MAP 选项时要特别小心。只有对象本身的模式被重命名,而对象主体中的对象仍保持不变。例如:
CREATE VIEW FOO.v1 AS 'SELECT c1 FROM FOO.T1'
将模式从 FOO 重命名为 BAR 将导致:
CREATE VIEW BAR.v1 AS 'SELECT c1 FROM FOO.T1'
如果 FOO.T1 没有定义,那么目标数据库中就不能成功地创建 BAR.v1。
这样的映射思想同样适用于表空间。例如,假设您想将复制的表存储在与源数据库不同的一个表空间中。那么需要扩展 db2move 命令,以便指定表空间名称映射。考虑下面的选项:
TABLESPACE_MAP ((TS1,TS2),(TS2,TS3),SYS_ANY)
上面的表空间名称映射表明,源 TS1 被映射到目标 TS2,源 TS2 被映射到目标 TS3。SYS_ANY 表明剩下的表空间将使用数据库管理器根据表空间选择算法选择的表空间。让我们来看一个综合性的例子。
db2move sample COPY -sn db2inst1,prodschema
-co TARGET_DB acctdb USER peter USING petepasswd LOAD_ONLY
SCHEMA_MAP ((db2inst1,db2inst2),(prodschema,devschema))
TABLESPACE_MAP SYS_ANY
NONRECOVERABLE
这个命令将 db2inst1 和 prodschema 中受支持的对象从 SAMPLE 数据库复制到 ACCTDB 数据库。授权 id peter 和相关的密码用于连接到 ACCTDB。目标表已经存在于 ACCTDB 中,这些表将被重新填充。db2inst1 和 prodschema 模式下的所有对象现在分别在 db2inst2 和 devschema 模式下。最后不使用 SAMPLE 数据库中定义的表空间名称,而是使用 ACCTDB 中默认的表空间。
NONRECOVERABLE 选项允许用户在复制完成之后立即使用装载的目标表空间。这里不要求备份表空间,但是强烈建议在早期方便的时候作一个备份。