亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java程序中解決數據庫超時與死鎖

2019-11-17 04:17:23
字體:
來源:轉載
供稿:網友

  簡介

  每個使用關系型數據庫的程序都可能遇到數據死鎖或不可用的情況,而這些情況需要在代碼中編程來解決;本文主要介紹與數據庫事務死鎖等情況相關的重試邏輯概念,此外,還會探討如何避免死鎖等問題,文章以DB2(版本9)與java為例進行講解。

  什么是數據庫鎖定與死鎖

  鎖定(Locking)發生在當一個事務獲得對某一資源的“鎖”時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性;在設計與數據庫交互的程序時,必須處理鎖與資源不可用的情況。鎖定是個比較復雜的概念,仔細說起來可能又需要一大篇,所以在本文中,只把鎖定看作是一個臨時事件,這意味著如果一個資源被鎖定,它總會在以后某個時間被釋放。而死鎖發生在當多個進程訪問同一數據庫時,其中每個進程擁有的鎖都是其他進程所需的,由此造成每個進程都無法繼續下去。

  如何避免鎖

  我們可利用事務型數據庫中的隔離級別機制來避免鎖的創建,正確地使用隔離級別可使程序處理更多的并發事件(如允許多個用戶訪問數據),還能預防像丟失修改(Lost Update)、讀“臟”數據(Dirty Read)、不可重復讀(Nonrepeatable Read)及“虛”(Phantom)等問題。

  隔離級別 問題現象

     

  表1:DB2的隔離級別與其對應的問題現象

  在只讀模式中,就可以防止鎖定發生,而不用那些未提交只讀隔離級別的含糊語句。一條SQL語句當使用了下列命令之一時,就應該考慮只讀模式了:

  1、JOIN

  2、SELECT DISTINCT

  3、GROUP BY

  4、ORDER BY

  5、UNION

  6、UNION ALL

  7、SELECT

  8、FOR FETCH ONLY (FOR READ ONLY)

  9、SELECT FROM

  如果包含上述任一命令,可以說你的SQL語句有歧義性,因此,鎖可能就是造成其中資源問題的源頭。

  另外,以下是一些可降低鎖數目的建議:

  1、 將CURRENTDATA設為NO。這條命令告訴DB2模糊光標為只讀。

  2、 在適當的時候,盡可能使用User Uncommitted Read(用戶未提交的讀)。

  3、 盡可能關閉所有光標。

  4、 有一個正確的提交策略。確保程序不再使用資源時就立即釋放它。

  如何處理死鎖與超時

  在程序中使用重試邏輯,可處理以下三種SQL錯誤代碼:

  1、 904:返回這個代碼表示一條SQL語句是因為已達到資源限度而結束的。程序中可提交或回滾更改,并執行重試邏輯。

  2、 911:程序收到這個SQL代碼,表示因為沒有為鎖列表分配足夠的內存,現在已達到數據庫的最大鎖數目。

  3、 912:程序收到這個SQL代碼,表示死鎖或超時,依照904中的方法來解決。

  以下是一段Java代碼,其捕捉返回的-911、-912、-904代碼,并進行重試:

         for (int i = 0; i < MAX_RETRY_ATTEMPTS; i++) {
  //以下代碼模擬一次事務

  try {

  stmt = conn.createStatement();

  System.out.

  stmt.executeUpdate("UPDATE 1..."); //SQL語句1

  stmt.executeUpdate("UPDATE 2..."); // SQL語句2

  stmt.executeUpdate("UPDATE 3..."); // SQL語句3

  stmt.executeUpdate("UPDATE 3..."); // SQL語句4

  //提交所有更改

  conn.commit();

  System.out.println("事務已完成。");

  //確保只運行了一次。

  i = MAX_RETRY_ATTEMPTS;

  } catch (SQLException e) {

  /**

  *如果返回的SQL代碼為-911,回滾會自動完成,程序回滾至前一次的提交狀態。

  *程序將進行重試。

  */

  if (-911 == e.getErrorCode()) {

  //等待RETRY_WAIT_TIME

  try {

  Thread.sleep(RETRY_WAIT_TIME);

  } catch (InterruptedException e1) {

  //即使休眠被打斷,但仍要重試。

  System.out.println("休眠被打斷。");

  }

  }

  /**

  *如果返回的SQL代碼為-912,表示死鎖及超時。

  *如果是-904,代表已達到資源限度。

  *在這種情況下,程序將回滾并進行重試。

  */

  else if (-912 == e.getErrorCode() || -904 == e.getErrorCode()) {

  try {

  //需要回滾

  conn.rollback();

  } catch (SQLException e1) {

  System.out.println("無法回滾。"; color:black'> + e);

  }

  try {

  //等待RETRY_WAIT_TIME

  Thread.sleep(RETRY_WAIT_TIME);

  } catch (InterruptedException e1) {

  //即使休眠被打斷,但仍要重試。

  System.out.println("休眠被打斷。" + e1);

  }

  } else {

  //如果是其他錯誤,就不進行重試。

  i = MAX_RETRY_ATTEMPTS;

  System.out.println("有錯誤發生,錯誤代碼:"

  + e.getErrorCode() + " SQL狀態:"

  + e.getSQLState() + "其他信息:" + e.getMessage());

  }
 
  從上面也可看到,程序對死鎖、超時、最大鎖數目將會進行MAX_RETRY_ATTEMPTS次重試;其次,當“最大鎖數目”的情況發生時 (-911),程序不必手工進行回滾,因為此時的回滾是自動完成的;最后,無論何時返回-911、-904、-912代碼,程序應在下次重試前等待 RETRY_WAIT_TIME一段時間。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产精品视频| 国产精品 欧美在线| 亚洲国产成人精品电影| 欧美成人激情视频| 欧美日韩中文在线观看| 最近2019年好看中文字幕视频| 国产日韩欧美日韩| 久久视频免费在线播放| 在线免费观看羞羞视频一区二区| 91色视频在线观看| 成人免费观看网址| 国产91精品久久久久久| www国产精品视频| 国产精品久久久久久久久久久久| 国产精品久久91| 久久精品国产69国产精品亚洲| 日韩欧美在线视频日韩欧美在线视频| 久久久久久国产精品美女| 91在线视频精品| 亚洲人高潮女人毛茸茸| 欧美黑人极品猛少妇色xxxxx| 日韩精品中文字幕在线观看| 欧美日韩国产限制| 精品性高朝久久久久久久| 91在线视频一区| 91亚洲国产成人精品性色| 在线成人激情黄色| 久久99精品久久久久久青青91| 夜夜躁日日躁狠狠久久88av| 日韩一区二区av| 日韩成人中文电影| 黑丝美女久久久| 国产日韩欧美电影在线观看| 粉嫩老牛aⅴ一区二区三区| 亚洲激情视频网| 久久久免费观看| 中文字幕亚洲二区| 成人午夜两性视频| 久久艹在线视频| 欧美一级黑人aaaaaaa做受| 欧美日韩视频在线| 国产欧美精品在线| 亚洲香蕉成人av网站在线观看| 亚洲美女久久久| 国产69精品久久久久9999| 久久亚洲精品小早川怜子66| 日韩亚洲在线观看| 美女福利视频一区| 欧美猛男性生活免费| 久久精品亚洲94久久精品| 日韩欧美一区二区在线| 国产精品久久久久久亚洲调教| 欧美性猛交xxxx| 国产男女猛烈无遮挡91| 中文字幕在线国产精品| 国产精品视频区| 在线电影欧美日韩一区二区私密| 中文字幕亚洲一区二区三区| 韩国美女主播一区| 亚洲综合大片69999| 国语自产精品视频在线看抢先版图片| 国产日本欧美视频| 亚洲电影免费观看高清完整版在线| 日韩亚洲欧美中文在线| 亚洲网站视频福利| 日韩毛片在线观看| 亚洲精品美女免费| 91国内免费在线视频| 911国产网站尤物在线观看| 国产精品视频男人的天堂| 国产精品久久久久久超碰| 97色在线观看免费视频| 97婷婷大伊香蕉精品视频| 久热精品在线视频| 久久影视电视剧免费网站| 国产欧美一区二区三区在线看| 日韩激情视频在线播放| 亚洲精品视频二区| 亚洲v日韩v综合v精品v| 亚洲一区亚洲二区亚洲三区| 黑人欧美xxxx| 91po在线观看91精品国产性色| 九九精品在线播放| 国产视频在线一区二区| 国产精品美女999| 国产精品网红福利| 久热精品视频在线| 亚洲一区二区三区sesese| 在线亚洲男人天堂| 国产一区二区三区在线| 精品自在线视频| 91精品美女在线| 狠狠爱在线视频一区| 懂色av中文一区二区三区天美| 2019最新中文字幕| 国产精品专区h在线观看| 日韩激情视频在线播放| 国产网站欧美日韩免费精品在线观看| 91深夜福利视频| 精品一区二区三区三区| 日韩高清欧美高清| 国产成人精彩在线视频九色| 久久久在线免费观看| 欧美日韩国产999| 欧美日韩亚洲成人| 亚洲第一偷拍网| 亚洲激情中文字幕| 国产成人啪精品视频免费网| 欧美日韩精品在线| 97免费中文视频在线观看| 欧美精品在线播放| 欧美成人全部免费| 色噜噜亚洲精品中文字幕| 欧美性猛交丰臀xxxxx网站| 亚洲福利精品在线| 亚洲国产精品久久精品怡红院| 久久久久久综合网天天| 国产精品久久久久久久久久久久| 91久久精品一区| 国产免费久久av| 亚洲级视频在线观看免费1级| 国产aⅴ夜夜欢一区二区三区| 中文字幕日韩欧美在线视频| 97人人做人人爱| 国产午夜精品美女视频明星a级| 亚洲精品www久久久| 91精品视频在线| 欧美自拍视频在线| 97精品免费视频| 精品无人国产偷自产在线| 51午夜精品视频| 欧美日韩高清在线观看| 日韩精品久久久久久久玫瑰园| 久久视频在线观看免费| 北条麻妃一区二区在线观看| 日韩欧美一区二区三区| 日韩视频免费观看| 久久精品视频网站| 日韩电影免费在线观看中文字幕| 日韩在线免费视频| 日韩有码在线视频| 亚洲人成在线观| 91九色国产在线| 中文字幕日韩欧美| 亚洲高清福利视频| 亚洲成人激情小说| 日本sm极度另类视频| 日韩av快播网址| 国产香蕉97碰碰久久人人| 成人精品一区二区三区电影免费| 亚洲一区二区三区久久| 亚洲精品永久免费| 国产精品678| 亚洲国产精品成人va在线观看| 国产在线视频2019最新视频| 国产精品流白浆视频| 日韩免费观看高清| 91精品久久久久久久久久久久久久| 国产精品日韩欧美大师| 欧美洲成人男女午夜视频| 亚洲高清色综合| 国产欧美精品xxxx另类| 国产日韩精品综合网站| 欧美激情免费观看|