1.更新前準備
1.1 備份資料庫
備份資料庫:
使用NBU發起對資料庫全備:NBU server端發起全量備份,全量備份時間和更新時間差<1天
db2pd -util
db2 list utilities show detail
1.2 注釋定時任務
1.3 停止集中監控
1.4 停止集中備份
1.5 停止自動化運維
1.6 停止應用
1.7 備份配置
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
2.更新
—————————————————-停止應用————————————————————————
2.1檢視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
2.2如有雙機先停雙機
兩台機器分别執行:service rgmanager stop
兩台機器分别執行:service cman stop
如果是pcs軟體,在A機執行指令:
pcs cluster stop --all 關閉pcs雙節點
pcs status 檢視是否關閉
2.3停止B、C、D資料庫
db2 deactivate db <dbname>
db2stop force
檢查DB2程序是否存在
ps -ef | grep -i db2
2.4停止A資料庫
db2 force application all
db2 terminate
db2 deactivate db <dbname>
db2stop force
檢查DB2程序是否存在
ps -ef | grep -i db2
2.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 -i db2
如果仍然無法停止請
kill -9 <kill_id>
建議該步驟反複執行幾次看是否會自動重新開機
驗證沒有db2的程序存在:
ps -ef | grep db2
2.6備份資料庫執行個體目錄:
cp -pr /home/<執行個體名>/sqllib /home/<執行個體名>/sqllib_bak
2.7開始更新産品
cd /tmp/db2_fix #以實際目錄為準
export LANG=en_US
./installFixPack -b /opt/<ibm/IBM>/db2/V11.1
Do you want to choose a different installation directory for the fix pack? [yes/no]
------------------------------------------------------------------------------------
no
2.8 更新執行個體
/opt/<ibm/IBM>/db2/V11.1/instance/db2iupdt -u <DB2 Fence user name> <DB2 instance user name>
觀察指令是否執行成功
2.9 啟動B、C、D機
db2start
db2 activate db <dbname>
2.10 啟動A機
db2start
db2 activate db <dbname>
2.11 檢查HADR狀态
如果以上步驟中HADR狀态不對,不能執行以下操作
檢查HADR狀态
db2pd -d <dbname> -hadr
A機應為primary ,狀态為connected。
2.12 更新庫
db2 activate db <dbname>
版本号:如9.7則輸入97;如10.5輸入105;如11.1輸入111
db2updv111 -d <dbname>
2.13 驗證資料庫版本
db2level
版本資訊應為“DB2 v11.1.4.x”,檢查資料庫版本是否為所更新的版本
檢查DB2的db2diag.log的日志,檢視是否有錯誤發生。
如出現錯誤,檢視/tmp目錄更新版本日志,可重複更新産品和執行個體
2.14 啟動螢幕
注冊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
2.15 綁包
資料庫中重新綁定程式包:
1.重新綁定資料庫SCHEMA.BND/UBIND.LST/CLI.LST
db2 terminate
db2 connect to <dbname>
db2 bind <DB2INSTANCEHOME>/sqllib/bnd/db2schema.bnd blocking all grant public SQLERROR continue
db2 bind <DB2INSTANCEHOME>/sqllib/bnd/@db2ubind.lst blocking all grant public action add
db2 bind <DB2INSTANCEHOME>/sqllib/bnd/@db2cli.lst blocking all grant public action add
db2 terminate
2.在資料庫中通過運作 db2rbind 指令來重新綁定所有無效程式包:
db2rbind <dbname> -l /tmp/logfile all
su - <instance name>
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。
2.16 檢查表
db2 connect to <dbname>
db2 "select * from <tablename> fetch first 10 row only"
2.17 檢查表空間狀态
db2 connect to <dbname>
db2 list tablespaces show detail | grep -i state #必須全部是:0x00000000
2.18 啟動雙機軟體
如果是linux:
A、B 同時:
service cman start
A:
service rgmanager start
B:
service rgmanager start
如果是pcs軟體
pcs cluster start --all
pcs status
—————————————————-啟動應用————————————————————————
3 回退
3.1 B、C、D伺服器停止資料庫
停止資料庫:
db2 deactivate db <dbname>
db2stop force
檢查DB2程序是否存在
ps -ef | grep -i db2
3.2 安裝原來版本媒體
下載下傳原版本媒體後解壓
cd /tmp/db2_fix #以實際目錄為準
./installFixPack -f level -b /opt/<ibm/IBM>/db2/V11.1
3.3 更新執行個體
/opt/<ibm/IBM>/db2/V11.1/instance/db2iupdt -u <DB2 Fence user name> <DB2 instance user name>
觀察指令是否執行成功
3.4 還原執行個體目錄
mv /home/<執行個體名>/sqllib /home/<執行個體名>/sqllib_NEW
mv /home/<執行個體名>/sqllib_bak /home/<執行個體名>/sqllib
3.5 恢複B、C、D庫
su - <執行個體使用者名>
cd /home/<執行個體使用者名>
如果是NBU備份,使用最近的全備恢複(需要備份小組介入)
A機執行指令:檢視備份日志cat /usr/openv/scripts/db2_backup_<dbname>_sh.out,DB2_FULL = 1表示全備,DB2_CINC=1表示增備,配置db2.conf檔案。
db2 get db cfg for <dbname> | grep -i log,删除活動日志路徑下的活動日志。
db2 "restore db <dbname> load /usr/openv/netbackup/bin/nbdb2.so64 on <path> dbpath on <path> taken at <TimeStamp> without prompting"
#觀察資料庫恢複進度
db2pd -util
db2 list utilities show detail
exit
#注釋1:檢查A機,db2pd -db <dbname> -tablespaces 觀察"table space autoresize statistics"中"AS"關鍵字,如果都是yes,證明資料庫采用Automatic Storage管理,是以再确認每個表空間有幾個path,如果橫跨多個path ,則要寫path1,path2,....
#注釋2:資料庫目錄,在A機通過db2 list db directory show detail确認“Local database directory”
#注釋3:db2 get db cfg for <dbname> | grep -i 'Path to log files' NODE0000之前的目錄
3.6 停止A庫
停止資料庫:
db2 force application all
db2 terminate
db2stop force
3.7 安裝原版本媒體
下載下傳原版本媒體後解壓
cd /tmp/db2_fix
./installFixPack -f level -b /opt/<ibm/IBM>/db2/V11.1
3.8 更新執行個體
/opt/<ibm/IBM>/db2/V<9/10/11>.x/instance/db2iupdt -u <DB2 Fence user name> <DB2 instance user name>
觀察指令是否執行成功
3.9 恢複A庫
su - <執行個體使用者名>
cd /home/<執行個體使用者名>
mkdir -p /yunwei/Release/tmplogs
如果是NBU備份,使用最近的全備恢複(需要備份小組介入)
A機執行指令:檢視備份日志cat /usr/openv/scripts/db2_backup_<dbname>_sh.out,DB2_FULL = 1表示全備,DB2_CINC=1表示增備,配置db2.conf檔案。
db2 "restore db <dbname> load /usr/openv/netbackup/bin/nbdb2.so64 on <path> dbpath on <path> taken at <TimeStamp> without prompting"
db2 "rollforward db <dbname> to end of logs and stop overflow log path(/yunwei/Release/tmplogs)"
#觀察資料庫恢複進度
db2pd -util
db2 list utilities show detail
exit
#Media-Target:如果是同城則用“use tsm”
#注釋1:檢查A機,db2pd -db <dbname> -tablespaces 觀察"table space autoresize statistics"中"AS"關鍵字,如果都是yes,證明資料庫采用Automatic Storage管理,是以再确認每個表空間有幾個path,如果橫跨多個path ,則要寫path1,path2,....
#注釋2:資料庫目錄,在A機通過db2 list db directory show detail确認“Local database directory”
#注釋3:db2 get db cfg for <dbname> | grep -i 'Path to log files' NODE0000之前的目錄
3.10 啟動B、C、D庫
#啟動HADR備機
su - <資料庫執行個體使用者>
ifconfig -a #确認HADR standby TCP ip已經就緒
db2stop force
db2start
db2 "start hadr on db <dbname> as standby"
3.11 啟動A庫
#啟動HADR主機
su - <資料庫執行個體使用者>
ifconfig -a #确認HADR primary TCP ip已經就緒
db2stop force
db2start
db2 "start hadr on db <dbname> as primary"
3.12 檢視HADR狀态
db2pd -db <dbname> -hadr #觀察HADR狀态,并且開始log shipping,注意LOGGap和Buffer的百分比。待Peer狀态後再執行以下步驟
3.13 檢視表
db2 connect to <DBNAME>
db2 "select * from <tablename> fetch first 10 row only"
3.14 檢視表空間狀态
db2 connect to <dbname>
db2 list tablespaces show detail | grep -i state #必須全部是:0x00000000
3.15 還原資料庫驅動
注意:此步驟主要是還原原來的資料庫驅動
将db2原版本以後為保證應用驅動程式保持在同一版本需要進行替換驅動包,操作主要步驟:
1、将/home/<instance>/sqllib/java/ 下的db2java.zip、db2jcc.jar、db2jcc_license_cu.jar、db2jcc4.jar替換應用原使用的驅動包。
2、登入WAS控制台-》資源-》JDBC-》資料源-》選擇相應的資料源-》“點選測試連接配接
預設不替換驅動的原因:
1、多個資料源共用一套驅動程式,一經更新将影響所有應用程式連接配接資料庫
提示:如果程式本身沒有使用WAS資料源,請進行應用驗證