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 选项允许用户在复制完成之后立即使用装载的目标表空间。这里不要求备份表空间,但是强烈建议在早期方便的时候作一个备份。
db2look
db2look 是可以从命令行提示符下和 Control Center 中调用的一个方便的工具。这个工具可以:
从数据库对象中提取数据库定义语言(DDL)语句。
生成 UPDATE 语句,用于更新数据库管理器和数据库配置参数。
生成 db2set 命令,用于设置 DB2 概要注册表。
提取和生成数据库统计报告。
生成 UPDATE 语句,用于复制关于数据库对象的统计信息。
LOAD 之类的实用程序要求目标表已经存在。您可以使用 db2look 提取表的 DDL,在目标数据库上运行它,然后调用装载操作。db2look 非常容易使用,下面的例子展示了这一点。这个命令生成 peter 在数据库 department 中创建的所有对象的 DDL,输出被存储在 alltables.sql 中。
db2look -d department -u peter -e -o alltables.sql
下面的命令生成:
数据库 department 中所有对象的 DDL(由 -d、-a 和 -e 选项指定)。
UPDATE 语句,用于复制数据库中所有表和索引的统计信息(由选项 -m 指定)。
GRANT 授权语句(由选项 -x 指定)。
用于数据库管理器和数据库配置参数的 UPDATE 语句和用于概要注册表的 db2set 命令(由选项 -f 指定)。
db2look -d department -a -e -m -x -f -o db2look.sql
db2look 还可以生成用于注册 XML 模式的命令。下面的例子生成模式名为 db2inst1 的对象所需的 REGISTER XMLSCHEMA 和 COMPLETE XMLSCHEMA 命令(由选项 -xs 指定)。/home/db2inst1 中将创建输出 db2look.sql,这个目录由 -xdir 选项指定。
db2look -d department -z db2inst1 -xs -xdir /home/db2inst1 -o db2look.sql
db2batch
基准测试是从各种不同方面(例如数据库响应时间、cpu 和内存使用情况)对应用程序进行评测的一个过程。基准测试基于一个可重复的环境,以便能够在相同的条件下运行相同的测试。之后,对测试收集到的结果可以进行评估和比较。
db2batch 是一种基准测试工具,它以一组 SQL 和/或 XQuery 语句作为输入,动态地准备语句和描述语句,并返回一个结果集。取决于 db2batch 命令中所使用的选项,结果集可以返回这些语句的执行时间、关于内存使用情况(例如缓冲池)的数据库管理器快照和缓存信息。
可以在一个 flat 文件或标准输入中指定要运行基准测试的语句。在输入文件中可以设置很多控制选项。指定这些选项的语法是:--#SET control_option value 。下面是包含控制选项的一个输入文件的例子。要获得控制选项的完整列表,请参考 Information Center。
-- db2batch.sql
-- ------------
--#SET PERF_DETAIL 3
--#SET ROWS_OUT 5
-- This query lists employees, the name of their department
-- and the number of activities to which they are assigned for
-- employees who are assigned to more than one activity less than
-- full-time.
--#COMMENT Query 1
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) > 2;
--#SET PERF_DETAIL 1
--#SET ROWS_OUT 5
--#COMMENT Query 2
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) <= 2;
选项 PERF_DETAIL 3 意味着将返回关于花费的时间和数据库管理器、数据库及应用程序的快照这些性能方面的细节。
选项 ROWS_OUT 5 意味着无论查询返回的实际行数是多少,只从结果集中取 5 行。
COMMENT Query1 将语句命名为 Query1。
下面的命令在 SAMPLE 数据库上调用基准测试工具,输入文件为 db2batch.sql。
db2batch -d sample -f db2batch.sql
这个命令将返回查询的结果集(限 5 行)和查询所花费的时间及 CPU 时间。另外还返回数据库管理器、数据库和应用程序快照。由于输出很大,因此这里只显示 db2batch 命令的概要。
* Summary Table:
Type Number Repetitions Total Time (s) Min Time (s) ...
--------- ----------- ----------- -------------- --------------
Statement 1 1 0.052655 0.052655 ...
Statement 2 1 0.004518 0.004518 ...
...Max Time (s) Arithmetic Mean Geometric Mean Row(s) Fetched Row(s) Output
-------------- --------------- -------------- -------------- -------------
... 0.052655 0.052655 0.052655 5 5
... 0.004518 0.004518 0.004518 8 5
* Total Entries: 2
* Total Time: 0.057173 seconds
* Minimum Time: 0.004518 seconds
* Maximum Time: 0.052655 seconds
* Arithmetic Mean Time: 0.028587 seconds
* Geometric Mean Time: 0.015424 seconds
db2batch 命令支持很多选项。这里只列出其中一些选项,让您对这个工具的威力有所了解。
-m parameter_file 用参数值指定用于绑定到 SQL 语句参数占位符的一个输入文件。
-r result_file 指定存放命令结果的输出文件。
-i short|long|complete 指定从哪个方面测量所花费的时间。short 测量运行每条语句所花费的时间。long 测量运行每条语句所花费的时间,包括语句之间的开销。complete 测量运行每条语句所花费的时间,分别报告准备、执行和取数据的时间。
-iso 指定语句使用的隔离级别。默认情况下,db2batch 使用 Repeatable Read 隔离级别。