某行XX系統DB2資料庫遷移實施方案
一 環境說明
原庫:
DB2:DB2 9.7.11
OS:Redhat 7.4
目標庫:
DB2:DB2 9.7.11
OS:Redhat76
資料量大小: 16.7TB
二 遷移方案的選擇
1 磁碟快照遷移
伺服器沒有 HBA 卡,不支援。
2 冷備份加恢復
停機時間較長。
3 熱備份加恢復
停機視窗較短,本次遷移採用這種方式。
4 HADR
配置較複雜,並且遷移期間歸檔生成量很少,不需要自動追歸檔。
三 遷移前準備
1 申請新資料庫儲存資源 (40TB)
2 申請 NAS 儲存資源 (40TB)
用於儲存備份資料。
3 溝通停機視窗
四 遷移
1 安裝目標 DB2 資料庫例項
(1) 建立需要的目錄
mkdir /ibmdb2 mkdir -p /db2inst mkdir -p /db2data mkdir -p /db2temp mkdir -p /db2log mkdir -p /db2logmir mkdir -p /db2arch
(2)建立對應的 LV
lvcreate -L 10G -n lvibmdb2 vg_srv lvcreate -L 20G -n lvdb2inst1 vg_srv lvcreate -L 200G -n lvdb2inst1data vg_srv lvcreate -L 10G -n lvdb2inst1temp vg_srv lvcreate -L 5G -n lvdb2inst1log vg_srv lvcreate -L 5G -n lvdb2inst1mir vg_srv lvcreate -L 20G -n lvdb2inst1arch vg_srv
(3)格式化
mkfs.ext4 /dev/mapper/vg_srv-lvibmdb2 mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1 mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1data mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1temp mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1log mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1mir mkfs.ext4 /dev/mapper/vg_srv-lvdb2inst1arch
(4)新增自動掛載
vi /etc/fstab /dev/mapper/vg_srv-lvibmdb2 /ibmdb2 ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1 /db2inst ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1data /db2data ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1temp /db2temp ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1log /db2log ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1mir /db2logmir ext4 defaults 0 0 /dev/mapper/vg_srv-lvdb2inst1arch /db2arch ext4 defaults 0 0
(5)手動掛載
mount -a
(6) 配置 YUM ,並安裝所需安裝包
yum -y install libstdc* libaio* gcc* kernel-devel sg3_utils* pam-devel* yum -y install gcc automake autoconf libtool make openssh-clients iscsi-initiator-utils libnes libmthca libipathverbs libcxgb3 libibcm libaio ibsim ibutils rdma pam dapl* compat-libstdc++* perl-Config-General scsi-target-utils librdmacm-devel* yum -y install libstdc++* glibc* gcc* ntp* sg3* binutils* openssh* cpp* ksh*
(7)建立使用者和組
groupadd -g 401 db2grp groupadd -g 402 db2fgrp groupadd -g 403 db2mgrp useradd -u 401 -g db2grp -d /db2inst/db2inst1 -s /bin/bash db2inst1 echo "db2inst1:dbxxx" | /usr/sbin/chpasswd useradd -u 402 -g db2fgrp -m -d /home/db2fenc1 -s /bin/bash db2fenc1 echo "db2fenc1:dbxxx" | /usr/sbin/chpasswd useradd -u 404 -g db2mgrp -s /bin/bash db2mon echo "db2mon:dbxxx" | /usr/sbin/chpasswd
(8)建立目錄並授權
mkdir -p /ibmdb2/V9.7 mkdir -p /db2inst/db2inst1 mkdir -p /db2data/db2inst1 mkdir -p /db2his/db2inst1 mkdir -p /db2temp/db2inst1 mkdir -p /db2log/db2inst1 mkdir -p /db2logmir/db2inst1 mkdir -p /db2arch/db2inst1 chown -R db2inst1:db2grp /db2inst chown -R db2inst1:db2grp /db2data chown -R db2inst1:db2grp /db2temp chown -R db2inst1:db2grp /db2log chown -R db2inst1:db2grp /db2logmir chown -R db2inst1:db2grp /db2arch chown db2inst1:db2grp /db2inst/db2inst1 /db2data/db2inst1 /db2data/db2inst1 /db2temp/db2inst1 /db2temp/db2inst1 /db2log/db2inst1 /db2log/db2inst1 /db2logmir/db2inst1 /db2logmir/db2inst1 /db2arch/db2inst1 /db2arch/db2inst1
(9)配置環境變數
su - root vi ~/.bash_profile # DB2 10.5 Environment set -o vi export DB2DIR=/ibmdb2/V9.7 su - db2inst1 vi .bash_profile export PATH=$PATH:/sbin:/usr/sbin
(10)配置核心引數和資源限制
vi /etc/security/limits.conf db2inst1 soft core unlimited db2inst1 hard core unlimited db2inst1 soft memlock unlimited db2inst1 hard memlock unlimited db2inst1 soft rss unlimited db2inst1 hard rss unlimited db2inst1 soft nofile unlimited db2inst1 hard nofile 1048576 db2inst1 soft stack unlimited db2inst1 hard stack unlimited vi /etc/sysctl.conf # DB2 9.7 Cconfiguration Parameter kernel.shmmni = 32768 kernel.shmmax = 103079215104 kernel.shmall = 50331648 kernel.sem = 250 2048000 32 24576 kernel.msgmni = 98304 kernel.msgmax = 65536 kernel.msgmnb = 65536 vm.swappiness = 0 vm.overcommit_memory = 0 sysctl -p
(11)開始安裝
解壓 cd /opt tar -xvzf v9.7fp11_linuxx64_server.tar.gz 檢查 ./db2prereqcheck 開始安裝 ./db2_install -b $DB2DIR -l /tmp/db2install.log
(12) 建立資料庫例項(db2 instance )
useradd db2inst1 passwd db2inst1 useradd db2fenc passwd db2fenc cd /ibmdb2/V9.7/instance ./db2icrt -s ese -u db2fenc db2inst1
(13) 啟動例項(db2 instance )
設定註冊變數和例項引數 su - db2inst1 db2set db2codepage=1386 db2set db2comm=tcpip db2set db2country=cn db2set db2_parallel_io=* db2set db2_use_alternate_page_cleaning=on db2 update dbm cfg using svcename 50000 db2start
2 梳理遷移方案
將遷移方案梳理出具體命令。
3 禁用 nolog 方式載入資料
由於本次遷移是採用熱備加追歸檔的方式,任何不記錄日誌的操作都可能有丟失資料的風險,比如nolog方式載入資料、load方式載入資料等,所以在遷移正式開始前,需要先禁用nolog操作。 db2 update db cfg using blocknonlogged yes
4 開啟歸檔
資料庫熱備份需要資料庫啟動歸檔模式。 db2 update db cfg using logarchmeth1 disk:/share/bak
5 重啟資料庫
歸檔模式需要重啟資料庫生效。 db2 terminate db2 deactivate db cjcdb db2 force application all db2stop db2start
6 解除 backup pending
啟動歸檔模式,重啟資料庫後資料庫處於backup pending模式,無法進行連線和讀寫操作,必須進行一次資料庫全備,才能解除backup pending狀態。 由於之前一直使用oracle資料庫,很少使用DB2,特別不理解為什麼啟動歸檔模式必須要進行一次全備,難道就是因為安全級別高嗎。 備份但是無所謂,關鍵只能進行離線備份,因為歸檔模式還沒生效,更致命的是全庫比較大,有16.7TB。 為了使得資料庫儘快可用,減少停機時間,本次備份的目的只是為了讓歸檔模式儘快生效,減少停機時間。 所以備份採用如下幾種方式,提供備份速度。 (1)將備份檔案備份到/dev/null下,不實際落地檔案,備份速度完全取決於讀取速度,沒有寫的速度。 (2)啟動3個並行,同時寫入3個檔案。 命令如下: nohup db2 "backup db cjcdb to /dev/null,/dev/null,/dev/null" & 20210605 18:00-20210606 01:30耗時7.5小時,備份總大小16.7TB,速度647M/s
7 線上備份
成功啟動歸檔後,資料庫可以正常對外提供服務,此時可以進行線上備份,用於資料遷移。 第一次進行備份時,命令如下: nohup db2 backup db cjcdb online to /db2data/db2back > xxx.log & 20210606 03:25-20210606 05:30 失敗,自動回滾,懷疑Nas上單個檔案不能超過4T。 調整命令進行第二次備份,備份出6個檔案,確保單個檔案不超過4T。 nohup db2 backup db cjcdb online to /db2data/db2back,/db2data/db2back,/db2data/db2back,/db2data/db2back,/db2data/db2back,/db2data/db2back > xxx.log & NFS單個檔案限制不能超過4T,需要指定6個備份目錄 第二次備份時間: 20210606 08:23-20210606 15:51 全備大小16.7TB,耗時也是7.5小時。速度647M/s
8 還原
資料庫還原理論上不需要停止原庫,因為當前還在停機視窗範圍內,為了減少原庫新資料的產生,又因為原庫和目標庫歸檔目錄在同一個NAS共享目錄下,為了確保資料安全性,在還原前先停止原庫。 (1)停庫前,先記錄原庫核心幾張表資料量,用於遷移後進行資料比對。 db2 connect to cjcdb user cjc using cjc Select count(*) from t1 Select count(*) from t2 (2)停原庫 db2 terminate db2 deactivate db cjcdb db2 force application all db2stop 原庫停庫時會將當前日誌重新整理到歸檔日誌 (3)備份歸檔目錄下歸檔檔案 (4)還原資料庫 nohup db2 restore db cjcdb on /db2data/cjcdb dbpath on /db2data/cjcdb > bak060616.log & 還原時間: 20210606 16:30-20210607 03:30 全備大小16.7TB,耗時11小時,速度442M/s
9 前滾
歸檔很少,所以全滾執行很快,5分鐘內完成。 第一次前滾 db2 rollforward db cjcdb to end of logs 最後一次前滾 db2 rollforward db cjcdb to end of logs and stop
五 最佳化
1 buffer pool 調大
由於新資料庫伺服器記憶體,CPU等資源比老庫伺服器資源高很多,需要調整對應的引數。 db2 alter bufferpool IBMDEFAULTBP immediate size 10485760 --4KB 40GB 原大小8.63GBdb2 alter bufferpool EASTRUN32K immediate size 524288 --32KB 16GB 原大小5.35GBdb2 alter bufferpool EASTBUF32K immediate size 524288 --32KB 16GB 原大小5.35GBdb2 alter bufferpool EAST1BUF32K immediate size 100000 --32KB 3GB 原大小9.17GBdb2 alter bufferpool EAST2BUF32K immediate size 1638400 --32KB 50GB 原大小24.22GBdb2 alter bufferpool EAST3BUF32K immediate size 100000 --32KB 3GB 原大小0.0588GBdb2 alter bufferpool EAST4BUF32K immediate size 100000 --32KB 3GB 原大小3.39GBdb2 alter bufferpool EAST5BUF32K immediate size 100000 --32KB 3GB 原大小13.89GBdb2 alter bufferpool EAST6BUF32K immediate size 100000 --32KB 3GB 原大小0.67GB
2 logbuffer 調大
db2 update db cfg using LOGBUFSZ 102400 ---4KB 400MB 原大小 1MB
3 日誌檔案調整
日誌大小 當前總大小20G,單個80M 調整為每個2G db2 update db cfg using LOGFILSIZ 524288db2 update db cfg using LOGPRIMARY 10db2 update db cfg using LOGSECOND 100 原大小配置如下: Log file size (4KB) (LOGFILSIZ) = 20480 524288 Number of primary log files (LOGPRIMARY) = 96 預分配 10Number of secondary log files (LOGSECOND) = 160 不是預分配 100 調整 db2 update db cfg using LOGBUFSZ 102400 db2 update db cfg using LOGFILSIZ 524288 db2 get db cfg | grep -i log db2 update db cfg using LOGPRIMARY 10 db2 update db cfg using LOGSECOND 100 db2 get db cfg | grep -i block db2 update db cfg using BLOCKNONLOGGED no db2 terminate db2 deactivate db cjcdb db2 force application all;db2 terminate db2 deactivate db cjcdb db2pd -dbptn db2stop db2start
4 nolog, load啟用引數
db2 update db cfg using BLOCKNONLOGGED no
5 關閉歸檔
db2 update db cfg using LOGARCHMETH1 off
重啟資料庫生效
6 收集統計資訊
檢視錶資料量資訊 db2 "select char(tabschema,15),char(tabname,60),card from syscat.tables where type='T' order by card desc fetch first 1600 rows only with ur" > tab_count0607.log 生成收集統計資訊的語句 db2 connect to cjcdb db2 "select 'runstats on table '||trim(tabschema)||'.'||trim(tabname)||' on all columns with distribution on all columns and detailed indexes all;' from syscat.tables where type='T' with ur" >1.sql 類似如下: connect to cjcdb; runstats on table cjc.T_AA_CJCB on all columns with distribution on all columns and detailed indexes all; runstats on table cjc.xxx on all columns with distribution on all columns and detailed indexes all; 執行指令碼 nohup db2 -tvf 1.sql > 1.log &
7 不記錄日誌
之前出現過單個大事務操作將日誌檔案佔滿,導致事務失敗,自動回退,建議大事務不記錄日誌。 大事務語句不記錄日誌 ---原SQL insert into cjc.cjc_t1 ((SELECT DISTINCT XX資訊.AAAas BBB,XX表.XM as XM,XX表.SFZH as SFZH,XX表.YXJGMC as YXJGMC,XX表.SSBM as SSBM,XX表.ZW as ZW,XX表.YGZT as YGZT,XX表.CJRQ as CJRQ FROM T_CJC_001 AS XX表 INNER JOIN T_AA_CJC AS XX資訊 ON XX表.SFZH = XX資訊.ZJHM )WITH UR) ---更改後的SQL(不記錄日誌) update command options using C off alter table cjc.cjc_t1 not logged initially insert into cjc.cjc_t1 ((SELECT DISTINCT XX資訊.AAAas BBB,XX表.XM as XM,XX表.SFZH as SFZH,XX表.YXJGMC as YXJGMC,XX表.SSBM as SSBM,XX表.ZW as ZW,XX表.YGZT as YGZT,XX表.CJRQ as CJRQ FROM T_CJC_001 AS XX表 INNER JOIN T_AA_CJC AS XX資訊 ON XX表.SFZH = XX資訊.ZJHM )WITH UR) commit update command options using C on
六 常用命令
1 連線資料庫
su - db2inst1
db2 => connect to cjcdb user cjc using cjc
2 檢視資料庫
db2 => list db directory
3 檢視告警日誌
tail -1000f /db2inst/db2inst1/sqllib/db2dump/db2diag.log
4 檢視備份和還原狀態
檢視備份狀態
db2pd -uti
或
db2top -d cjcdb
5 檢視磁碟速度
vmstat -w 1 10
6 檢視錶空間資訊
db2 list tablespaces
db2pd -db cjcdb -tablespace
7 檢視執行緒資訊
db2pd -edu
8 檢視配置資訊
db2 get db cfg
db2 get db cfg db cjcdb |grep -i pend
db2 get db cfg for cjcdb | grep -i archive
db2 get db cfg for cjcdb | grep -i log
9 檢視活動事務資訊
db2 get snapshot for database on cjcdb |grep -i oldest
10 檢視事務對應 SQL 資訊
db2 get snapshot for application agentid 10 24
11 中斷某個會話
db2 "force application(5 20 )"
12 檢視授權資訊
db2licm -l
13 檢視幫助資訊
db2 ? list |more
14 手動切換歸檔
db2 ARCHIVE LOG FOR DATABASE dbname
15 檢視錶資訊
list tables
檢視系統表
list tables for system
檢視錶結構
describe select * from dept
16 檢視錶索引資訊
db2 => describe indexes for table T_CJC_XXX select char(INDSCHEMA,20) SCHEMA,char(INDNAME,20) IDXNAME,char(OWNER,10) OWNER,char(TABSCHEMA,10) TABSCHEMA,char(TABNAME,20) TABNAME,INDEXTYPE,char(COLNAMES,20) COLNAMES FROM syscat.indexes where tabname='T_AA_CJC
17 檢視執行計劃
db2 => set current explain mode explain DB20000I The SQL command completed successfully. ---關閉 set current explain mode no db2 => explain plan for select count(*) from T_CJC_XXX t1 left join T_AA_CJC t2 on t1.AAA= t2.AAAand t2.cjrq = '20210331' where t1.cjrq = '20210331' DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0219N The required Explain table "cjc.EXPLAIN_INSTANCE" does not exist. SQLSTATE=42704 [root@SY-ODSHIS-Standby misc]# pwd /ibmdb2/V9.7/misc/EXPLAIN.DDL [db2inst1@SY-ODSHIS-Standby ~]$ db2 -tvf /ibmdb2/V9.7/misc/EXPLAIN.DDL ... DB20000I The SQL command completed successfully. db2 => set current explain mode explain DB20000I The SQL command completed successfully. db2 => explain plan for select count(*) from T_CJC_XXX t1 left join T_AA_CJC t2 on t1.AAA= t2.AAAand t2.cjrq = '20210331' where t1.cjrq = '20210331' DB20000I The SQL command completed successfully. db2exfmt -1 -d cjcdb -o exfmt0601.out'
18 load
db2 load from '/ XX / 001 .txt' of del modified by col1 = 222 111 insert into " cjc "." t_001 " > 1.log;
19 啟停資料庫
db2 terminate db2 deactivate db cjcdb db2 force application all db2stop db2start
20 收集統計資訊
runstats on table cjc.T_AA_CJC B on all columns with distribution on all columns and detailed indexes all;
#####chenjuchao 2021-06-12 22:35#####
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2776631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫遷移方案資料庫
- 資料庫平滑遷移方案與實踐分享資料庫
- 資料庫邏輯遷移方案資料庫
- 系統資料遷移
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- OGG資料庫遷移方案(一)資料庫
- OGG資料庫遷移方案(二)資料庫
- OGG資料庫遷移方案(三)資料庫
- OGG資料庫遷移方案(四)資料庫
- Oracle資料庫遷移方案比較Oracle資料庫
- db2匯出資料庫定義及遷移資料DB2資料庫
- Oracle使用資料泵 (expdp/impdp)實施遷移Oracle
- ORACLE資料庫切換和遷移方案Oracle資料庫
- Fastdfs資料遷移方案AST
- 【遷移】使用rman遷移資料庫資料庫
- RMAN COPY實現ORACLE資料庫儲存遷移的方案Oracle資料庫
- 資料庫遷移資料庫
- 資料庫遷移之資料泵實驗資料庫
- 使用RMAN遷移檔案系統資料庫到ASM資料庫ASM
- ORM實操之資料庫遷移ORM資料庫
- 資料遷移方案選擇
- 資料庫遷移 :理解資料庫
- laravel資料庫遷移Laravel資料庫
- Odoo遷移資料庫Odoo資料庫
- redis資料庫遷移Redis資料庫
- Cacti 遷移資料庫資料庫
- ORACLE資料庫遷移Oracle資料庫
- 遷移資料庫成功!資料庫
- 建立資料庫遷移資料庫
- SQL Server 資料庫最小當機遷移方案GESQLServer資料庫
- 用rman從檔案系統遷移資料庫到asm資料庫ASM
- 【DB2學習】遷移資料之EXPROTDB2
- 資料庫-oracle-資料庫遷移資料庫Oracle
- cassandra百億級資料庫遷移實踐資料庫