一、简介

HPU即Optim High Performance Unload,是一款快速的、高效的、灵活的、多功能的数据卸载和迁移工具。在大部分情况下,HPU 卸载数据的速度比 DB2 Export 实用工具要快,因为 HPU 可以绕过 DB2 数据库管理器,直接访问数据库文件。因此在使用它卸载数据时可以达到相当高的性能。不仅如此,HPU还可以以数据不落地的方式在线进行迁移,自动地将数据从一个系统中的 DB2 实例迁移到另一个系统中的 DB2 实例中,其中包括卸载,迁移,加载数据到目标实例的操作。

二、安装

Mark: 通过root用户进行安装和卸载

下载好安装介质, 例如测试的介质为V5.1 Linux x86版本

OHPU_DB2_FOR_LUW_V5.1.0.1_LNX86.tar.gz

提前安装好xinetd

yum install xinetd -y

解压安装包

tar xf /tmp/OHPU_DB2_FOR_LUW_V5.1.0.1_LNX86.tar.gz

进入解压好的安装目录,执行安装程序

[root@host-170-130-106-206] [~]
$ cd /tmp/HPU5101/
[root@host-170-130-106-206] [/tmp/HPU5101]
$ ll
总用量 32964
-rw-r--r-- 1 root root 32184320 8月 17 2014 archive_core_linux.tar
-rw-r--r-- 1 root root 378880 8月 17 2014 archive_inst_linux.tar
-rw-r--r-- 1 root root 358400 8月 17 2014 archive_network_linux.tar
-rw-r--r-- 1 root root 133120 8月 17 2014 archive_procedure_linux.tar
-rw-r--r-- 1 root root 358400 8月 17 2014 archive_uninst_linux.tar
drwxr-xr-x 2 root root 37 8月 17 2014 config
-r-xr-xr-x 1 root root 59610 8月 17 2014 installer_common.sh
-r-xr-xr-x 1 root root 176208 8月 17 2014 installer_setup.sh
-r-xr-xr-x 1 root root 3051 8月 17 2014 install_hpu.sh
-r--r--r-- 1 root root 769 8月 17 2014 InstallInstructions.txt
-r--r--r-- 1 root root 10435 8月 17 2014 install_linux.ini
drwxr-xr-x 24 root root 4096 8月 17 2014 license
drwxr-xr-x 20 root root 283 8月 17 2014 messages
-r--r--r-- 1 root root 18760 8月 17 2014 Readme.txt
drwxr-xr-x 2 root root 61 8月 17 2014 support
-rw-r--r-- 1 root root 0 6月 8 10:40 trace_error_install
-rw-r--r-- 1 root root 40286 6月 8 10:40 trace_install
-rw-r--r-- 1 root root 0 6月 8 10:40 trace_warning_install
-r-xr-xr-x 1 root root 2080 8月 17 2014 uninstall_hpu.sh
[root@host-170-130-106-206] [/tmp/HPU5101]
$ ./install_hpu.sh 此脚本将在计算机上安装 Optim High Performance Unload for DB2 for Linux, UNIX and Windows ------------------------------------------------------------------------------- HPU 5.1.0.1 (Full)
完成 安装 IBM Corp.
http://www.ibm.com/software/data/db2imstools 安装目录: /opt/ibm/HPU/V5.1
这是要用于安装产品的目录。 输入 1 进行下一步,输入 2 取消:
1
....
....
....
L/N: L-DNAA-94TPSX
D/N: L-DNAA-94TPSX
P/N: L-DNAA-94TPSX
输入 1 接受协议,输入 2 拒绝协议
1 ........................................................................................................ 安装已完成,但存在警告。 在文件 /opt/ibm/HPU/V5.1/install/trace_warning_install 中可找到警告消息。 要允许 DBA 对文件进行更改而不要求 root 用户权限,您可以更改 HPU 配置目录的所有权。要更改所有权,从命令提示符输入: chown -R mydba:dbagroup HPU_install_directory/cfg 此外,如果 DBA 没有将项添加到缺省实例和数据库的 db2hpu.cfg 文件,需要所有用户在命令行中至少使用 -i 选项,并可选择使用 -d 选项。

默认是安装在/opt/ibm/HPU

检查安装版本

$ /opt/ibm/HPU/V5.1/bin/db2hpu --version
INZM030I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 版本 64 位 05.01.00.001(140816)

卸载软件

$ /opt/ibm/HPU/V5.1/uninstall/uninstall_hpu.sh 

此脚本将卸载计算机上的 Optim High Performance Unload for DB2 for Linux, UNIX and Windows

-------------------------------------------------------------------------------

HPU 5.1.0.1 (Full)
完成 安装 IBM Corp.
http://www.ibm.com/software/data/db2imstools 安装目录: /opt/ibm/HPU/V5.1
这是要用于除去产品的目录。 输入 1 进行下一步,输入 2 取消:
1 ............................................................................................... 卸载已完成,但存在警告。 请查看文件 /tmp/trace_warning_uninstall 以获取详细信息。

三、基本配置

创建db2hpu的软链接

$ ln -sv /opt/ibm/HPU/V5.1/bin/db2hpu /bin/db2hpu
"/bin/db2hpu" -> "/opt/ibm/HPU/V5.1/bin/db2hpu" [root@host-170-130-106-206] [/opt/ibm/HPU/V5.1/bin]
$ ls -lrt /bin/db2hpu
lrwxrwxrwx 1 root root 28 6月 8 14:02 /bin/db2hpu -> /opt/ibm/HPU/V5.1/bin/db2hpu

修改如下配置文件,添加下面三行,增强HPU性能

cps             = 5000 10
instances = 5000
per_source = 100

最终文件内容如下:

$ cat  /etc/xinetd.d/db2hpudm51
#
# @(#) db2hpudm51
# service db2hpudm51
{
disable = no
flags = REUSE
socket_type = stream
protocol = tcp
wait = no
user = root
server = /opt/ibm/HPU/V5.1/bin/db2hpudm
server_args = --tophpu /opt/ibm/HPU/V5.1 --loglevel 3 --inetd --logfile /var/log/hpu/db2hpudm51.log
log_on_failure += USERID HOST
log_on_success += USERID PID HOST DURATION
cps = 5000 10
instances = 5000
per_source = 100
}

重启xinetd服务

$ systemctl restart xinetd

修改/opt/ibm/HPU/V5.1/cfg/属组为DB2实例owner,则后续实例owner可以修改对应的HPU卸数参数

$ chown -R db2inst1.dbgrp /opt/ibm/HPU/V5.1/cfg/

修改配置文件如下(默认的数据库名和实例名可以按需指定,则调用db2hpu时不需要单独指定实例和数据库)

$ cat /opt/ibm/HPU/V5.1/cfg/db2hpu.cfg
# HPU default configuration
bufsize=2097152
db2dbdft=sample
db2instance=db2inst1
doubledelim=binary
netservice=db2hpudm51
allow_unlimited_memory=yes
keepalive_time=10
maxthreads=8
maxselects=10
mig_pipe_timeout=60
min_extent_per_thread=4
use_stats=true
nbcpu=8
umask=022

新建HPU凭证

$ su - db2inst1
$ mkdir .db2hpu
$ cd .db2hpu
$ touch db2hpu.creds
$ db2hpu --credentials local
INZM059I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816)
管理“local”良好连接的凭证:
- 要创建或除去数据吗 (1/2)?1
- 是新部分吗 (Y/N)?y
- 提供节名称:db2inst1
- 提供用户名:db2inst1
- 提供密码:********
要验证数据吗 (Y/N)?y
INZM061I 已为“db2inst1”创建了连接的凭证

四、卸数

4.1. 命令行导出

db2hpu.cfg 中已经配置了db2inst1实例和sample数据库,这里就不需要单独指定了

--导出成del文件
$ db2hpu --format del -t staff -o /tmp/staff.del
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 UNLOAD TABLESPACE
000002 PART(ALL)
000003 SELECT * FROM "STAFF";
000004 OUTFILE("/tmp/staff.del")
000005 FORMAT DEL; INZU462I HPU 控制步骤开始: 14:23:58.213。
INZU463I HPU 控制步骤结束: 14:23:58.375。
INZU464I HPU 运行步骤开始: 14:23:58.376。
INZU410I HPU 实用程序已经卸装 35 行(在 host-170-130-106-206 主机上,针对 DB2INST1.STAFF,在 /tmp/staff.del 中)。
INZU465I HPU 运行步骤结束: 14:23:58.543。
INZI441I HPU 成功结束:实时 -> 0m0.330008s
用户时间 -> 0m0.025528s:父代 -> 0m0.024063s,子代 -> 0m0.001465s
系统时间 -> 0m0.060931s:父代 -> 0m0.052136s,子代 -> 0m0.008795s $ cat /tmp/staff.del
10,"Sanders",20,"Mgr ",7,+98357.50,
20,"Pernal",20,"Sales",8,+78171.25,+00612.45
30,"Marenghi",38,"Mgr ",5,+77506.75,
40,"O'Brien",38,"Sales",6,+78006.00,+00846.55
50,"Hanes",15,"Mgr ",10,+80659.80,
60,"Quigley",38,"Sales",,+66808.30,+00650.25
70,"Rothman",15,"Sales",7,+76502.83,+01152.00
80,"James",20,"Clerk",,+43504.60,+00128.20
90,"Koonitz",42,"Sales",6,+38001.75,+01386.70
100,"Plotz",42,"Mgr ",7,+78352.80,

也可以单独指定实例和数据库,例如

$ db2hpu -i db2inst1 -d sample --format ixf -t emp -o /tmp/emp.ixf
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 PART(ALL)
000004 SELECT * FROM "EMP";
000005 OUTFILE("/tmp/emp.ixf")
000006 FORMAT IXF; INZU462I HPU 控制步骤开始: 14:26:55.716。
INZU463I HPU 控制步骤结束: 14:26:55.751。
INZU464I HPU 运行步骤开始: 14:26:55.752。
INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /tmp/emp.ixf 中)。
INZU465I HPU 运行步骤结束: 14:26:55.973。
INZI441I HPU 成功结束:实时 -> 0m0.256954s
用户时间 -> 0m0.036646s:父代 -> 0m0.034759s,子代 -> 0m0.001887s
系统时间 -> 0m0.052511s:父代 -> 0m0.046850s,子代 -> 0m0.005661s

4.2. 控制文件

4.2.1. 从表空间容器卸数

有时候卸数的真实场景会更复杂些,这时候可以通过指定控制文件来达成更复杂的场景需求,例如:

cat > sample.ctl << EOF
GLOBAL CONNECT TO SAMPLE;
unload tablespace USERSPACE1
SELECT * FROM db2inst1.staff WHERE job ='Sales';
OUTPUT("/home/db2inst1/export/staff_sales.del" REPLACE)
FORMAT DEL; unload tablespace USERSPACE1
SELECT * FROM db2inst1.staff WHERE job ='Mgr';
OUTPUT("/home/db2inst1/export/staff_mgr.del" REPLACE)
FORMAT DEL; unload tablespace USERSPACE1
SELECT * FROM db2inst1.EMP_PHOTO;
OUTPUT("/home/db2inst1/export/EMP_PHOTO" REPLACE)
LOB IN ("/home/db2inst1/export/lobs")
LOBFILE("EMP_PHOTO")
FORMAT DEL;
EOF

上面的控制文件中含3段卸数逻辑

  • 导出staff表中job为Sales的数据
  • 导出staff表中job为Mrg的数据
  • 导出EMP_PHOTO表并且指定了BLOB数据导出位置
$ db2hpu -f sample.ctl
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 GLOBAL CONNECT TO SAMPLE;
000002 unload tablespace USERSPACE1
000003 SELECT * FROM db2inst1.staff WHERE job ='Sales';
000004 OUTPUT("/home/db2inst1/export/staff_sales.del" REPLACE)
000005 FORMAT DEL;
000006
000007 unload tablespace USERSPACE1
000008 SELECT * FROM db2inst1.staff WHERE job ='Mgr';
000009 OUTPUT("/home/db2inst1/export/staff_mgr.del" REPLACE)
000010 FORMAT DEL;
000011
000012 unload tablespace USERSPACE1
000013 SELECT * FROM db2inst1.EMP_PHOTO;
000014 OUTPUT("/home/db2inst1/export/EMP_PHOTO" REPLACE)
000015 LOB IN ("/home/db2inst1/export/lobs")
000016 LOBFILE("EMP_PHOTO")
000017 FORMAT DEL; INZU462I HPU 控制步骤开始: 15:09:54.683。
INZU463I HPU 控制步骤结束: 15:09:54.760。
INZU464I HPU 运行步骤开始: 15:09:54.760。
INZU410I HPU 实用程序已经卸装 12 行(在 host-170-130-106-206 主机上,针对 DB2INST1.STAFF,在 /home/db2inst1/export/staff_sales.del 中)。
INZU410I HPU 实用程序已经卸装 11 行(在 host-170-130-106-206 主机上,针对 DB2INST1.STAFF,在 /home/db2inst1/export/staff_mgr.del 中)。
INZU410I HPU 实用程序已经卸装 8 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMP_PHOTO,在 /home/db2inst1/export/EMP_PHOTO 中)。
INZU465I HPU 运行步骤结束: 15:09:55.387。
INZI441I HPU 成功结束:实时 -> 0m0.704005s
用户时间 -> 0m0.025539s:父代 -> 0m0.025539s,子代 -> 0m0.000000s
系统时间 -> 0m0.081912s:父代 -> 0m0.068758s,子代 -> 0m0.013154s

导出结果:

[db2inst1@host-170-130-106-206] [~/export]
$ ls -lrt
总用量 16
-rw-r--r-- 1 db2inst1 dbgrp 537 6月 8 15:09 sample.ctl
-rw-r--r-- 1 db2inst1 dbgrp 554 6月 8 15:09 staff_sales.del
-rw-r--r-- 1 db2inst1 dbgrp 402 6月 8 15:09 staff_mgr.del
drwxr-xr-x 2 db2inst1 dbgrp 230 6月 8 15:09 lobs
-rw-r--r-- 1 db2inst1 dbgrp 532 6月 8 15:09 EMP_PHOTO
[db2inst1@host-170-130-106-206] [~/export]
$ ls -l lobs/
总用量 392
-rw-r--r-- 1 db2inst1 dbgrp 43690 6月 8 15:09 EMP_PHOTO.e00001.000
-rw-r--r-- 1 db2inst1 dbgrp 29540 6月 8 15:09 EMP_PHOTO.e00002.000
-rw-r--r-- 1 db2inst1 dbgrp 71798 6月 8 15:09 EMP_PHOTO.e00003.000
-rw-r--r-- 1 db2inst1 dbgrp 29143 6月 8 15:09 EMP_PHOTO.e00004.000
-rw-r--r-- 1 db2inst1 dbgrp 73438 6月 8 15:09 EMP_PHOTO.e00005.000
-rw-r--r-- 1 db2inst1 dbgrp 39795 6月 8 15:09 EMP_PHOTO.e00006.000
-rw-r--r-- 1 db2inst1 dbgrp 63542 6月 8 15:09 EMP_PHOTO.e00007.000
-rw-r--r-- 1 db2inst1 dbgrp 36088 6月 8 15:09 EMP_PHOTO.e00008.000
[db2inst1@host-170-130-106-206] [~/export]
$ cat EMP_PHOTO
"000130","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00001.000"
"000130","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00002.000"
"000140","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00003.000"
"000140","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00004.000"
"000150","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00005.000"
"000150","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00006.000"
"000190","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00007.000"
"000190","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00008.000"

4.2.2. 从备份镜像中卸数

另外除了从表空间container中卸数,也可以从数据库的备份文件中进行卸数,这对于数据实时性要求不高的场景很适合,还避免了直接操作在运行的数据库。

$ db2 backup db sample online to /home/db2inst1/export

Backup successful. The timestamp for this backup image is : 20210608152001

cat > sample01.ctl << EOF
GLOBAL CONNECT TO SAMPLE ;
UNLOAD TABLESPACE USERSPACE1
USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
SELECT * FROM db2inst1.EMPLOYEE;
OUTPUT ("/home/db2inst1/export/emp.del" REPLACE)
FORMAT DEL
;
EOF $ db2hpu -f sample01.ctl
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 GLOBAL CONNECT TO SAMPLE ;
000002 UNLOAD TABLESPACE USERSPACE1
000003 USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" ;
000004 SELECT * FROM db2inst1.EMPLOYEE;
000005 OUTPUT ("/home/db2inst1/export/emp.del" REPLACE)
000006 FORMAT DEL
000007 ; INZU462I HPU 控制步骤开始: 15:22:39.126。
INZU420W DB2 YES 与从备份卸装不兼容,已转换成 DB2 NO
INZU520W 为分区 0 指定的备份映像是“联机”备份映像
INZU463I HPU 控制步骤结束: 15:22:39.211。
INZU464I HPU 运行步骤开始: 15:22:39.212。
INZU557I 卸装中涉及分区 0 备份图像(获取于 20210608152001)(类型 FULL ONLINE DATABASE,设备 DISK)。
INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp.del 中)。
INZU465I HPU 运行步骤结束: 15:22:39.514。
INZI441I HPU 成功结束:实时 -> 0m0.388620s
用户时间 -> 0m0.023377s:父代 -> 0m0.023377s,子代 -> 0m0.000000s
系统时间 -> 0m0.320603s:父代 -> 0m0.320603s,子代 -> 0m0.000000s

4.2.3. 控制文件语法参考

https://www.ibm.com/docs/en/iohpufdflu-and-w/6.1?topic=syntax-unload-block

4.3. 存储过程

4.3.1. 创建存储过程

HPU也可以以DB2 存储过程的方式来运行

安装完毕后,在如下目录中可以找到创建存储过程所需的文件

$ ls -rlt /opt/ibm/HPU/V5.1/install/function
总用量 132
-rwxr-xr-x 1 root root 124581 8月 17 2014 db2hpuproc.so --动态库文件
-r-xr-xr-x 1 root root 5491 8月 17 2014 hpu_stored_proc_inst.sh --创建procedure的脚本

通过实例用户来执行脚本创建HPU存储过程:

创建语法hpu_stored_proc_inst.sh <HPU INSTALL PATH> <Database Name>

[db2inst1@host-170-130-106-206] [/opt/ibm/HPU/V5.1/install/function]
$ ./hpu_stored_proc_inst.sh /opt/ibm/HPU/V5.1 sample
Copy file "db2hpuproc.so" to stored procedures directory
Connection to database "sample"
Creation of stored procedure in database "sample"
Disconnection from database "sample"
Ending of database use

查看存储过程

$ db2 "select substr(ROUTINESCHEMA,1,15) AS ROUTINESCHEMA,substr(ROUTINENAME,1,15) AS ROUTINENAME,ROUTINETYPE,VALID,CREATE_TIME,ALTER_TIME from syscat.routines where ROUTINETYPE = 'P' and ROUTINESCHEMA ='DB2INST1' and ROUTINENAME='DB2HPU'"

ROUTINESCHEMA   ROUTINENAME     ROUTINETYPE VALID CREATE_TIME                ALTER_TIME
--------------- --------------- ----------- ----- -------------------------- --------------------------
DB2INST1 DB2HPU P 2021-06-08-15.31.01.417755 2021-06-08-15.31.01.417755 1 record(s) selected.

4.3.2. 调用存储过程

--语法
db2 "call db2hpu('<HPU installation path>','<HPU command-line arguments>','<request to submit>','<HPU report>','<HPU return code>')

其中的参数官网解释如下:

Where:

  • The parameter represents the Optim High Performance Unload installation path and is expressed as a VARCHAR(512) string.

  • The parameter contains the Optim High Performance Unload command line arguments and is expressed as a CLOB(1024) string.

    The parameter represents the Optim High Performance Unload request and is expressed as a CLOB(64K) string. Use this parameter for what is normally included in a control file.

  • The parameter represents the Optim High Performance Unload report and is expressed as a CLOB(64K) string. This parameter is used for output purposes only. You need to specify it on the command line by using the question mark (?) character.

  • The parameter represents the Optim High Performance Unload return code and is expressed as an integer. This parameter is also used for output purposes only. You need to specify it on the command line by using the question mark (?) character.

调用存储过程卸数,有两种方式可以实现

  • 触发一个select 请求
  • 触发一个HPU unload请求

两种方式的区别在于:如果客户的需求可以用一个 select 语句来实现,则 select 请求只需在 <HPU command-line arguments> 中指定 -select 选项,并在<request to submit>参数中指定这个 select 语句。否则,将需要提供一个完整的 HPU 请求。

触发一个HPU unload请求

$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.1.3
SQL authorization ID = DB2INST1
Local database alias = SAMPLE --触发一个HPU unload请求
$ db2 "call db2hpu('/opt/ibm/HPU/V5.1', '-i db2inst1 -d sample -o /home/db2inst1/export/emp.out', 'unload tablespace db2 no select * from employee; format del;', ?, ?)" Value of output parameters
--------------------------
Parameter Name : STDERR
Parameter Value : INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 unload tablespace db2 no select * from employee; format del;
INZU462I HPU 控制步骤开始: 15:46:23.531。
INZU463I HPU 控制步骤结束: 15:46:23.544。
INZU464I HPU 运行步骤开始: 15:46:23.550。
INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp.out 中)。
INZU465I HPU 运行步骤结束: 15:46:23.756。
INZI441I HPU 成功结束:实时 -> 0m0.225495s
用户时间 -> 0m0.039064s:父代 -> 0m0.039064s,子代 -> 0m0.000000s
系统时间 -> 0m0.084047s:父代 -> 0m0.062503s,子代 -> 0m0.021544s Parameter Name : RC
Parameter Value : 0 Return Status = 0

触发一个select 请求

$ db2 "call db2hpu('/opt/ibm/HPU/V5.1', '-i db2inst1 -d sample -o /home/db2inst1/export/emp1.out -select', 'select * from employee', ?, ?)"

  Value of output parameters
--------------------------
Parameter Name : STDERR
Parameter Value : INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 select * from employee
INZU462I HPU 控制步骤开始: 16:43:45.431。
INZU463I HPU 控制步骤结束: 16:43:45.580。
INZU464I HPU 运行步骤开始: 16:43:45.581。
INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp1.out 中)。
INZU465I HPU 运行步骤结束: 16:43:45.888。
INZI441I HPU 成功结束:实时 -> 0m0.457295s
用户时间 -> 0m0.038746s:父代 -> 0m0.035555s,子代 -> 0m0.003191s
系统时间 -> 0m0.093540s:父代 -> 0m0.061630s,子代 -> 0m0.031910s Parameter Name : RC
Parameter Value : 0 Return Status = 0

4.4. 数据迁移

DB2到DB2的数据迁移,我们通常的做法有:

表级别

  • export ---> 网络传输介质 ---> import/load

库级别

  • db2look/db2move export --->网络传输介质 ---> db2move load
  • backup --->网络传输介质 ---> restore/rollforward

HPU也可以实现将数据从一个DB2系统迁移至另一个DB2系统,包括数据库级别、表空间级别以及表级别,且相比于以上列举的方法,HPU的实现更为快速和高效。

使用HPU迁移的前提条件

  • 源系统和目标系统的HPU版本必须相同

  • 源系统和目标系统必须能进行网络通讯

  • 源系统和目标系统中 HPU 使用的网络端口必须一致

    $ cat /etc/services|grep hpu
    db2hpudm51 54008/tcp # Optim HPU Services V5.1 [root@host-170-130-106-206] [/opt/ibm/HPU/V5.1/cfg]
    $ netstat -nltp|grep xinetd
    tcp6 0 0 :::54008 :::* LISTEN 31621/xinetd
  • 目标系统上必须有和源系统上执行 HPU 的用户相同的用户名,并且此用户能对目标系统中要操作的数据库有 LOAD 权限,要操作的表有 INSERT 权限及其它相应的操作权限

4.4.1. 实验环境

源端 目标端
IP 170.130.106.206 170.130.106.214
实例 db2inst1 db2inst1
数据库 sample target
EMPLOYEE EMPLOYEE_T

4.4.2. 创建目标表

预先在目标库创建好表,这里除了db2look,也可以使用HPU导出DDL

$ cat > ddl.ctl << EOF
GLOBAL CONNECT TO SAMPLE ; UNLOAD TABLESPACE
USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
SELECT * FROM db2inst1.EMPLOYEE;
OUTPUT ("/home/db2inst1/export/EMPLOYEE.del" REPLACE)
DDLFILE("/home/db2inst1/export/EMPLOYEE.ddl")
;
EOF $ db2hpu -f ddl.ctl
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 GLOBAL CONNECT TO SAMPLE ;
000002
000003 UNLOAD TABLESPACE
000004 USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
000005 SELECT * FROM db2inst1.EMPLOYEE;
000006 OUTPUT ("/home/db2inst1/export/EMPLOYEE.del" REPLACE)
000007 DDLFILE("/home/db2inst1/export/EMPLOYEE.ddl")
000008 ; INZU462I HPU 控制步骤开始: 18:20:11.777。
INZU420W DB2 YES 与从备份卸装不兼容,已转换成 DB2 NO
INZU520W 为分区 0 指定的备份映像是“联机”备份映像
INZU463I HPU 控制步骤结束: 18:20:11.822。
INZU464I HPU 运行步骤开始: 18:20:11.822。
INZU557I 卸装中涉及分区 0 备份图像(获取于 20210608152001)(类型 FULL ONLINE DATABASE,设备 DISK)。
INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/EMPLOYEE.del 中)。
INZU622I HPU 实用程序已经生成 DDL 文件 /home/db2inst1/export/EMPLOYEE.ddl。
INZU465I HPU 运行步骤结束: 18:20:12.081。
INZI441I HPU 成功结束:实时 -> 0m0.304557s
用户时间 -> 0m0.028983s:父代 -> 0m0.028983s,子代 -> 0m0.000000s
系统时间 -> 0m0.264076s:父代 -> 0m0.264076s,子代 -> 0m0.000000s $ cat EMPLOYEE.ddl
CREATE TABLE "DB2INST1"."EMPLOYEE" (
"EMPNO" CHAR(6) NOT NULL ,
"FIRSTNME" VARCHAR(12) NOT NULL ,
"MIDINIT" CHAR(1) ,
"LASTNAME" VARCHAR(15) NOT NULL ,
"WORKDEPT" CHAR(3) ,
"PHONENO" CHAR(4) ,
"HIREDATE" DATE ,
"JOB" CHAR(8) ,
"EDLEVEL" SMALLINT NOT NULL ,
"SEX" CHAR(1) ,
"BIRTHDATE" DATE ,
"SALARY" DECIMAL(9,2) ,
"BONUS" DECIMAL(9,2) ,
"COMM" DECIMAL(9,2) )
; --在目标数据库中创建表
$ db2 connect to target [db2inst1@host-170-130-106-214] [~]
$ db2 "CREATE TABLE "DB2INST1"."EMPLOYEE_T" (
> "EMPNO" CHAR(6) NOT NULL ,
> "FIRSTNME" VARCHAR(12) NOT NULL ,
> "MIDINIT" CHAR(1) ,
> "LASTNAME" VARCHAR(15) NOT NULL ,
> "WORKDEPT" CHAR(3) ,
> "PHONENO" CHAR(4) ,
> "HIREDATE" DATE ,
> "JOB" CHAR(8) ,
> "EDLEVEL" SMALLINT NOT NULL ,
> "SEX" CHAR(1) ,
> "BIRTHDATE" DATE ,
> "SALARY" DECIMAL(9,2) ,
> "BONUS" DECIMAL(9,2) ,
> "COMM" DECIMAL(9,2) )"
DB20000I The SQL command completed successfully. $ db2 list tables; Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
EMPLOYEE_T DB2INST1 T 2021-06-08-18.10.34.696381

4.4.3. 准备迁移控制文件

这里可以根据需要进行定制化,比如迁移多张表,或者筛选数据

cat > migrate.ctl << EOF
GLOBAL CONNECT TO SAMPLE
UMASK "022"
; MIGRATE TABLESPACE
SELECT * FROM db2inst1.EMPLOYEE;
TARGET ENVIRONMENT(INSTANCE "db2inst1" on "170.130.106.214" IN target)
WORKING IN ("/home/db2inst1/export")
FORMAT MIGRATION into db2inst1.EMPLOYEE_T
;
EOF

4.4.4. 迁移数据

$ db2hpu  -f migrate.ctl
INZI466W 配置参数“use_stats”的值无效:将使用 NO。
INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-206 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
000001 GLOBAL CONNECT TO SAMPLE
000002 UMASK "022"
000003 ;
000004
000005 MIGRATE TABLESPACE
000006 SELECT * FROM db2inst1.EMPLOYEE;
000007 TARGET ENVIRONMENT(INSTANCE "db2inst1" on "170.130.106.214" IN target)
000008 WORKING IN ("/home/db2inst1/export")
000009 FORMAT MIGRATION into db2inst1.EMPLOYEE_T
000010 ; INZU462I HPU 控制步骤开始: 18:26:31.474。
INZU463I HPU 控制步骤结束: 18:26:31.650。
INZU464I HPU 运行步骤开始: 18:26:31.660。
INZU398I 没有卸装要在 host-170-130-106-206 上完成
INZU543I HPU 实用程序将在 host-170-130-106-214 主机上执行装入操作。
INZM031I [host-170-130-106-214] Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 位 2021年06月08日 (Linux host-170-130-106-214 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64)
INZM054I [host-170-130-106-214] HPU 实用程序将使用 umask 值 022。
INZU539I [host-170-130-106-214] HPU 实用程序已执行装入(INSERT 方式)到 DB2INST1.EMPLOYEE_T(在数据库 TARGET 中,此数据库属于实例 db2inst1)中的操作:在 /home/db2inst1/export/DB2INST1.EMPLOYEE_T.msg 中报告(已读取 42,已跳过 0,已装入 42,已拒绝 0,已删除 0,已落实 42)
INZU465I HPU 运行步骤结束: 18:26:33.273。
INZI441I HPU 成功结束:实时 -> 0m1.799026s
用户时间 -> 0m0.119623s:父代 -> 0m0.115451s,子代 -> 0m0.004172s
系统时间 -> 0m0.052782s:父代 -> 0m0.048610s,子代 -> 0m0.004172s

检查目标环境数据

$ db2 connect to target

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.1.3
SQL authorization ID = DB2INST1
Local database alias = TARGET $ db2 "select count(*) from employee_t" 1
-----------
42 1 record(s) selected.

4.4.5. 遇到的问题

控制文件中指定的工作目录WORKING IN ("/home/db2inst1/export") 必须在源端和目标端都存在,不存在则报如下错误

...
INZM054I [host-170-130-106-214] HPU 实用程序将使用 umask 值 022。
INZI347E [host-170-130-106-214] mkfifo 故障发生于 /home/db2inst1/export/out_USERSPACE1_DB2INST1_EMPLOYEE.000 (没有那个文件或目录)
INZM053E HPU 主机上发生 host-170-130-106-214 远程执行失败
...

目标环境没有给db2inst1用户创建HPU工作凭证,报了如下错。参照安装章节中的工作凭证创建

...
INZM053E HPU 主机上发生 host-170-130-106-214 远程执行失败
INZU664E [host-170-130-106-214] 用户 db2inst1 的目标实例 db2inst1 需要“local”类型的凭证。
...

Optim High Performance Unload [HPU]的更多相关文章

  1. 前端性能监控方案window.performance 调研(转)

    1. 业界案例 目前前端性能监控系统大致为分两类:以GA为代表的代码监控和以webpagetest为代表的工具监控. 代码监控依托于js代码并部署到需监控的页面,手动计算时间差或者使用浏览器的的API ...

  2. HTML5的学习--performance获取加载时间的工具

    前段时间因为项目需要获取页面加载的时间,就去看了下HTML5中的performane. 可以用其获得页面详细的加载时间. 关于performance的详细内容可以查看 http://www.cnblo ...

  3. HTML5的学习--performance

    HTML5提供的performance接口精确的告诉我们当访问一个网站页面时当前网页每个处理阶段的精确时间(timestamp),以方便我们进行前端分析. 它是浏览器的直接实现,比在网页中用js设置D ...

  4. 初探 performance – 监控网页与程序性能

    使用 window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据. 配合上报一些客户端浏览器的设备类型等数据,就可以实现简单的统计啦! 额,先看下兼容性如何:h ...

  5. 初探performance.timing API

    初探performance.timing API   浏览器新提供的performance接口精确的告诉我们当访问一个网站页面时当前网页每个处理阶段的精确时间(timestamp),以方便我们进行前端 ...

  6. 前端性能监控:window.performance

    window.performance 是W3C性能小组引入的新的API,目前IE9以上的浏览器都支持.一个performance对象的完整结构如下图所示: memory字段代表JavaScript对内 ...

  7. web计时机制——performance对象

    前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...

  8. 使用performance进行网页性能监控

    由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...

  9. 【转载】利用window.performance.timing进行性能分析

    利用window.performance.timing进行性能分析   性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...

随机推荐

  1. Java线程的6种状态

    6种状态分别是: NEW.RUNNABLE.TERMINATED.WAITING.TIMED_WAITING.BLOCKED NEW:线程创建完毕 RUNNABLE:线程运行中,又分为READY + ...

  2. redis 未授权访问(写公钥、写计划任务)

    写公钥 ssh-keygen -t rsa # 生成key (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") & ...

  3. Spring中声明式事务存在的优缺点以及注意事项!

    事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 关于事务的基础知识,如什么是事务,数据库事务以及Spring事务的ACID.隔离级别. ...

  4. HUGO 创建属于自己的博客

    Hugo 拥有超快的速度,强大的内容管理和强大的模板语言,使其非常适合各种静态网站.可以轻松安装在macOS,Linux,Windows等平台上,在开发过程中使用LiveReload可即时渲染更改 一 ...

  5. [bug] redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused

    参考 https://www.geek-share.com/detail/2684728161.html

  6. CentOS7安装vncserver(启动失败及连接黑屏解决办法)

    CentOS7安装vncserver(启动失败及连接黑屏解决办法) 转载weixin_34167043 最后发布于2017-11-09 15:11:00 阅读数 42  收藏 展开 AutoSAR入门 ...

  7. 高通 QC协议 谷歌 PD协议

    高通  QC协议  谷歌  PD协议 上述协议是两款充电协议 现在已经应用于智能设备的充电中了 https://jingyan.baidu.com/article/7908e85cb04b1baf48 ...

  8. C/C++ 复习

    本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, ne ...

  9. 10.16-17 mailq&mail:显示邮件传输队列&发送邮件

    mailq命令 是mail queue(邮件队列)的缩写,它会显示待发送的邮件队列,显示的条目包括邮件队列ID.邮件大小.加入队列时间.邮件发送者和接受者.如果邮件进行最后一次尝试后还没有将邮件投递出 ...

  10. openssl自签发证书

    DOMAIN=www.example.com openssl genrsa -out ${DOMAIN}.key # 生成私有key openssl req -x509 -new -nodes -ke ...