一、简介

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. layui图片上传

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>up ...

  2. 如何使用mongo shell

    Cd到MongoDb安装目录到bin目录下,执行mongo命令即可,其他命令参考手册:https://www.runoob.com/mongodb/mongodb-create-collection. ...

  3. Pytest自动化测试-简易入门教程(01)

    我们今天主讲的内容,就是测试框架Pytest,讲到这个测试框架对于没有做过Web自动化的伙伴来说,会觉得这个东西是陌生的,那么到底什么是框架呢?什么又是自动化呢?自动化为什么又要用框架呢? 难道我学自 ...

  4. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  5. Windows系统下consul的安装、启动、配置

    阅读时长:3分钟 操作系统:Windows10 一.consul的安装 首先在consul.exe文件目录下的地址栏中输入cmd. 接着输入consul指令,敲击回车安装consul. 安装成功后会有 ...

  6. Nacos服务发现

    基础配置初始化 NacosDiscoveryClientConfiguration NacosDiscoveryProperties 初始化Nacos基础配置信息的bean,主要指yaml中配置Nac ...

  7. [bug] flink on yarn 启动失败

    参考 https://www.cnblogs.com/huangguoming/p/11732663.html

  8. 攻防世界(六)supersqli

    攻防世界系列:supersqli 方法一: 用逗号包裹回显正常,说明存在注入 1';--+(注释符也可用 -- 或 # 发现均未被过滤!) 有order by 语句可知表由2个字段,使用联合查询 (想 ...

  9. "sar"工具 利用率

    LTP--linux稳定性测试 linux性能测试 ltp压力测试   余二五 2017-11-14 16:20:00 浏览1172 linux 日志 配置 内存管理 测试 脚本 性能测试 压力测试 ...

  10. python基础之python牛逼的设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责. 2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE] ...