前置條件:
同機房主機:A、同機房備機:B、同城:C、異地:D
滾動更新的順序為:
1、停止D,先更新D機,随後啟動D執行個體加入到HADR中,并觀察狀态和日志是否追平;
2、停止C,并更新C機,随後啟動C執行個體加入到HADR中,并觀察狀态和日志是否追平;
3、停止B,并更新B機,,随後啟動B執行個體加入到HADR中,并觀察狀态和日志是否追平;
4、進行雙機切換,随後将資料庫從A切換至B,A與B自然斷開(因A版本比B機低);
5、停止A,并更新A機,随後啟動A執行個體加入到HADR中,并觀察狀态和日志是否追平;
6、進行雙機切換,将資料庫從B切換回A機即可完成所有更新。
1.備份資料庫
備份資料庫:使用NBU發起對資料庫全備:NBU server端發起全量備份,全量備份時間和更新時間差<1天
db2pd -util
db2 list utilities show detail
2.備份配置
mkdir -p /yunwei/Release/db/$(date +%Y%m%d)
db2 get dbm cfg > /yunwei/Release/db/$(date +%Y%m%d)/db2dbm.cfg
db2 get db cfg for <DBNAME> > /yunwei/Release/db/$(date +%Y%m%d)/<DBNAME>.cfg
db2set -all > /yunwei/Release/db/$(date +%Y%m%d)/db2set.cfg
db2look -d <DBNAME> -a -e -l -x -ct -o /yunwei/Release/db/$(date +%Y%m%d)/db2look.ddl
db2 connect to <DBNAME>
db2 LIST PACKAGES FOR ALL SHOW DETAIL > /yunwei/Release/db/$(date +%Y%m%d)/pckg.txt
····························B、C、D通用更新步驟··············································
3.檢視HADR LOG GAP
db2pd -db <dbname> -hadr
B機角色是standby ,與A狀态為peer,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
C機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
D機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
4.停止資料庫
B、C、D停止資料庫:
db2 force applications all
db2 terminate
db2 deactivate db <dbname>
db2stop force
5.禁止故障螢幕
禁止故障檢查器(Fault Monitor):
/opt/<ibm/IBM>/db2/V11.1/bin/db2fm -i <DB2 instance name> -D
如果無法停止Fault Monitor,需要執行以下指令:
/opt/<ibm/IBM>/db2/V11.1/bin/db2fmcu -d
驗證沒有db2的程序存在:
ps -ef | grep db2
驗證沒有db2的程序存在:
ps -ef |grep -i db2
如果仍然無法停止請
kill -9 <kill_id>
建議該步驟反複執行幾次看是否會自動重新開機
6.備份執行個體目錄
備份資料庫執行個體目錄:
cp -pr /home/<執行個體名>/sqllib /home/<執行個體名>/sqllib_bak
6.更新軟體
開始更新産品:
cd /tmp/db2_fix #以實際為準
export LANG=en_US
./installFixPack -b /opt/<ibm/IBM>/db2/V11.1
輸入:no
Do you want to choose a different installation directory for the fix pack? [yes/no]
------------------------------------------------------------------------------------
no
觀察指令執行結果,并觀察/tmp/installFixPack.log.xxxxx"的輸出結果。
7.更新執行個體
更新執行個體:
/opt/<ibm/IBM>/db2/V11.1/instance/db2iupdt -u <DB2 Fence user name> <DB2 instance user name>
觀察指令是否執行成功,并觀察/tmp/db2iupdt.log.xxxxx檔案輸出結果
8.啟動資料庫
db2start
db2 activate db <dbname>
9.驗證HADR狀态
db2pd -db <dbname> -hadr
B機角色是standby ,與A狀态為peer,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
C機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
D機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
10.檢視資料庫版本
db2level
版本資訊應為“DB2 v11.1.4.x”,檢查資料庫版本是否為期望的更新版本
檢查DB2的db2diag.log的日志,檢視是否有錯誤發生。
如出現錯誤,檢視/tmp目錄更新版本日志,可重複更新産品和執行個體
············································B、C、D機通用更新步驟:結束 ·································
11 檢視A、B機HADR狀态
db2pd -db <dbname> -hadr
B機角色是standby ,與A狀态為Peer。
db2pd -db <dbname> -hadr | grep -i HADR_LOG_GAP觀察HADR_LOG_GAP為0.
12.雙機軟體切換HADR
A切換到B
linux:
clusvcadm -r <資源組> -m <B機2号節點>
clustat 檢查狀态
ip addr 檢查服務ip
如果是pcs軟體:
pcs status 檢視節點名稱
pcs cluster standby <A節點名稱>
檢查服務IP是否漂移至B:pcs status
如果雙機軟體切換失敗:
檢查HADR及HA雙機狀态
su - appmon
db2pd -d <dbname> -hadr
#B機應為primary ,B機與A機的狀态為disconnected,因為B機版本比A機高,HADR要求備機可以比主機版本高,但反之不行。
#如果雙機腳本中無法将資料庫切換至B機,則需要手工切換:
su - <DB2 instance user>
db2 takeover hadr on db <dbname>
13.停止A機
停止資料庫:
檢查HADR狀态:
A機角色是standby ,與B狀态為Peer,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
db2 force application all
db2 terminate
db2 deactivate db <dbname>
db2stop force
14.停止A機故障螢幕
禁止故障檢查器(Fault Monitor):
/opt/<ibm/IBM>/db2/V11.1/bin/db2fm -i <DB2 instance name> -D
如果無法停止Fault Monitor,需要執行以下指令:
/opt/<ibm/IBM>/db2/V11.1/bin/db2fmcu -d
驗證沒有db2的程序存在:
ps -ef | grep db2
驗證沒有db2的程序存在:
ps -ef |grep -i db2
如果仍然無法停止請
kill -9 <kill_id>
建議該步驟反複執行幾次看是否會自動重新開機
15.備份A機執行個體目錄
備份資料庫執行個體目錄:
cp -pr /home/<執行個體名>/sqllib /home/<執行個體名>/sqllib_bak
16.更新A機軟體
開始更新産品:
cd /tmp/db2_fix #以實際為準
export LANG=en_US
./installFixPack -b /opt/<ibm/IBM>/db2/V11.1
輸入:no
Do you want to choose a different installation directory for the fix pack? [yes/no]
------------------------------------------------------------------------------------
no
觀察指令執行結果,并觀察/tmp/installFixPack.log.xxxxx"的輸出結果。
17.更新A機執行個體
更新執行個體:
/opt/<ibm/IBM>/db2/V11.1/instance/db2iupdt -u <DB2 Fence user name> <DB2 instance user name>
觀察指令是否執行成功
18.檢視版本
驗證:
db2level
版本資訊應為“DB2 v11.1.4.x”,檢查資料庫版本是否為期望的更新版本
檢查DB2的db2diag.log的日志,檢視是否有錯誤發生。
如出現錯誤,檢視/tmp目錄更新版本日志,可重複更新産品和執行個體
19.檢視LOG GAP
db2pd -db <dbname> -hadr
A機角色是standby ,狀态為Peer,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
db2pd -db <dbname> -hadr | grep -i HADR_LOG_GAP觀察HADR_LOG_GAP為0.
20 檢視HADR狀态
db2pd -db <dbname> -hadr
B機角色是standby ,與A狀态為peer,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
C機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
D機角色是standby ,與A狀态為REMOTE_CATCHUP,要求PRIMARY_LOG_FILE = STANDBY_LOG_FILE
21.将主機由B機切換至A機
B切換到A
linux:
clusvcadm -r <資源組> -m <A機1号節點>
clustat 檢查狀态
ip addr 檢查服務ip
如果是pcs軟體:
pcs status檢視節點名稱
pcs cluster unstandby [A節點名稱]
pcs cluster standby [B節點名稱]
pcs cluster unstandby [B節點名稱]
檢查HADR及HA雙機狀态
su - appmon
db2pd -d <dbname> -hadr
#A機應為Primary ,到B狀态為Peer,到C狀态為REMOTE_CATCHUP,到D狀态為REMOTE_CATCHUP,并要求所有節點的PRIMARY_LOG_FILE = STANDBY_LOG_FILE
#如果雙機腳本中無法将資料庫切換至B機,則需要手工切換:
su - <DB2 instance user>
db2 takeover hadr on db <dbname>
22.更新A機資料庫
#如果以上步驟中HADR狀态不對,不能執行以下操作
檢查HADR狀态
db2pd -d <dbname> -hadr
#A機應為primary ,狀态為connected。
db2updv111 -d <dbname>
23.啟動螢幕
注冊Fault Monitor:( root 使用者 )
/opt/ibm/db2/V11.1/bin/db2fmcu -u -p /opt/ibm/db2/V11.1/bin/db2fmcd
開啟Fault Monitor:( 執行個體使用者 )
su - <DB2 instance name>
/opt/ibm/db2/V11.1/bin/db2fm -i db2inst1 -U
···················以下兩步需停止應用,避免資料庫産生鎖···············
24.綁包
資料庫中重新綁定程式包:
1.重新綁定資料庫SCHEMA.BND/UBIND.LST/CLI.LST
db2 force application all
db2 terminate
db2 connect to <dbname>
db2 bind /home/<DB2INSTANCE>/sqllib/bnd/db2schema.bnd blocking all grant public SQLERROR continue
db2 bind /home/<DB2INSTANCE>/sqllib/bnd/@db2ubind.lst blocking all grant public action add
db2 bind /home/<DB2INSTANCE>/sqllib/bnd/@db2cli.lst blocking all grant public action add
db2 terminate
2.在資料庫中通過運作 db2rbind 指令來重新綁定所有無效程式包:
db2rbind <dbname> -l /tmp/logfile all
db2 connect to <dbname>
db2 "select pkgschema,pkgname from syscat.packages where valid='X'"
#如果以上指令有結果輸出,再執行以下步驟:
db2 -x "select 'rebind package ' || trim(pkgschema) || '.' || trim(pkgname) || ';' from syscat.packages where valid='X'" > /yunwei/Release/db/$(date +%Y%m%d)/rebind.sql
db2 -tvf /yunwei/Release/db/$(date +%Y%m%d)/rebind.sql | tee /yunwei/Release/db/$(date +%Y%m%d)/rebind.out
db2 "select pkgschema,pkgname from syscat.packages where valid='X'"
#如果rbind package時報SQL2453。則執行:
db2 "call sysproc.admin_revalidate_db_objects(null,null,null)"
db2 "select pkgschema,pkgname from syscat.packages where valid='X'"
#檢查是否還有invalid 或inoperative package。
25.檢視表空間
db2 connect to <dbname>
db2 list tablespaces show detail | grep -i state #必須全部是:0x00000000
26.檢視表
檢查:
db2 connect to <dbname>
db2 "select * from <tablename> fetch first 10 row only"
27.更換應用驅動
将db2最新版本以後為保證應用驅動程式保持在同一版本需要進行替換驅動包,操作主要步驟:
1、備份應用中調用的原驅動包;
2、将/home/<instance>/sqllib/java/ 下的db2java.zip、db2jcc.jar、db2jcc_license_cu.jar、db2jcc4.jar替換應用原使用的驅動包。
3、登入WAS控制台-》資源-》JDBC-》資料源-》選擇相應的資料源-》“點選測試連接配接
預設不替換驅動的原因:
1、多個資料源共用一套驅動程式,一經更新将影響所有應用程式連接配接資料庫
提示:如果程式本身沒有使用WAS資料源,請進行應用驗證