重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
如何進行DB2日常運維的分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創新互聯專注于松嶺網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供松嶺營銷型網站建設,松嶺網站制作、松嶺網頁設計、松嶺網站官網定制、小程序定制開發服務,打造松嶺網絡公司原創品牌,更為您提供松嶺網站排名全網營銷落地服務。
一、 DB2日常維護操作
1、數據庫的啟動、停止、激活
db2 list active databases
db2 active db 數據庫名
db2start --啟動
db2stop [force] --停止
2.數據庫的連接、斷開
db2 CONNECT TO DBName [user UserID using PWD]--建立連接
db2 CONNECT reset /db2 disconnect CURRENT --斷開連接
db2 terminate --斷開與數據庫的連接
3.實例的創建、刪除
db2icrt < 實例名稱 > --創建 db2 實例
db2idrop < 實例名稱 >--刪除 db2 實例
set db2intance=db2 --設置當前 db2 實例
db2ilist --顯示 db2 擁有的實例
4.節點、數據庫的編目
db2 list db directory --查看本地節點目錄
db2 catalog tcpip node
TCP/IP節點
db2 uncatalog node
db2 catalog DATABASE
db2 uncatalog DATABASE
5、檢查DB2實例是否已經啟動
用ps命令查看是否有db2sysc后臺進程
#ps -ef | db2sysc
也可以以DB2實例所有者登錄,通過發出db2start命令來確保啟動了實例(如果實例已經啟動,則會告知SQL1026N 數據庫管理器已激活;否則,將把實例啟動起來)
6、 查看表空間狀態是否正常
以db2實例所有者登錄
#db2 list tablespaces show detail //在單分區上查看表空間的狀態,正常返回0x0000
# db2_all list tablespaces show detail //在所有分區上查看表空間的狀態
可以使用LIST TABLESPACES 命令確定連接數據庫中表空間的當前狀態,可以使用SHOW DETAIL選項查看表空間的詳細信息。比如,我們連上SAMPLE數據庫,執行list tablespaces show detail ,可以看到狀態返回值是0x0000,此時,使用db2tbst可以查看狀態編號對于的狀態含義,具體語法如下:
db2tbst
db2inst1@local:~> db2tbst 0x0000
State = Normal
db2tbst 命令接收十六進制的狀態值,并返回相應的表空間狀態。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而該十六進制的狀態值反過來又是 LIST TABLESPACES 命令輸出的組成部分。表空間的外部可見狀態是由單個狀態值的十六進制總和構成的。例如,如果表空間的狀態是 Backup Pending和 Load in Progress,那么所返回的十六進制值就是 0x20020
(0x00020 + 0x20000)
7、 查看表的狀態
查詢系統目錄視圖以獲得關于數據庫的表的狀態信息。例如,下面的語句將返回在 SYSCAT.TABLES 中有項的所有表的名稱,以及每個表的列數和表的狀態(N = 正常;C = 待審核(check pending))
#db2 select tabname, colcount, status FROM syscat.tables ORDER BY tabname
也可以使用load query命令查看單個表的狀態,比如對表TEST1,我們可以發出如下命令:
#db2 load query table test1
8、 查看磁盤空間
查看數據庫活動日志目錄是否已滿,活動日志目錄的位置可以使用db2 get db cfg查看,注意一定不要手工刪除活動日志
#df -k
查看SMS表空間對應的容器目錄空間是否滿了
#df -k
查看DMS表空間中是否還有可用頁
#db2 list tablespaces show detail //在單分區上查看表空間的是否還有可用頁
# db2_all list tablespaces show detail //在所有分區上查看表空間是否還有可用頁
9、 檢查存儲管理軟件是否正常
請檢查TSM或其他存儲管理軟件是否正常,以及磁帶機是否運行正常。
10、 檢查數據庫備份是否正常
請查看TSM或第三方存儲管理軟件,看備份映像文件是否完整的保存到了磁帶機上了,想在DB2上查看備份情況,可以使用LIST命令
# db2 list history backup all for 數據庫名
11、 檢查歸檔日志是否正確歸檔了
請確保活動日志目錄下沒有的日志文件都已經正確歸檔到了帶機上(查看TSM或第三方存儲管理軟件)。
12、 查看當前運行最頻繁的SQL,其命中率是否正常
# db2 get snapshot for bufferpools on 數據庫名 > log.txt
#db2 "select * from SYSCAT.BUFFERPOOLS" 查緩沖池大小信息
命中率計算:
(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"執行次數最頻繁的語句,看其命中率是否正常。
比如:
grep -n " Number of executions" log.txt | grep -v "= 0" | sort -k 5,5rn | more
13、 查看當前連接的應用程序,有沒有非法連接
#db2 list applications show detail
看這些連接的情況,看有沒有不合適的IP連上來,或者不被允許的第三方工具連上來,比如一些第三方工具連上來會對表進行鎖定,影響業務系統正常運行,這個時候可以用db2 "force application(應用程序句柄號)" 將某個單獨的句柄停下來。
14、 檢查有沒有死鎖
# db2 get snapshot for all on 數據庫名 > log.txt
用grep命令查看輸出的文件中是否有死鎖的記錄,比如
grep -n "Deadlocks detected" log.txt | grep -v "= 0" | more
15、 對表和索引進行runstats
#db2 runstats on table 表名 and index all
對系統表以及變化比較頻繁的表運行統計信息,建議寫成shell腳本自動運行。
16、 檢查表是否需要重組
使用REORGCHK命令,通過統計數據檢查表是否需要重組,語法如下:
REORGCHK [UPDATE | CURRENT ]STATISTICS ON [TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_name]
UPDATE STATISTICS: 更新表的統計數據,根據該統計數據判斷是否需要重組表
CURRENT STATISTICS:根據當前表統計數據判斷是否需要重組表
TABLE table_name : 對單個表進行分析
TABLE ALL: 對數據庫所有的表進行分析
TABLE SYSTEM: 對系統表進行分析
TABLE USER : 對當前用戶模式下的所有表進行分析
#db2 reorgchk update statistics on table all
對需要重組的表進行重組
#db2 reorg table 表名 //通過重構行來消除“碎片”數據
#db2 reorg indexes all for table 表名 //只重組索引
比如:
reorg table db2inst1.org index by_id
將根據索引by_id,如果不加INDEX選項將重組表和所有的索引
reorg table db2inst1.org index by_id use tempspace1
使用指定的臨時表空間重組表
表重組完成后需要進行RUNSTATS。另外,記住在分區數據庫環境中,如果想在所有節點運行命令,需要使用db2_all命令。
17、數據庫的備份、恢復
--離線備份
db2 force applications all--斷開所有連接
db2 force application(h2,h3……)--殺死與數據庫相連接的某個進程
db2 backup db DBName [to /backup] [use TSM]--離線備份
--在線、增量備份
--前提:更改數據庫參數 logretain, userexit, trackmod 為 on,之后數據庫處于backup pending狀態,要完全離線備份數據庫一次,之后就可以進行在線、在線增量備份了。
db2 update db cfg using logretain on userexit on trackmod on--啟用相關參數
--歸檔路徑
DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 DISK:/backup
--LOGARCHMETH1參數改成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]--在線增量備份
--數據庫恢復
db2 restore db DBname [incremental] [FROM /backup][use TSM] taken AT YYYYMMDDHHMMSS
--恢復 (時間戳記:YYYYMMDDHHMMSS)
db2 list history backup [since YYYYMMDDHHMMSS] ALL FOR DBName
--查看 [從YYYYMMDDHHMMSS] 對DBName的備份情況
db2 ROLLFORWARD DATABASE DBName TO END OF LOGS AND COMPLETE NORETRIEVE--將暫掛的數據恢復到前滾狀態
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.數據的導出、導入
--導出
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可轉為excel
db2 EXPORT TO D:\TableName.ixf OF ixf SELECT * FROM SCHEMA.TableName
--導出數據(IXF 集成通用交換格式)
db2 EXPORT TO "D:\TableName.data" OF IXF MESSAGES "D:\TableName.msg" SELECT * FROM SCHEMA.TableName;
--導入
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或第三方存儲管理軟件,查看備份和歸檔日志是否都保存好了,在數據庫級別查看備份,可以使用:
# db2 list history backup all for 數據庫名
21、通過快照監控器,查看系統性能如何
通過快照監控器,抓取數據庫的信息,分析數據庫性能是否合理:
# db2 get snapshot for all on 數據庫名 > log.txt
22、 數據庫補丁級別
# db2level
23、獲取數據庫的配置參數
查看現有數據庫管理器配置文件中的配置參數的當前值,可以使用以下命令:
db2get database manager configuration
可簡寫為:db2 get dbm cfg
更新數據庫管理器配置文件中的單個配置參數的值,可以使用以下命令:
db2update database manager configuration using
可簡寫為:db2 upadte dbm cfg using
查看數據庫配置文件中的配置參數的當前取值,可以使用以下命令:
db2 get database configuration for 數據庫名
可簡寫為:db2 get db cfg for 數據庫名
更新數據庫配置文件中的單個配置參數的取值,可以使用以下命令:
db2 update database configuration for 數據庫名 using 參數名參數值…
可簡寫為:db2 upadte db cfg for 數據庫名 using 參數名參數值…
24、查看設置的參數
$ db2set
DB2_INLIST_TO_NLJN=YES
DB2_EVALUNCOMMITTED=YES
DB2_RR_TO_RS=YES
DB2COUNTRY=86
DB2COMM=TCPIP
DB2CODEPAGE=1386
二、 DB2運維日常注意事項
1、 不要刪除活動日志文件
DB2 的活動日志文件不能被刪除。一旦 DB2 的活動日志文件被刪除,或者所在的存儲設備出現問題,則不可避免地造成 DB2 數據庫系統宕機。
2、 注意交易日志存儲空間
在歸檔日志模式下,如果沒有使用自動歸檔方式,則存儲的日志文件會不斷增多,有可能造成日志所在的文件系統空間滿。 當這種情況發生時,會根據參數 BLK_LOG_DSK_FUL 的配置而有不
同的現象:
1)如果該參數啟用,則 DB2 數據庫可繼續讀操作,但是寫操作會掛起
2)如果該參數沒有啟用,則 DB2 數據庫會停止工作
兩種情況下,都需要到日志所在的文件系統添加了空間才恢復正常,避免出現事務日志滿的問題。
3、 按照系統的實際工作量配置日志空間
DB2數據庫通過日志文件維護數據的完整性和一致性。DB2 數據庫的日志空間可通過如下公式計算:
日志空間 = (主日志文件 + 輔助日志文件) * 日志文件尺寸
其中:
1) 主日志文件由參數 LOGPRIMARY 控制,
2) 輔助日志文件由參數 LOGSECOND 控制
3) 日志文件尺寸由參數 LOGFILSIZ 控制
4) LOGPRIMARY + LOGSECOND < 256 (不同的 DB2 版本略有不同,請參看相同版本的 DB2 手冊確認)
4、 設置正確數據庫代碼頁
由于數據庫的代碼頁在數據庫創建之后是無法修改的,所以在創建數據庫時一定要選擇正確的代碼頁。
錯誤的數據庫代碼頁會造成 JDBC/ODBC 訪問時中文字段被截斷(包括控制中心),這種情況需要重建數據庫以修改數據庫代碼頁。
從全局規劃來說,如果應用需要訪問多個數據庫,那么這多個數據庫的代碼頁應該是一致的。
5、 檢查許可證(License)安裝情況
許可證過期會造成不必要的服務中斷,所以在 DB2 安裝完畢后,建議檢察許可的安裝情況
檢查license的內容
$db2licm -l
執行如下安裝授權許可
#/opt/ibm/db2/V9.7/adm/db2licm -a /mnt/cdrom/db2/license/db2ese.lic
6、 創建數據庫前調整好系統時間
在數據庫創建好之后,調整系統時間會造成數據庫內部時間戳的異常。數據庫中一些對象和時間相關,一旦時間不準確要調整需要很小心。錯誤的時間調整可能會造成很多問題,如:
1)某些對象失效,例如 :
SQL0440N,找不到具有兼容自變量的類型為 “<例程類型>” 的名為 “<例程名>” 的已授權例程
2)數據庫日志邏輯錯誤 -> 宕機
3)常見錯誤 – 只調整時間,未調整時區
7、 不要隨便執行 chown (chmod) –R (UNIX/Linux)
在實例目錄下chown (chmod) -R 會造成
1) 在數據庫服務器上 db2 connect to
2) db2 connect to
8、 在歸檔日志模式下使用LOAD記得加NONRECOVERABLE參數
看完上述內容,你們掌握如何進行DB2日常運維的分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!