国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
淺談DB2數(shù)據(jù)庫故障處理及最佳實(shí)踐
淺談DB2數(shù)據(jù)庫故障處理及最佳實(shí)踐
 


  當(dāng)你在使用數(shù)據(jù)庫時(shí),可能會(huì)遇到各種不同的問題。我認(rèn)為解決問題的關(guān)鍵在于分清問題的種類,并清楚每種問題的解決辦法。另外很多的數(shù)據(jù)庫的問題都是由于錯(cuò)誤的操作,錯(cuò)誤的配置引起的,所以本文在解釋如何處理問題時(shí)也會(huì)給出一些好的建議,來避免產(chǎn)生問題。本文重點(diǎn)介紹實(shí)用的方法。

  對(duì)問題的分類有很多種方法,在本文中我我采用了兩種分類方案。

  第一種方案是是否有錯(cuò)誤碼。即發(fā)生錯(cuò)誤時(shí)是否同時(shí)返回了錯(cuò)誤碼,錯(cuò)誤碼既包括執(zhí)行命令的返回碼,也包擴(kuò)應(yīng)用程序的返回碼。

  有返回碼的錯(cuò)誤解決方案是,在db2 CLP中運(yùn)行 db2 ? SQLXXXX,然后根據(jù)對(duì)該問題的解釋采取相應(yīng)的解決方案。對(duì)沒有錯(cuò)誤碼的問題,如數(shù)據(jù)庫hang,CPU使用率過高等問題,解決問題的經(jīng)驗(yàn)將非常重要,在本文中會(huì)有詳細(xì)的說明。

 

  根據(jù)錯(cuò)誤碼解決問題舉例(在下文中,再出現(xiàn)需要用這種方法解決問題時(shí)將不再重復(fù)):

 

  如在連接數(shù)據(jù)庫時(shí)發(fā)生錯(cuò)誤

  db2 connect to sample

  SQL0332N There is no available conversion for the source code page \"1386\" to

 

  the target code page \"819\". Reason Code \"1\". SQLSTATE=57017

  錯(cuò)誤碼分為返回碼(SQL0332N)和原因碼(Reason Code \"1\"),針對(duì)不同的原因碼有不同的解決方案

  運(yùn)行db2 ? sql0332

  從輸出種可以看到對(duì)于 reason code 1的解釋是

  ……

  1 source and target code page combination is not supported by the database manager.

  ……

  所以可以通過設(shè)置代碼頁來解決這個(gè)問題

 

  db2set db2codepage=1386

 

  db2 terminate

  db2 connect to sample

 

  就可以成功連接了。

  第二種分類方案是按照問題的范圍和性質(zhì)進(jìn)行分類。分類如下:

 

  1.數(shù)據(jù)庫實(shí)例問題

  2.數(shù)據(jù)庫問題
     3.數(shù)據(jù)庫性能問題

  4.應(yīng)用開發(fā)與數(shù)據(jù)庫有關(guān)的問題

  下面對(duì)每一類問題進(jìn)行詳細(xì)說明。

 
  一、數(shù)據(jù)庫實(shí)例的問題

  數(shù)據(jù)庫實(shí)例問題可以分為兩種情況

 
  1實(shí)例無法啟動(dòng),運(yùn)行db2start后,直接返回錯(cuò)誤碼,如SQL1042C。

  如果根據(jù)錯(cuò)誤碼信息無法解決,可以嘗試如下方案: 軟件開發(fā)網(wǎng)

  重新更新該實(shí)例,以root身份登錄,

 
  cd /usr/opt/db2_08_01/instance/

  ./db2iupdt

  Tip:常見的產(chǎn)生實(shí)例無法啟動(dòng)的原因

  數(shù)據(jù)庫安裝了新的補(bǔ)丁后沒有運(yùn)行db2iupdt

  數(shù)據(jù)庫文件的權(quán)限被改成了777,數(shù)據(jù)庫文件的權(quán)限是有要求的,所以不能將所有的文件都改成777的權(quán)限

  數(shù)據(jù)庫實(shí)例文件被刪除或損壞

  主機(jī)名與db2nodes.cfg里記錄的不一致

  2.運(yùn)行db2start時(shí),hang在那里,既不報(bào)錯(cuò),也無法啟動(dòng)實(shí)例

  這種情況一般是由于實(shí)例沒有正常的停止造成的,一般運(yùn)行下列命令可以解決:

  su - http://www.mscto.com

  db2_kill

  ipclean

  su – root

  (將所有的與該實(shí)例有關(guān)的db2進(jìn)程殺死 kill -9 )

  然后重新啟動(dòng)實(shí)例。

  3.數(shù)據(jù)庫實(shí)例崩潰問題

  遇到實(shí)例崩潰的問題,首先查看db2diag.log,根據(jù)里面的信息來分析數(shù)據(jù)庫宕機(jī)的原因。再看db2dump目錄中是否有trap文件??梢愿鶕?jù)這些信息來分析原因,一般這類問題都需要IBM工程師協(xié)助解決。 http://www.mscto.com

  宕機(jī)的原因可以分為兩類,一類是數(shù)據(jù)庫的BUG,即數(shù)據(jù)庫的缺陷引起的,一般如果遇到了數(shù)據(jù)庫的缺陷,都有臨時(shí)的解決方案,或者通過安裝最新的補(bǔ)丁來解決,對(duì)某些問題IBM也提供臨時(shí)的修訂來解決(需要付費(fèi))。另一類是操作系統(tǒng),誤操作等非產(chǎn)品問題導(dǎo)致的,對(duì)非產(chǎn)品問題導(dǎo)致的宕機(jī)盡量要避免。
 
Tip:常見的數(shù)據(jù)庫宕機(jī)原因
http://www.mscto.com

 

  系統(tǒng)的交換空間(paging space)用盡 http://www.mscto.com

  數(shù)據(jù)庫的某個(gè)進(jìn)程被kill

 

  二、數(shù)據(jù)庫問題 http://www.mscto.com

  1.數(shù)據(jù)連接問題

  無法連接數(shù)據(jù)庫,常見的錯(cuò)誤有代碼頁錯(cuò)誤,通訊協(xié)議錯(cuò)誤,數(shù)據(jù)庫狀態(tài)錯(cuò)誤等。

 

  對(duì)代碼頁類錯(cuò)誤,可以通過設(shè)置db2codepage,db2country來解決,這兩個(gè)變量需要用db2set 設(shè)置成與數(shù)據(jù)庫一致的值。

  當(dāng)發(fā)生通訊類錯(cuò)誤時(shí),首先要要檢查環(huán)境變量DB2COMM=TCPIP是否已經(jīng)設(shè)置,然后要檢查dbm cfg的SVCENAME,該變量可以直接設(shè)置成端口號(hào),或者設(shè)置成服務(wù)名,該服務(wù)名要在services文件中設(shè)置成對(duì)應(yīng)的端口號(hào)。要檢查該端口號(hào)是否已經(jīng)被其他服務(wù)占用。在啟動(dòng)數(shù)據(jù)庫后,可以運(yùn)行netstat –an |grep ,來查看該端口處于的狀態(tài)。

 

  TCP 0.0.0.0:50000 0.0.0.0:0 LISTENING 軟件開發(fā)網(wǎng)

  還有一種情況,當(dāng)連接數(shù)據(jù)庫時(shí),數(shù)據(jù)庫處于backup pending 狀態(tài),無法連接。這是只要對(duì)數(shù)據(jù)庫做一個(gè)備份就可以了。

 

  Tip:通常導(dǎo)致數(shù)據(jù)庫處于備份贊掛的原因

 

  當(dāng)一個(gè)數(shù)據(jù)庫從循環(huán)日志改成歸檔日志時(shí),數(shù)據(jù)庫要求進(jìn)行一次脫機(jī)備份,在重新啟動(dòng)數(shù)據(jù)庫后,數(shù)據(jù)庫就處于備份贊掛的狀態(tài)

  對(duì)于一個(gè)使用線形日志的數(shù)據(jù)庫,當(dāng)做load時(shí),表空間會(huì)處于備份贊掛的狀態(tài),為了避免這種情況,load命令需要使用copy yes,或者nonrecoverable參數(shù)。

  2.數(shù)據(jù)庫損壞

 

  數(shù)據(jù)庫最嚴(yán)重的問題莫過于數(shù)據(jù)庫損壞,那么當(dāng)數(shù)據(jù)庫損壞時(shí),最好的辦法是從備份恢復(fù)數(shù)據(jù)庫。

  如果無法從備份恢復(fù),可以根據(jù)損壞的原因嘗試相應(yīng)的解決方案。

  由于存儲(chǔ)問題導(dǎo)致部分?jǐn)?shù)據(jù)文件損壞,但是數(shù)據(jù)庫還可以連接,這種情況可以采用導(dǎo)出數(shù)據(jù)庫的表結(jié)果和數(shù)據(jù)的方法來恢復(fù)數(shù)據(jù)庫。當(dāng)然對(duì)損壞的表,導(dǎo)出是無法完成的,這是可以使用db2dart的導(dǎo)出數(shù)據(jù)功能來導(dǎo)出這些損壞的表的數(shù)據(jù)。

 

  如果數(shù)據(jù)庫損壞到已經(jīng)無法連接的程度,那么除了從備份恢復(fù),唯一的辦法是使用db2dart來導(dǎo)出所有的數(shù)據(jù)了。

 

  Tip:如何使用db2dart來導(dǎo)出數(shù)據(jù)

  運(yùn)行命令 db2dart /DDEL

  # Table object data formatting start.

  # Please enter

  # Table ID or name, tablespace ID, first page, num of pages:

  # (suffic page number with 'p' for pool relative), 軟件開發(fā)網(wǎng)

  按照提示輸入表名,表空間id,起始頁數(shù),需要導(dǎo)出的頁數(shù)

  3.數(shù)據(jù)庫的活動(dòng)日志被刪除

  這個(gè)問題經(jīng)常會(huì)遇到。也屬于數(shù)據(jù)庫損壞的一種情況。并且數(shù)據(jù)庫無法連接。

 

  首先考慮是否有可以恢復(fù)的備份,如果有,可以從備份恢復(fù),然后前滾到日志的末尾,可以完全恢復(fù)該數(shù)據(jù)庫。如果沒有可用的備份來恢復(fù),可以通過IBM的技術(shù)支持中心來協(xié)助解決。如果想自己解決那只有使用db2dart工具了。

 

  Tip:如何避免數(shù)據(jù)庫的活動(dòng)日志被刪除

 

  啟用數(shù)據(jù)庫的鏡像日志功能 http://www.mscto.com

  啟用數(shù)據(jù)庫的日志出口程序,這樣可以避免手工來刪除活動(dòng)日志目錄中的日志

 

 

  當(dāng)一定要手工刪除活動(dòng)日志目錄中的歸檔日志時(shí),使用命令 PRUNE LOGFILE PRIOR TO log-file-name,可以避免失誤將活動(dòng)日志刪除

 

  三、數(shù)據(jù)庫性能問題

 

 

  數(shù)據(jù)庫的性能問題一般不屬于故障,但是當(dāng)性能問題變得很嚴(yán)重時(shí),就變成了故障。

 

  解決數(shù)據(jù)庫的性能問題,可以從以下方面入手,檢查數(shù)據(jù)庫的配置,如緩沖池,排序堆等是否合理;檢查數(shù)據(jù)庫是否收集過統(tǒng)計(jì)信息,準(zhǔn)確的統(tǒng)計(jì)信息對(duì)語句優(yōu)化起著重要的左右;對(duì)sql語句進(jìn)行優(yōu)化;查看是否有系統(tǒng)資源瓶頸。

  確認(rèn)性能問題首先要從系統(tǒng)的資源消耗來分析,一般可以借助操作系統(tǒng)的工具,如aix的topas命令。數(shù)據(jù)庫的性能問題一般的表現(xiàn)是應(yīng)用變慢,甚至沒有響應(yīng)。
 
Tip:如何快速定位問題

  如果系統(tǒng)的CPU利用很高,IO很少,那么數(shù)據(jù)庫的排序較多

 

  如果系統(tǒng)的IO繁忙,CPU很多是wait,那么說明數(shù)據(jù)庫有過多的IO

 

  如果系統(tǒng)CPU,IO都很空閑,那么說明可以是有鎖的問題

  如果系統(tǒng)IO,CPU都非常忙,說明有執(zhí)行代價(jià)非常高的sql在執(zhí)行

 

  數(shù)據(jù)庫一般有三類的性能問題,一是CPU占用過多,二是IO過于繁忙,三是有鎖等待。

 

 

  1.快速找到執(zhí)行成本較高的sql

  首先要打開監(jiān)視器的開關(guān)

  db2 update monitor switches using bufferpool on lock on sort on statement on table on uow on

 

  在系統(tǒng)最繁忙的時(shí)候,運(yùn)行

 

  db2 get snapshot for all applications > app.out

 

 

  然后在該文件中查找處于Executing狀態(tài)的應(yīng)用,找到執(zhí)行的對(duì)應(yīng)的sql語句。

 

  如果用這種方法找不到,可以收集sql的快照

 

  db2 get snapshot for dynamic sql on > sql.out

  這個(gè)快照記錄了動(dòng)態(tài)語句的快照信息,可以根據(jù)

  Total execution time (sec.ms) = 0.000000

  Total user cpu time (sec.ms) = 0.000000 軟件開發(fā)網(wǎng)

  Total system cpu time (sec.ms) = 0.000000

 

 

  這些信息來找到最耗時(shí)的語句。

 

  2.如何優(yōu)化sql語句

 

  DB2提供了很好的工具來做sql語句優(yōu)化。首先要對(duì)找到的sql語句進(jìn)行分析,看是否是該語句引起了性能問題。我們可以使用db2expln來查看sql語句的訪問計(jì)劃和執(zhí)行成本。 http://www.mscto.com

  首先將找到的sql語句寫到一個(gè)文本文件中sql.in,以“;”結(jié)尾,然后運(yùn)行

 

  db2expln –d -f -z “;” –g –o sql.exp

  查看 sql.exp可以看到這個(gè)sql語句的執(zhí)行成本。

  如果確認(rèn)該語句有問題,可以使用db2advis來通過建索引的方法來優(yōu)化該語句

  db2advis –d -i sql.in

  如果通過創(chuàng)建索引無法優(yōu)化該語句,一般只能從業(yè)務(wù)角度優(yōu)化。

 

  3.如果發(fā)生鎖的問題如何處理

  發(fā)生鎖的問題,一般有兩種情況,一是鎖等待,二是死鎖。首先檢查數(shù)據(jù)庫配置參數(shù)locktimeout,該參數(shù)一定不能設(shè)為-1,因?yàn)闀?huì)引起某些應(yīng)用無限期的等待。

 

  可以通過快照來確定數(shù)據(jù)庫發(fā)生的問題是哪一種。

  db2 get snapshot for db on

 

  查看輸出中的下列內(nèi)容:

  Deadlocks detected = 0

 

  Lock Timeouts = 0

  如果發(fā)生了死鎖,可以通過創(chuàng)建死鎖監(jiān)視器來分析產(chǎn)生死鎖的原因,命令如下:

  mkdir /tmp/dlmon

  db2 connect to

  db2 create event monitor dlmon for deadlocks with detail write to file ‘/tmp/dlmon’ replace

 

  db2 set event monitor dlmon state 1

 

  …..等有死鎖發(fā)生后

 

  db2 set event monitor dlmon state 0

 

  db2evmon –d /tmp/dlmon >/tmp/dlmon.out

 

  分析/tmp/dlmon.out文件就可以找到造成死鎖的信息,結(jié)合應(yīng)用就可以找到造成死鎖的原因了。

 

  四、應(yīng)用開發(fā)與數(shù)據(jù)庫有關(guān)的問題

 

  1.與64位實(shí)例數(shù)據(jù)庫問題 軟件開發(fā)網(wǎng)

  目前隨著硬件的升級(jí),64位實(shí)例數(shù)據(jù)庫開始廣泛使用。

  有些人擔(dān)心數(shù)據(jù)庫使用64位以后,對(duì)程序的運(yùn)行很大,因此不愿意使用64位的數(shù)據(jù)庫,實(shí)際上64位數(shù)據(jù)庫對(duì)客戶的應(yīng)用影響非常小,所以建議如果資源充足,盡量使用64位實(shí)例的數(shù)據(jù)庫。

  可以通過創(chuàng)建一個(gè)32位實(shí)例的客戶端,然后通過客戶端來使用64位實(shí)例數(shù)據(jù)庫的方法來將64位的問題完全忽略。
 
如果使用java 存儲(chǔ)過程或自定義函數(shù),64位實(shí)例數(shù)據(jù)庫需要安裝64位的JDK。

 

  2.從DB2 V7移植程序到V8有關(guān)問題

  sqlc的應(yīng)用程序中,數(shù)據(jù)類型long在V8中需要改成sqlint32,否則編譯無法通過。如果確定long類型的數(shù)據(jù)長度與平臺(tái)無關(guān),也可以在編譯時(shí),指定LONGERROR NO選項(xiàng)。

 

  在編譯sqlc程序時(shí)可能會(huì)遇到sql20230的錯(cuò)誤,原因是在V8中不允許在call中使用主機(jī)變量,將執(zhí)行語句改成動(dòng)態(tài)sql后,可以解決該問題。

 

  在執(zhí)行存儲(chǔ)過程時(shí),遇到sql0433的錯(cuò)誤,原因同上,將call 存儲(chǔ)過程的語句改成動(dòng)態(tài)調(diào)用即可。

 

  3.Java程序問題

 

  編寫良好的程序是避免產(chǎn)生問題的關(guān)鍵。對(duì)JAVA程序有如下建議,一定要用數(shù)據(jù)庫的連接池;在執(zhí)行大量的sql語句時(shí)使用prepared statement。

 

  結(jié)束語

  本文描述常見的數(shù)據(jù)庫故障,并給出了簡單有效的解決方案。對(duì)某些技術(shù)問題,如命令的使用沒有詳細(xì)介紹,當(dāng)需要時(shí)可以查閱DB2相關(guān)的文檔。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
如何在?DB2?UDB?中監(jiān)控死鎖1
如何用C語言操作sqlite3,一文搞懂
SQL CREATE DATABASE 語句
接口突然超時(shí)10宗罪。。。
關(guān)于SQL固定服務(wù)器角色和固定數(shù)據(jù)庫角色
嵌入式數(shù)據(jù)庫SQLite3相關(guān)操作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服