Optim High Performance Unload [HPU]
一、簡介
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.
//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.
//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. 控制文件語法參考
//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.
Theparameter 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」類型的憑證。
...