溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行DB2日常運(yùn)維的分析

發(fā)布時(shí)間:2021-12-30 16:27:23 來源:億速云 閱讀:107 作者:柒染 欄目:云計(jì)算

如何進(jìn)行DB2日常運(yùn)維的分析,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

一、 DB2日常維護(hù)操作

1、數(shù)據(jù)庫的啟動(dòng)、停止、激活

db2 list active databases

db2 active db 數(shù)據(jù)庫名

db2start --啟動(dòng)

db2stop [force] --停止

2.數(shù)據(jù)庫的連接、斷開

db2 CONNECT TO DBName [user UserID using PWD]--建立連接

db2 CONNECT reset /db2 disconnect CURRENT --斷開連接

db2 terminate  --斷開與數(shù)據(jù)庫的連接

3.實(shí)例的創(chuàng)建、刪除

db2icrt < 實(shí)例名稱 > --創(chuàng)建 db2 實(shí)例

db2idrop < 實(shí)例名稱 >--刪除 db2 實(shí)例

set db2intance=db2 --設(shè)置當(dāng)前 db2 實(shí)例

db2ilist  --顯示 db2 擁有的實(shí)例

4.節(jié)點(diǎn)、數(shù)據(jù)庫的編目

db2 list db directory --查看本地節(jié)點(diǎn)目錄

db2 catalog tcpip node <node_name> remote <hostname|ip_address> <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>--編目一個(gè)

TCP/IP節(jié)點(diǎn)

db2 uncatalog node <node_name> --取消節(jié)點(diǎn)編目

db2 catalog DATABASE <db_name> AS <db_alias> AT node <node_name>--編目數(shù)據(jù)庫

db2 uncatalog DATABASE <db_name> --取消數(shù)據(jù)庫編目

5、檢查DB2實(shí)例是否已經(jīng)啟動(dòng)

用ps命令查看是否有db2sysc后臺(tái)進(jìn)程

#ps -ef | db2sysc

也可以以DB2實(shí)例所有者登錄,通過發(fā)出db2start命令來確保啟動(dòng)了實(shí)例(如果實(shí)例已經(jīng)啟動(dòng),則會(huì)告知SQL1026N 數(shù)據(jù)庫管理器已激活;否則,將把實(shí)例啟動(dòng)起來)

6、 查看表空間狀態(tài)是否正常

以db2實(shí)例所有者登錄

#db2 list tablespaces show detail //在單分區(qū)上查看表空間的狀態(tài),正常返回0x0000

# db2_all list tablespaces show detail //在所有分區(qū)上查看表空間的狀態(tài)

可以使用LIST TABLESPACES 命令確定連接數(shù)據(jù)庫中表空間的當(dāng)前狀態(tài),可以使用SHOW DETAIL選項(xiàng)查看表空間的詳細(xì)信息。比如,我們連上SAMPLE數(shù)據(jù)庫,執(zhí)行l(wèi)ist tablespaces show detail ,可以看到狀態(tài)返回值是0x0000,此時(shí),使用db2tbst可以查看狀態(tài)編號(hào)對于的狀態(tài)含義,具體語法如下:

db2tbst <tablespace state> 可以查看編號(hào)所代表的狀態(tài)

db2inst1@local:~> db2tbst 0x0000

State = Normal

db2tbst 命令接收十六進(jìn)制的狀態(tài)值,并返回相應(yīng)的表空間狀態(tài)。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而該十六進(jìn)制的狀態(tài)值反過來又是 LIST TABLESPACES 命令輸出的組成部分。表空間的外部可見狀態(tài)是由單個(gè)狀態(tài)值的十六進(jìn)制總和構(gòu)成的。例如,如果表空間的狀態(tài)是 Backup Pending和 Load in Progress,那么所返回的十六進(jìn)制值就是 0x20020

(0x00020 + 0x20000)

7、 查看表的狀態(tài)

查詢系統(tǒng)目錄視圖以獲得關(guān)于數(shù)據(jù)庫的表的狀態(tài)信息。例如,下面的語句將返回在 SYSCAT.TABLES 中有項(xiàng)的所有表的名稱,以及每個(gè)表的列數(shù)和表的狀態(tài)(N = 正常;C = 待審核(check pending))

#db2 select tabname, colcount, status FROM syscat.tables ORDER BY tabname

也可以使用load query命令查看單個(gè)表的狀態(tài),比如對表TEST1,我們可以發(fā)出如下命令:

#db2 load query table test1

8、 查看磁盤空間

查看數(shù)據(jù)庫活動(dòng)日志目錄是否已滿,活動(dòng)日志目錄的位置可以使用db2 get db cfg查看,注意一定不要手工刪除活動(dòng)日志

#df -k

查看SMS表空間對應(yīng)的容器目錄空間是否滿了

#df -k

查看DMS表空間中是否還有可用頁

#db2 list tablespaces show detail //在單分區(qū)上查看表空間的是否還有可用頁

# db2_all list tablespaces show detail //在所有分區(qū)上查看表空間是否還有可用頁

9、 檢查存儲(chǔ)管理軟件是否正常

請檢查TSM或其他存儲(chǔ)管理軟件是否正常,以及磁帶機(jī)是否運(yùn)行正常。

10、 檢查數(shù)據(jù)庫備份是否正常

請查看TSM或第三方存儲(chǔ)管理軟件,看備份映像文件是否完整的保存到了磁帶機(jī)上了,想在DB2上查看備份情況,可以使用LIST命令

# db2 list history backup all for 數(shù)據(jù)庫名

11、 檢查歸檔日志是否正確歸檔了

請確?;顒?dòng)日志目錄下沒有的日志文件都已經(jīng)正確歸檔到了帶機(jī)上(查看TSM或第三方存儲(chǔ)管理軟件)。

12、 查看當(dāng)前運(yùn)行最頻繁的SQL,其命中率是否正常

# db2 get snapshot for bufferpools on 數(shù)據(jù)庫名 > log.txt

#db2 "select * from SYSCAT.BUFFERPOOLS" 查緩沖池大小信息

命中率計(jì)算:

(1- ((Buffer pool data physical reads + Buffer pool index physical reads) /
(Buffer pool data logical reads + Buffer pool index logical reads))) * 100%

用grep命令查看" Number of executions"執(zhí)行次數(shù)最頻繁的語句,看其命中率是否正常。

比如:

grep -n " Number of executions" log.txt | grep -v "= 0" | sort -k 5,5rn | more

13、 查看當(dāng)前連接的應(yīng)用程序,有沒有非法連接

#db2 list applications show detail

看這些連接的情況,看有沒有不合適的IP連上來,或者不被允許的第三方工具連上來,比如一些第三方工具連上來會(huì)對表進(jìn)行鎖定,影響業(yè)務(wù)系統(tǒng)正常運(yùn)行,這個(gè)時(shí)候可以用db2 "force application(應(yīng)用程序句柄號(hào))" 將某個(gè)單獨(dú)的句柄停下來。

14、 檢查有沒有死鎖

# db2 get snapshot for all on 數(shù)據(jù)庫名 > log.txt

用grep命令查看輸出的文件中是否有死鎖的記錄,比如

grep -n "Deadlocks detected" log.txt | grep -v "= 0" | more

15、 對表和索引進(jìn)行runstats

#db2 runstats on table 表名 and index all

對系統(tǒng)表以及變化比較頻繁的表運(yùn)行統(tǒng)計(jì)信息,建議寫成shell腳本自動(dòng)運(yùn)行。

16、 檢查表是否需要重組

使用REORGCHK命令,通過統(tǒng)計(jì)數(shù)據(jù)檢查表是否需要重組,語法如下:

REORGCHK [UPDATE | CURRENT ]STATISTICS ON [TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_name]

UPDATE STATISTICS: 更新表的統(tǒng)計(jì)數(shù)據(jù),根據(jù)該統(tǒng)計(jì)數(shù)據(jù)判斷是否需要重組表

CURRENT STATISTICS:根據(jù)當(dāng)前表統(tǒng)計(jì)數(shù)據(jù)判斷是否需要重組表

TABLE table_name : 對單個(gè)表進(jìn)行分析

TABLE ALL: 對數(shù)據(jù)庫所有的表進(jìn)行分析

TABLE SYSTEM: 對系統(tǒng)表進(jìn)行分析

TABLE USER : 對當(dāng)前用戶模式下的所有表進(jìn)行分析

#db2 reorgchk update statistics on table all

對需要重組的表進(jìn)行重組

#db2 reorg table 表名  //通過重構(gòu)行來消除“碎片”數(shù)據(jù)

#db2 reorg indexes all for table 表名 //只重組索引

比如:

reorg table db2inst1.org index by_id

將根據(jù)索引by_id,如果不加INDEX選項(xiàng)將重組表和所有的索引

reorg table db2inst1.org index by_id use tempspace1

使用指定的臨時(shí)表空間重組表

表重組完成后需要進(jìn)行RUNSTATS。另外,記住在分區(qū)數(shù)據(jù)庫環(huán)境中,如果想在所有節(jié)點(diǎn)運(yùn)行命令,需要使用db2_all命令。

17、數(shù)據(jù)庫的備份、恢復(fù)

--離線備份

db2 force applications all--斷開所有連接

db2 force application(h2,h3……)--殺死與數(shù)據(jù)庫相連接的某個(gè)進(jìn)程

db2 backup db DBName [to /backup] [use TSM]--離線備份

--在線、增量備份

--前提:更改數(shù)據(jù)庫參數(shù) logretain, userexit, trackmod 為 on,之后數(shù)據(jù)庫處于backup pending狀態(tài),要完全離線備份數(shù)據(jù)庫一次,之后就可以進(jìn)行在線、在線增量備份了。

db2 update db cfg using logretain on userexit on trackmod on--啟用相關(guān)參數(shù)

--歸檔路徑

DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 DISK:/backup

--LOGARCHMETH1參數(shù)改成TSM

DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 TSM IMMEDIATE

db2 backup db DBName [to /backup] [use TSM]--離線備份

db2 backup db DBName online [to /backup] [use TSM] include logs --在線線備份

db2 backup db DBName online incremental [to /backup] [use TSM]--在線增量備份

--數(shù)據(jù)庫恢復(fù)

db2 restore db DBname [incremental] [FROM /backup][use TSM] taken AT YYYYMMDDHHMMSS

--恢復(fù) (時(shí)間戳記:YYYYMMDDHHMMSS)

db2 list history backup [since YYYYMMDDHHMMSS] ALL FOR DBName

--查看 [從YYYYMMDDHHMMSS] 對DBName的備份情況

db2 ROLLFORWARD DATABASE DBName TO END OF LOGS AND COMPLETE NORETRIEVE--將暫掛的數(shù)據(jù)恢復(fù)到前滾狀態(tài)

db2 ROLLFORWARD DATABASE DBName TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH ("/home/db2inst1/SQLOGDIR")

db2 CONNECT TO DBName

db2 prune history YYYYMMDDHHMMSS--刪除DBName YYYYMMDDHHMMSS之前的備份記錄

18.數(shù)據(jù)的導(dǎo)出、導(dǎo)入

--導(dǎo)出

db2 EXPORT TO D:\TableName.txt OF del SELECT * FROM SCHEMA.TableName--文本格式

db2 EXPORT TO D:\TableName.csv OF del SELECT * FROM SCHEMA.TableName--csv可轉(zhuǎn)為excel

db2 EXPORT TO D:\TableName.ixf OF ixf SELECT * FROM SCHEMA.TableName

--導(dǎo)出數(shù)據(jù)(IXF 集成通用交換格式)

db2 EXPORT TO "D:\TableName.data" OF IXF MESSAGES "D:\TableName.msg" SELECT * FROM SCHEMA.TableName;

--導(dǎo)入

db2 IMPORT FROM D:\TableName.txt OF del INSERT INTO SCHEMA.TableName

db2 IMPORT FROM "D:\TableName.data" OF IXF [MESSAGES "D:\TableName.msg"] [COMMITCOUNT 1000] INSERT/CREATE INTO SCHEMA.TableName;

db2 IMPORT FROM "D:\TableName.ixf" OF IXF [COMMITCOUNT 1000] INSERT/INSERT_UPDATE/CREATE/REPLACE/REPLACE_CREATE INTO SCHEMA.TableName;

19、查看DB2日志

請至少每天查看一次db2diag.log文件,看其中是否有異常。

20、 檢查備份和日志是否都保存好了

通過TSM或第三方存儲(chǔ)管理軟件,查看備份和歸檔日志是否都保存好了,在數(shù)據(jù)庫級(jí)別查看備份,可以使用:

# db2 list history backup all for 數(shù)據(jù)庫名

21、通過快照監(jiān)控器,查看系統(tǒng)性能如何

通過快照監(jiān)控器,抓取數(shù)據(jù)庫的信息,分析數(shù)據(jù)庫性能是否合理:

# db2 get snapshot for all on 數(shù)據(jù)庫名 > log.txt

22、 數(shù)據(jù)庫補(bǔ)丁級(jí)別

# db2level

23、獲取數(shù)據(jù)庫的配置參數(shù)

查看現(xiàn)有數(shù)據(jù)庫管理器配置文件中的配置參數(shù)的當(dāng)前值,可以使用以下命令:

 db2get database manager configuration

可簡寫為:db2 get dbm cfg

更新數(shù)據(jù)庫管理器配置文件中的單個(gè)配置參數(shù)的值,可以使用以下命令:

 db2update database manager configuration using <parameter name> <newvalue> <next parameter name> <new value>…

可簡寫為:db2 upadte dbm cfg using<parameter name> <new value> <next parameter name> <newvalue>…


查看數(shù)據(jù)庫配置文件中的配置參數(shù)的當(dāng)前取值,可以使用以下命令:

db2 get database configuration for 數(shù)據(jù)庫名

可簡寫為:db2 get db cfg for 數(shù)據(jù)庫名

更新數(shù)據(jù)庫配置文件中的單個(gè)配置參數(shù)的取值,可以使用以下命令:

db2 update database configuration for 數(shù)據(jù)庫名 using 參數(shù)名參數(shù)值…

可簡寫為:db2 upadte db cfg for 數(shù)據(jù)庫名 using 參數(shù)名參數(shù)值…

24、查看設(shè)置的參數(shù)

$ db2set

DB2_INLIST_TO_NLJN=YES

DB2_EVALUNCOMMITTED=YES

DB2_RR_TO_RS=YES

DB2COUNTRY=86

DB2COMM=TCPIP

DB2CODEPAGE=1386

二、 DB2運(yùn)維日常注意事項(xiàng)

1、 不要?jiǎng)h除活動(dòng)日志文件

DB2 的活動(dòng)日志文件不能被刪除。一旦 DB2 的活動(dòng)日志文件被刪除,或者所在的存儲(chǔ)設(shè)備出現(xiàn)問題,則不可避免地造成 DB2 數(shù)據(jù)庫系統(tǒng)宕機(jī)。

2、 注意交易日志存儲(chǔ)空間

在歸檔日志模式下,如果沒有使用自動(dòng)歸檔方式,則存儲(chǔ)的日志文件會(huì)不斷增多,有可能造成日志所在的文件系統(tǒng)空間滿。 當(dāng)這種情況發(fā)生時(shí),會(huì)根據(jù)參數(shù) BLK_LOG_DSK_FUL 的配置而有不

同的現(xiàn)象:

1)如果該參數(shù)啟用,則 DB2 數(shù)據(jù)庫可繼續(xù)讀操作,但是寫操作會(huì)掛起

2)如果該參數(shù)沒有啟用,則 DB2 數(shù)據(jù)庫會(huì)停止工作

兩種情況下,都需要到日志所在的文件系統(tǒng)添加了空間才恢復(fù)正常,避免出現(xiàn)事務(wù)日志滿的問題。

3、 按照系統(tǒng)的實(shí)際工作量配置日志空間

DB2數(shù)據(jù)庫通過日志文件維護(hù)數(shù)據(jù)的完整性和一致性。DB2 數(shù)據(jù)庫的日志空間可通過如下公式計(jì)算:

日志空間 = (主日志文件 + 輔助日志文件) * 日志文件尺寸

其中:

1) 主日志文件由參數(shù) LOGPRIMARY 控制,

2) 輔助日志文件由參數(shù) LOGSECOND 控制

3) 日志文件尺寸由參數(shù) LOGFILSIZ 控制

4) LOGPRIMARY + LOGSECOND < 256 (不同的 DB2 版本略有不同,請參看相同版本的 DB2 手冊確認(rèn))

4、 設(shè)置正確數(shù)據(jù)庫代碼頁

由于數(shù)據(jù)庫的代碼頁在數(shù)據(jù)庫創(chuàng)建之后是無法修改的,所以在創(chuàng)建數(shù)據(jù)庫時(shí)一定要選擇正確的代碼頁。

錯(cuò)誤的數(shù)據(jù)庫代碼頁會(huì)造成 JDBC/ODBC 訪問時(shí)中文字段被截?cái)啵ò刂浦行模?,這種情況需要重建數(shù)據(jù)庫以修改數(shù)據(jù)庫代碼頁。

從全局規(guī)劃來說,如果應(yīng)用需要訪問多個(gè)數(shù)據(jù)庫,那么這多個(gè)數(shù)據(jù)庫的代碼頁應(yīng)該是一致的。

5、 檢查許可證(License)安裝情況

許可證過期會(huì)造成不必要的服務(wù)中斷,所以在 DB2 安裝完畢后,建議檢察許可的安裝情況

檢查license的內(nèi)容

$db2licm -l

執(zhí)行如下安裝授權(quán)許可

#/opt/ibm/db2/V9.7/adm/db2licm -a /mnt/cdrom/db2/license/db2ese.lic

6、 創(chuàng)建數(shù)據(jù)庫前調(diào)整好系統(tǒng)時(shí)間

在數(shù)據(jù)庫創(chuàng)建好之后,調(diào)整系統(tǒng)時(shí)間會(huì)造成數(shù)據(jù)庫內(nèi)部時(shí)間戳的異常。數(shù)據(jù)庫中一些對象和時(shí)間相關(guān),一旦時(shí)間不準(zhǔn)確要調(diào)整需要很小心。錯(cuò)誤的時(shí)間調(diào)整可能會(huì)造成很多問題,如:

1)某些對象失效,例如 :

SQL0440N,找不到具有兼容自變量的類型為 “<例程類型>” 的名為 “<例程名>” 的已授權(quán)例程

2)數(shù)據(jù)庫日志邏輯錯(cuò)誤 -> 宕機(jī)

3)常見錯(cuò)誤 – 只調(diào)整時(shí)間,未調(diào)整時(shí)區(qū)

7、 不要隨便執(zhí)行 chown (chmod) –R (UNIX/Linux)

在實(shí)例目錄下chown (chmod) -R 會(huì)造成

1) 在數(shù)據(jù)庫服務(wù)器上 db2 connect to <dbname> 能連接上數(shù)據(jù)庫

2) db2 connect to <dbname> user ... using ...連接不上

8、 在歸檔日志模式下使用LOAD記得加NONRECOVERABLE參數(shù)

看完上述內(nèi)容,你們掌握如何進(jìn)行DB2日常運(yùn)維的分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

db2
AI