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

  1. yum install xinetd -y

解压安装包

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

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

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

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

检查安装版本

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

卸载软件

  1. $ /opt/ibm/HPU/V5.1/uninstall/uninstall_hpu.sh
  2. 此脚本将卸载计算机上的 Optim High Performance Unload for DB2 for Linux, UNIX and Windows
  3. -------------------------------------------------------------------------------
  4. HPU 5.1.0.1 (Full)
  5. 完成 安装
  6. IBM Corp.
  7. http://www.ibm.com/software/data/db2imstools
  8. 安装目录: /opt/ibm/HPU/V5.1
  9. 这是要用于除去产品的目录。
  10. 输入 1 进行下一步,输入 2 取消:
  11. 1
  12. ...............................................................................................
  13. 卸载已完成,但存在警告。
  14. 请查看文件 /tmp/trace_warning_uninstall 以获取详细信息。

创建db2hpu的软链接

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

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

  1. cps = 5000 10
  2. instances = 5000
  3. per_source = 100

最终文件内容如下:

  1. $ cat /etc/xinetd.d/db2hpudm51
  2. #
  3. # @(#) db2hpudm51
  4. #
  5. service db2hpudm51
  6. {
  7. disable = no
  8. flags = REUSE
  9. socket_type = stream
  10. protocol = tcp
  11. wait = no
  12. user = root
  13. server = /opt/ibm/HPU/V5.1/bin/db2hpudm
  14. server_args = --tophpu /opt/ibm/HPU/V5.1 --loglevel 3 --inetd --logfile /var/log/hpu/db2hpudm51.log
  15. log_on_failure += USERID HOST
  16. log_on_success += USERID PID HOST DURATION
  17. cps = 5000 10
  18. instances = 5000
  19. per_source = 100
  20. }

重启xinetd服务

  1. $ systemctl restart xinetd

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

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

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

  1. $ cat /opt/ibm/HPU/V5.1/cfg/db2hpu.cfg
  2. # HPU default configuration
  3. bufsize=2097152
  4. db2dbdft=sample
  5. db2instance=db2inst1
  6. doubledelim=binary
  7. netservice=db2hpudm51
  8. allow_unlimited_memory=yes
  9. keepalive_time=10
  10. maxthreads=8
  11. maxselects=10
  12. mig_pipe_timeout=60
  13. min_extent_per_thread=4
  14. use_stats=true
  15. nbcpu=8
  16. umask=022

新建HPU凭证

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

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

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

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

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

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

  1. cat > sample.ctl << EOF
  2. GLOBAL CONNECT TO SAMPLE;
  3. unload tablespace USERSPACE1
  4. SELECT * FROM db2inst1.staff WHERE job ='Sales';
  5. OUTPUT("/home/db2inst1/export/staff_sales.del" REPLACE)
  6. FORMAT DEL;
  7. unload tablespace USERSPACE1
  8. SELECT * FROM db2inst1.staff WHERE job ='Mgr';
  9. OUTPUT("/home/db2inst1/export/staff_mgr.del" REPLACE)
  10. FORMAT DEL;
  11. unload tablespace USERSPACE1
  12. SELECT * FROM db2inst1.EMP_PHOTO;
  13. OUTPUT("/home/db2inst1/export/EMP_PHOTO" REPLACE)
  14. LOB IN ("/home/db2inst1/export/lobs")
  15. LOBFILE("EMP_PHOTO")
  16. FORMAT DEL;
  17. EOF

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

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

导出结果:

  1. [db2inst1@host-170-130-106-206] [~/export]
  2. $ ls -lrt
  3. 总用量 16
  4. -rw-r--r-- 1 db2inst1 dbgrp 537 6 8 15:09 sample.ctl
  5. -rw-r--r-- 1 db2inst1 dbgrp 554 6 8 15:09 staff_sales.del
  6. -rw-r--r-- 1 db2inst1 dbgrp 402 6 8 15:09 staff_mgr.del
  7. drwxr-xr-x 2 db2inst1 dbgrp 230 6 8 15:09 lobs
  8. -rw-r--r-- 1 db2inst1 dbgrp 532 6 8 15:09 EMP_PHOTO
  9. [db2inst1@host-170-130-106-206] [~/export]
  10. $ ls -l lobs/
  11. 总用量 392
  12. -rw-r--r-- 1 db2inst1 dbgrp 43690 6 8 15:09 EMP_PHOTO.e00001.000
  13. -rw-r--r-- 1 db2inst1 dbgrp 29540 6 8 15:09 EMP_PHOTO.e00002.000
  14. -rw-r--r-- 1 db2inst1 dbgrp 71798 6 8 15:09 EMP_PHOTO.e00003.000
  15. -rw-r--r-- 1 db2inst1 dbgrp 29143 6 8 15:09 EMP_PHOTO.e00004.000
  16. -rw-r--r-- 1 db2inst1 dbgrp 73438 6 8 15:09 EMP_PHOTO.e00005.000
  17. -rw-r--r-- 1 db2inst1 dbgrp 39795 6 8 15:09 EMP_PHOTO.e00006.000
  18. -rw-r--r-- 1 db2inst1 dbgrp 63542 6 8 15:09 EMP_PHOTO.e00007.000
  19. -rw-r--r-- 1 db2inst1 dbgrp 36088 6 8 15:09 EMP_PHOTO.e00008.000
  20. [db2inst1@host-170-130-106-206] [~/export]
  21. $ cat EMP_PHOTO
  22. "000130","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00001.000"
  23. "000130","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00002.000"
  24. "000140","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00003.000"
  25. "000140","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00004.000"
  26. "000150","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00005.000"
  27. "000150","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00006.000"
  28. "000190","bitmap","/home/db2inst1/export/lobs/EMP_PHOTO.e00007.000"
  29. "000190","gif","/home/db2inst1/export/lobs/EMP_PHOTO.e00008.000"

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

  1. $ db2 backup db sample online to /home/db2inst1/export
  2. Backup successful. The timestamp for this backup image is : 20210608152001
  3. cat > sample01.ctl << EOF
  4. GLOBAL CONNECT TO SAMPLE ;
  5. UNLOAD TABLESPACE USERSPACE1
  6. USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
  7. SELECT * FROM db2inst1.EMPLOYEE;
  8. OUTPUT ("/home/db2inst1/export/emp.del" REPLACE)
  9. FORMAT DEL
  10. ;
  11. EOF
  12. $ db2hpu -f sample01.ctl
  13. INZI466W 配置参数“use_stats”的值无效:将使用 NO
  14. INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  15. INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
  16. ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
  17. 000001 GLOBAL CONNECT TO SAMPLE ;
  18. 000002 UNLOAD TABLESPACE USERSPACE1
  19. 000003 USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" ;
  20. 000004 SELECT * FROM db2inst1.EMPLOYEE;
  21. 000005 OUTPUT ("/home/db2inst1/export/emp.del" REPLACE)
  22. 000006 FORMAT DEL
  23. 000007 ;
  24. INZU462I HPU 控制步骤开始: 15:22:39.126
  25. INZU420W DB2 YES 与从备份卸装不兼容,已转换成 DB2 NO
  26. INZU520W 为分区 0 指定的备份映像是“联机”备份映像
  27. INZU463I HPU 控制步骤结束: 15:22:39.211
  28. INZU464I HPU 运行步骤开始: 15:22:39.212
  29. INZU557I 卸装中涉及分区 0 备份图像(获取于 20210608152001)(类型 FULL ONLINE DATABASE,设备 DISK)。
  30. INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp.del 中)。
  31. INZU465I HPU 运行步骤结束: 15:22:39.514
  32. INZI441I HPU 成功结束:实时 -> 0m0.388620s
  33. 用户时间 -> 0m0.023377s:父代 -> 0m0.023377s,子代 -> 0m0.000000s
  34. 系统时间 -> 0m0.320603s:父代 -> 0m0.320603s,子代 -> 0m0.000000s

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

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

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

  1. $ ls -rlt /opt/ibm/HPU/V5.1/install/function
  2. 总用量 132
  3. -rwxr-xr-x 1 root root 124581 8 17 2014 db2hpuproc.so --动态库文件
  4. -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>

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

查看存储过程

  1. $ 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'"
  2. ROUTINESCHEMA ROUTINENAME ROUTINETYPE VALID CREATE_TIME ALTER_TIME
  3. --------------- --------------- ----------- ----- -------------------------- --------------------------
  4. DB2INST1 DB2HPU P 2021-06-08-15.31.01.417755 2021-06-08-15.31.01.417755
  5. 1 record(s) selected.
  1. --语法
  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请求

  1. $ db2 connect to sample
  2. Database Connection Information
  3. Database server = DB2/LINUXX8664 10.1.3
  4. SQL authorization ID = DB2INST1
  5. Local database alias = SAMPLE
  6. --触发一个HPU unload请求
  7. $ 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;', ?, ?)"
  8. Value of output parameters
  9. --------------------------
  10. Parameter Name : STDERR
  11. Parameter Value : INZI466W 配置参数“use_stats”的值无效:将使用 NO
  12. INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  13. INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
  14. ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
  15. 000001 unload tablespace db2 no select * from employee; format del;
  16. INZU462I HPU 控制步骤开始: 15:46:23.531
  17. INZU463I HPU 控制步骤结束: 15:46:23.544
  18. INZU464I HPU 运行步骤开始: 15:46:23.550
  19. INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp.out 中)。
  20. INZU465I HPU 运行步骤结束: 15:46:23.756
  21. INZI441I HPU 成功结束:实时 -> 0m0.225495s
  22. 用户时间 -> 0m0.039064s:父代 -> 0m0.039064s,子代 -> 0m0.000000s
  23. 系统时间 -> 0m0.084047s:父代 -> 0m0.062503s,子代 -> 0m0.021544s
  24. Parameter Name : RC
  25. Parameter Value : 0
  26. Return Status = 0

触发一个select 请求

  1. $ db2 "call db2hpu('/opt/ibm/HPU/V5.1', '-i db2inst1 -d sample -o /home/db2inst1/export/emp1.out -select', 'select * from employee', ?, ?)"
  2. Value of output parameters
  3. --------------------------
  4. Parameter Name : STDERR
  5. Parameter Value : INZI466W 配置参数“use_stats”的值无效:将使用 NO
  6. INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  7. INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
  8. ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
  9. 000001 select * from employee
  10. INZU462I HPU 控制步骤开始: 16:43:45.431
  11. INZU463I HPU 控制步骤结束: 16:43:45.580
  12. INZU464I HPU 运行步骤开始: 16:43:45.581
  13. INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/emp1.out 中)。
  14. INZU465I HPU 运行步骤结束: 16:43:45.888
  15. INZI441I HPU 成功结束:实时 -> 0m0.457295s
  16. 用户时间 -> 0m0.038746s:父代 -> 0m0.035555s,子代 -> 0m0.003191s
  17. 系统时间 -> 0m0.093540s:父代 -> 0m0.061630s,子代 -> 0m0.031910s
  18. Parameter Name : RC
  19. Parameter Value : 0
  20. Return Status = 0

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

表级别

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

库级别

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

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

使用HPU迁移的前提条件

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

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

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

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

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

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

  1. $ cat > ddl.ctl << EOF
  2. GLOBAL CONNECT TO SAMPLE ;
  3. UNLOAD TABLESPACE
  4. USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
  5. SELECT * FROM db2inst1.EMPLOYEE;
  6. OUTPUT ("/home/db2inst1/export/EMPLOYEE.del" REPLACE)
  7. DDLFILE("/home/db2inst1/export/EMPLOYEE.ddl")
  8. ;
  9. EOF
  10. $ db2hpu -f ddl.ctl
  11. INZI466W 配置参数“use_stats”的值无效:将使用 NO
  12. INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  13. INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
  14. ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
  15. 000001 GLOBAL CONNECT TO SAMPLE ;
  16. 000002
  17. 000003 UNLOAD TABLESPACE
  18. 000004 USING BACKUP DATABASE SAMPLE FROM "/home/db2inst1/export/" TAKEN AT 20210608152001;
  19. 000005 SELECT * FROM db2inst1.EMPLOYEE;
  20. 000006 OUTPUT ("/home/db2inst1/export/EMPLOYEE.del" REPLACE)
  21. 000007 DDLFILE("/home/db2inst1/export/EMPLOYEE.ddl")
  22. 000008 ;
  23. INZU462I HPU 控制步骤开始: 18:20:11.777
  24. INZU420W DB2 YES 与从备份卸装不兼容,已转换成 DB2 NO
  25. INZU520W 为分区 0 指定的备份映像是“联机”备份映像
  26. INZU463I HPU 控制步骤结束: 18:20:11.822
  27. INZU464I HPU 运行步骤开始: 18:20:11.822
  28. INZU557I 卸装中涉及分区 0 备份图像(获取于 20210608152001)(类型 FULL ONLINE DATABASE,设备 DISK)。
  29. INZU410I HPU 实用程序已经卸装 42 行(在 host-170-130-106-206 主机上,针对 DB2INST1.EMPLOYEE,在 /home/db2inst1/export/EMPLOYEE.del 中)。
  30. INZU622I HPU 实用程序已经生成 DDL 文件 /home/db2inst1/export/EMPLOYEE.ddl
  31. INZU465I HPU 运行步骤结束: 18:20:12.081
  32. INZI441I HPU 成功结束:实时 -> 0m0.304557s
  33. 用户时间 -> 0m0.028983s:父代 -> 0m0.028983s,子代 -> 0m0.000000s
  34. 系统时间 -> 0m0.264076s:父代 -> 0m0.264076s,子代 -> 0m0.000000s
  35. $ cat EMPLOYEE.ddl
  36. CREATE TABLE "DB2INST1"."EMPLOYEE" (
  37. "EMPNO" CHAR(6) NOT NULL ,
  38. "FIRSTNME" VARCHAR(12) NOT NULL ,
  39. "MIDINIT" CHAR(1) ,
  40. "LASTNAME" VARCHAR(15) NOT NULL ,
  41. "WORKDEPT" CHAR(3) ,
  42. "PHONENO" CHAR(4) ,
  43. "HIREDATE" DATE ,
  44. "JOB" CHAR(8) ,
  45. "EDLEVEL" SMALLINT NOT NULL ,
  46. "SEX" CHAR(1) ,
  47. "BIRTHDATE" DATE ,
  48. "SALARY" DECIMAL(9,2) ,
  49. "BONUS" DECIMAL(9,2) ,
  50. "COMM" DECIMAL(9,2) )
  51. ;
  52. --在目标数据库中创建表
  53. $ db2 connect to target
  54. [db2inst1@host-170-130-106-214] [~]
  55. $ db2 "CREATE TABLE "DB2INST1"."EMPLOYEE_T" (
  56. > "EMPNO" CHAR(6) NOT NULL ,
  57. > "FIRSTNME" VARCHAR(12) NOT NULL ,
  58. > "MIDINIT" CHAR(1) ,
  59. > "LASTNAME" VARCHAR(15) NOT NULL ,
  60. > "WORKDEPT" CHAR(3) ,
  61. > "PHONENO" CHAR(4) ,
  62. > "HIREDATE" DATE ,
  63. > "JOB" CHAR(8) ,
  64. > "EDLEVEL" SMALLINT NOT NULL ,
  65. > "SEX" CHAR(1) ,
  66. > "BIRTHDATE" DATE ,
  67. > "SALARY" DECIMAL(9,2) ,
  68. > "BONUS" DECIMAL(9,2) ,
  69. > "COMM" DECIMAL(9,2) )"
  70. DB20000I The SQL command completed successfully.
  71. $ db2 list tables;
  72. Table/View Schema Type Creation time
  73. ------------------------------- --------------- ----- --------------------------
  74. EMPLOYEE_T DB2INST1 T 2021-06-08-18.10.34.696381

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

  1. cat > migrate.ctl << EOF
  2. GLOBAL CONNECT TO SAMPLE
  3. UMASK "022"
  4. ;
  5. MIGRATE TABLESPACE
  6. SELECT * FROM db2inst1.EMPLOYEE;
  7. TARGET ENVIRONMENT(INSTANCE "db2inst1" on "170.130.106.214" IN target)
  8. WORKING IN ("/home/db2inst1/export")
  9. FORMAT MIGRATION into db2inst1.EMPLOYEE_T
  10. ;
  11. EOF
  1. $ db2hpu -f migrate.ctl
  2. INZI466W 配置参数“use_stats”的值无效:将使用 NO
  3. INZM031I Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  4. INZI473I 内存限制:虚拟内存为 'unlimited' 且数据段为 'unlimited'
  5. ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----10---+----11---+----12---+----13-
  6. 000001 GLOBAL CONNECT TO SAMPLE
  7. 000002 UMASK "022"
  8. 000003 ;
  9. 000004
  10. 000005 MIGRATE TABLESPACE
  11. 000006 SELECT * FROM db2inst1.EMPLOYEE;
  12. 000007 TARGET ENVIRONMENT(INSTANCE "db2inst1" on "170.130.106.214" IN target)
  13. 000008 WORKING IN ("/home/db2inst1/export")
  14. 000009 FORMAT MIGRATION into db2inst1.EMPLOYEE_T
  15. 000010 ;
  16. INZU462I HPU 控制步骤开始: 18:26:31.474
  17. INZU463I HPU 控制步骤结束: 18:26:31.650
  18. INZU464I HPU 运行步骤开始: 18:26:31.660
  19. INZU398I 没有卸装要在 host-170-130-106-206 上完成
  20. INZU543I HPU 实用程序将在 host-170-130-106-214 主机上执行装入操作。
  21. INZM031I [host-170-130-106-214] Optim High Performance Unload for DB2 for Linux, UNIX and Windows 05.01.00.001(140816) 64 20210608 (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)
  22. INZM054I [host-170-130-106-214] HPU 实用程序将使用 umask 022
  23. 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
  24. INZU465I HPU 运行步骤结束: 18:26:33.273
  25. INZI441I HPU 成功结束:实时 -> 0m1.799026s
  26. 用户时间 -> 0m0.119623s:父代 -> 0m0.115451s,子代 -> 0m0.004172s
  27. 系统时间 -> 0m0.052782s:父代 -> 0m0.048610s,子代 -> 0m0.004172s

检查目标环境数据

  1. $ db2 connect to target
  2. Database Connection Information
  3. Database server = DB2/LINUXX8664 10.1.3
  4. SQL authorization ID = DB2INST1
  5. Local database alias = TARGET
  6. $ db2 "select count(*) from employee_t"
  7. 1
  8. -----------
  9. 42
  10. 1 record(s) selected.

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

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

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

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

版权声明:本文为henvril原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/henvril/p/14915785.html