欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

sql中怎么使用TRY/CATCH語句避免死鎖

這篇文章主要為大家展示了“sql中怎么使用TRY/CATCH語句避免死鎖”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“sql中怎么使用TRY/CATCH語句避免死鎖”這篇文章吧。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比江城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式江城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋江城地區(qū)。費(fèi)用合理售后完善,10余年實體公司更值得信賴。

死鎖是正?,F(xiàn)象不可避免。發(fā)生死鎖會犧牲一個進(jìn)程并回滾事務(wù),SQL不會自己重試,需要用TRY/CATCH和WAITFOR實現(xiàn)重試。具體方法如下
如何使用 TRY/CATCH 語句避免死鎖
現(xiàn)在,讓我們來使用 TRY/CATCH 語句修改代碼正文。(對于本示例,需要以 SQL Server 2005 版本運(yùn)行代碼。)使用 TRY/CATCH 時,操作代碼和錯誤處理代碼是分開的。您應(yīng)該將執(zhí)行一個操作的代碼放在 TRY 語句塊中,將錯誤處理代碼放在 CATCH 語句塊中。如果 TRY 語句塊中的代碼執(zhí)行失敗,代碼執(zhí)行將跳到 CATCH 語句塊。(除了那些防礙整個批處理運(yùn)行的錯誤(如,丟失對象),該方法幾乎適用于所有的錯誤。)

以下示例使用 TRY/CATCH 語句對前面使用的代碼進(jìn)行了改寫。代碼標(biāo)題相同,但是代碼正文不同:

BEGIN TRANSACTION
BEGIN TRY
  INSERT Authors VALUES
  (@au_id, @au_lname, '', '', '', '', '', '11111', 0)
  WAITFOR DELAY '00:00:05'
  SELECT COUNT(*)  FROM Authors
  COMMIT
END TRY
BEGIN CATCH
  SELECT ERROR_NUMBER() AS ErrorNumber
  ROLLBACK
END CATCH;
SELECT @@TRANCOUNT AS '@@Trancount'
現(xiàn)在,在連接到 SQL Server 2005 的并列窗口中運(yùn)行這些代碼,在此之前您需要確認(rèn)已經(jīng)刪除了 authors 表格中任何可能阻止插入操作的數(shù)據(jù);或者,您可以使用前置 DELETE 語句。

兩個窗口返回的 @@TRANCOUNT 級別都為 0,這表明仍然發(fā)生了死鎖,但 TRY/CATCH 語句捕獲了這次發(fā)生的死鎖。死鎖犧牲品的批處理沒有再次中止,可在它的輸出結(jié)果中看到錯誤:

ErrorNumber
-----------
1205
@@Trancount
-----------
0
您應(yīng)該已經(jīng)發(fā)現(xiàn) TRY/CATCH 語句具有的威力了。因為死鎖錯誤能夠為 CATCH 語句塊所捕獲,所以批處理將不再中止,T-SQL 代碼也能繼續(xù)執(zhí)行。對于死鎖犧牲品而言,死鎖錯誤 1205 將代碼放入 CATCH 語句塊 — 在這里您可以使用新的錯誤處理函數(shù)瀏覽死鎖錯誤。前置代碼僅使用 ERROR_NUMBER() 函數(shù)取代 @@ERROR 變量,您也可以使用 ERROR_MESSAGE()、 ERROR_PROCEDURE()、ERROR_SEVERITY() 和 ERROR_STATE()。這些函數(shù)的功能一目了然,它們提供的功能比我們以往使用的更多。

請注意,這個前置 CATCH 語句塊包含一個 ROLLBACK。這樣做的原因是,即使捕獲了死鎖錯誤,事務(wù)也不會回滾。事務(wù)仍然要失敗,但是,現(xiàn)在您有責(zé)任在 TRY/CATCH 語句中回滾事務(wù)。那么,區(qū)別在哪里?盡管您不能使事務(wù)繼續(xù)進(jìn)行,但是您能夠重試事務(wù)!

在 TRY/CATCH 語句中進(jìn)行重試

在 SQL Server 2000 的 T-SQL 中,錯誤 1205 令人沮喪之處是它提供的建議:“Rerun the transaction.”問題是,至少在 SQL Server 2000 的 T-SQL 中,您不能做到這一點(diǎn)。但是,由于 SQL Server 2005 的 TRY/CATCH 為我們提供了捕獲死鎖錯誤的方法,現(xiàn)在,重試事務(wù)是可能實現(xiàn)的。

以下代碼正文說明了一種執(zhí)行重試操作的方法。這段代碼仍然使用與前面相同的標(biāo)題:

DECLARE @Tries tinyint
SET @Tries = 1
WHILE @Tries <= 3
BEGIN
  BEGIN TRANSACTION
  BEGIN TRY
    INSERT Authors VALUES
      (@au_id, @au_lname, '', '', '', '', '', '11111', 0)
    WAITFOR DELAY '00:00:05'
    SELECT * FROM authors WHERE au_lname LIKE 'Test%'
    COMMIT
    BREAK
  END TRY
  BEGIN CATCH
    SELECT ERROR_NUMBER() AS ErrorNumber
    ROLLBACK
    SET @Tries = @Tries + 1
    CONTINUE
  END CATCH;
END
這段代碼的功能是通過一個 WHILE 循環(huán)添加一個重試操作。我將重試次數(shù)設(shè)置為 3,重試次數(shù)是可以配置的。至少我們現(xiàn)在有了一種在 T-SQL 內(nèi)重試一個死鎖犧牲品代碼的方法 — 這是我們過去一直無法做到的。

但是,需要注意整個事務(wù)是在 WHILE 循環(huán)內(nèi)進(jìn)行的 — 而不是在循環(huán)外部。因此執(zhí)行循環(huán)時,事務(wù)不僅在每個循環(huán)體內(nèi)部開始,而且也在其中結(jié)束 — 不是 TRY 語句塊執(zhí)行完畢,返回一個 COMMIT,就是 CATCH 語句塊執(zhí)行,返回一個 ROLLBACK。如果 TRY 成功,TRY 語句塊將以一個 BREAK 語句結(jié)束,退出 WHILE 循環(huán)。否則,CATCH 語句塊將重試計數(shù)器加 1,以一個 CONTINUE 語句結(jié)束本次循環(huán),重新執(zhí)行下次 WHILE 循環(huán)。事實上,您有實現(xiàn)重試事務(wù)的代碼 — 就像錯誤 1205 告訴我們做的那樣。但現(xiàn)在,重試操作完全在 T-SQL 內(nèi)部完成。

sql Server 2005 也提供幫助解決死鎖問題的其他方法,例如 SNAPSHOT ISOLATION 級別和用于 READ COMMITTED 的新選項(稱為 READ COMMITTED SNAPSHOT)。然而,這一事實 — 現(xiàn)在,通過 SQL Server 2005,您能夠?qū)κ聞?wù)進(jìn)行編碼并捕獲死鎖錯誤(并重試它們) — 已經(jīng)意味著您擁有一個可任意支配、功能更加強(qiáng)大的工具。 

以上是“sql中怎么使用TRY/CATCH語句避免死鎖”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章題目:sql中怎么使用TRY/CATCH語句避免死鎖
URL地址:http://aaarwkj.com/article14/igggge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、建站公司、云服務(wù)器企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
一区二区日韩视频九一蜜桃| 另类激情综合在线观看| 粉嫩av蜜臀一区二区三区| 亚洲欧洲久久激情久av| 日本 影院 一区 二区| 把熟睡的少妇弄到高潮| 久久精品色一情一乱一伦| 国产成人+亚洲欧洲综合| 亚洲乱人伦一区二区三区| 日韩精品在线观看一二三区| 亚洲男人av天堂午夜在| 男女性生活视频成年人观看| 日日嗨av特一级黄淫片| 亚洲成熟中老妇女视频| 欧美在线观看黄片视频| 野花日本免费高清完整| 国产强烈高潮粗暴对白| 国产精品亚洲欧美中字| 欧美一区二区三区蜜桃| 尤物视频在线观看官网| 哪里可以看黄色片日韩| 夫妻性生活短是什么原因| 亚洲黄色av电影在线| 毛片成人18毛片免费看| 亚洲青青草原自拍偷拍| 国产精品久久久毛片av| 91麻豆国产福利在线| 久久精品国产亚洲av超一| 亚洲熟妇av一区二区三区| 男人喜欢看的免费视频| 欧美一区二区大香蕉视频| 丁香六月婷婷激情啪啪综合| 久久久精品国产亚洲av色哟哟| 欧美成人免费做真爱高潮| 人妻天天爽夜夜爽欧美色| 未满十八禁止免费视频| 伊人久久亚洲精品综合| 国产精品又大又黑又长又粗| 日韩黄色一级片免费看| 亚洲成人永久免费精品| 亚洲人的av在线播放|