国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

解決oracle死鎖,生產(chǎn)問題,ORA-00060: deadlock detected while waiting for resource,

這篇具有很好參考價值的文章主要介紹了解決oracle死鎖,生產(chǎn)問題,ORA-00060: deadlock detected while waiting for resource,。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

項目場景:

問題描述

原因分析:

解決方案:

其他解決方案:

項目場景:

oracle 數(shù)據(jù)庫在做大量的批量更新同一張表數(shù)據(jù)。


問題描述

早上來公司去生產(chǎn)環(huán)境查grelog日志,發(fā)現(xiàn)ERROR日志,點進去看后報如下錯誤:

ORA-00060: deadlock detected while waiting for resource

原因分析:

從錯誤的中一看就知道oracle 數(shù)據(jù)庫發(fā)生了死鎖。去生產(chǎn)的log日志查看,發(fā)現(xiàn)同一時間點左右,還有一個批量更新同一條數(shù)據(jù)的慢sql 日志。這個慢sql 的更新和這個死鎖的sql 更新互斥了。導(dǎo)致了死鎖。 死鎖的異常拋出后,這個慢sql 就執(zhí)行成功了。

在本地也寫單元測試實例,跑出了同樣的結(jié)果。猜測是因為更新主鍵SequenceNo更新時亂序?qū)е碌乃梨i。


解決方案:

在執(zhí)行批量更新前,先對主鍵序列號進行排序,然后在進行批量更新。

例如:A線程更新的主鍵是1,2,3? B線程更新的主鍵是3,2,1 當(dāng)批量更新時就可能會死鎖,但是排序后,A線程更新的主鍵是1,2,3?B線程更新的主鍵是1,2,3 這是就不會產(chǎn)生死鎖,測試過。這種情況多線程,跑了兩天也沒發(fā)生過死鎖。

代碼如下:

objects.stream().sorted((a1, a2) -> a1.getSequenceNo().compareTo(a2.getSequenceNo()));
        int[] execute = dsl.batchUpdate(objects.stream().map(i -> {
            ARecord r = new ARecord();
            r.setSequenceNo(i.getSequenceNo());
            r.setTime(i.getTime());
            r.setResult(i.getResult());
            r.changed(table.SEQUENCE_NO, false);
            return r;
        }).collect(Collectors.toList())).execute();
        return Integer.parseInt(String.valueOf(Arrays.stream(execute).count()));

其他解決方案:

當(dāng)時討論的還有其他解決方案,如下:

1 可以更新前加鎖,避免導(dǎo)致死鎖

2 可以把批量更新成單條更新操作

但是通過分析發(fā)票,這些方案都是會影響程序的性能,導(dǎo)致性能變慢,還有對代碼的修改比較大,有很大的不確定性和風(fēng)險。綜上綜合考慮選擇批量更新前排序解決次問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-585148.html

到了這里,關(guān)于解決oracle死鎖,生產(chǎn)問題,ORA-00060: deadlock detected while waiting for resource,的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Oracle Merge Into ORA-00001: unique constaint violated問題

    最近使用Datax同步進行定時數(shù)據(jù)同步,并在同步完之后進行回調(diào)sql進行統(tǒng)計操作。對應(yīng)的ORACLE表結(jié)構(gòu)如下: 回調(diào)對應(yīng)的SQL如下: 回調(diào)SQL執(zhí)行過程中,觸發(fā)了? ORA-00001: unique constaint violated 的錯誤,其中USING部分的數(shù)據(jù)沒有重復(fù)的,并且表中也沒有和USING表中重復(fù)的,但是這里面

    2024年02月09日
    瀏覽(24)
  • Mysql和Oracle數(shù)據(jù)庫死鎖查看以及解決

    Mysql和Oracle數(shù)據(jù)庫死鎖查看以及解決

    一、Mysql數(shù)據(jù)庫死鎖排查 SQL : SQL: SQL: 示例: 備注:通過查看事務(wù)的trx_started(開始時間)來判斷該事務(wù)的阻塞時間。 SQL ?: 備注:線程ID指的是 1.1.3步驟中查詢出來的 trx_mysql_thread_id。 SQL : 示例 : 字段解析 : SQL : 示例: SQL : 備注:多個session用逗號隔開。 View Code ? 造

    2024年01月20日
    瀏覽(19)
  • Oracle數(shù)據(jù)庫ORA-01507: database not mounted解決方法

    連接上安裝好的oracle后,執(zhí)行SQL報ORA-01507: database not mounted錯誤,根據(jù)百度ORA-01507: database not mounted的解決辦法,問題解決了,下面詳細(xì)介紹一下這個方法: 執(zhí)行sql命令: shutdown ,并退出sqlplus /oracle/SHP/11204/是本例的oracle的家目錄,要根據(jù)自身安裝目錄做修改 語句為 fuser -u l

    2024年02月16日
    瀏覽(18)
  • oracle pdb創(chuàng)建directory報ORA-65254,報錯分析和解決

    oracle 19c在創(chuàng)建PDB過程中如果使用了帶 PATH_PREFIX 的參數(shù), 意味著在創(chuàng)建DIRECTORY目錄時需要指定相對路徑,而不能指定其它絕對路徑。 今天遇到了報錯,路徑及權(quán)限無誤,卻依然報錯。 create or replace directory expdp as \\\'/tmp\\\'; create or replace directory expdp as \\\'/tmp\\\' * ERROR at line 1: ORA-65254:

    2024年02月08日
    瀏覽(22)
  • 分析ORACLE批量更新中的ORA-00911錯誤:MyBatis <foreach> 場景與解決方案

    ????????在日常的Java開發(fā)過程中,尤其是當(dāng)我們在使用MyBatis作為持久層框架進行Oracle數(shù)據(jù)庫操作時,批量更新數(shù)據(jù)是非常常見的需求。然而,在利用MyBatis的 foreach 標(biāo)簽遍歷集合參數(shù)動態(tài)構(gòu)造SQL更新語句時,有時會遭遇ORA-00911: invalid character錯誤。這種錯誤表明在提交給O

    2024年04月23日
    瀏覽(27)
  • Oracle ORA-01033: ORACLE initialization or shutdown in progress(誤刪了DBF數(shù)據(jù)庫文件導(dǎo)致)解決方法

    Oracle ORA-01033: ORACLE initialization or shutdown in progress(誤刪了DBF數(shù)據(jù)庫文件導(dǎo)致)解決方法

    先聲明一下前期的一些手欠欠兒的操作導(dǎo)致oracl登錄不進去了,起先是清理磁盤空間的時候誤刪除了orcle DBF數(shù)據(jù)文件后無法進入系統(tǒng),plsql登錄報錯如下: 一般情況下,刪除表空間的正確方法是: DROP TABLESPACE BDCDJ INCLUDING CONTENTS AND DATAFILES; 如果沒有通過以上命令刪除而直接刪

    2024年02月02日
    瀏覽(101)
  • 【oracle】【解決方案】ORA-12514:TNS: 監(jiān)聽程序當(dāng)前無法識別連接描述符中請求的服務(wù)

    Oracle11g,報錯代碼為:ORA-12514:監(jiān)聽程序當(dāng)前無法識別連接描述符中請求的服務(wù)。 出現(xiàn)該問題一般有兩種情況。 第一種是在你安裝完之后未配置監(jiān)聽(在此我暫時忘記安裝完之后有沒有配置監(jiān)聽); 第二種是之前配置了監(jiān)聽但是系統(tǒng)未寫入到listener.ora文件中( 在此我暫未搞明

    2024年02月01日
    瀏覽(18)
  • 重啟Linux服務(wù)器 Oracle 數(shù)據(jù)庫步驟 重啟數(shù)據(jù)庫startup 報ORA-01031 insufficient privileges錯誤解決

    在一次重啟數(shù)據(jù)庫的時候,沒有正確按照步驟重啟數(shù)據(jù)庫,導(dǎo)致服務(wù)器重啟。 正確步驟及詳解: (1) su - oracle 打開Xshell,連接到數(shù)據(jù)庫所在的linux機器。若用戶為root,請輸入命令“su - oracle”并回車,若要密碼,輸入密碼后并回車,就切換到了oracle用戶下。 檢測方法:“#”變

    2024年02月15日
    瀏覽(165)
  • 解決ORA-01400報錯過程中遇到的問題

    報錯信息:ORA-01400: cannot insert NULL into (\\\"OWNER\\\".\\\"TABLE_NAME\\\".\\\"COLUMN_NAME\\\") 問題原因:對不允許為NULL的字段插入了NULL。 解決辦法:要么賦給該字段一個值使它不為空,要么執(zhí)行 alter table \\\"TABLE_NAME\\\" modify \\\"COLUMN_NAME\\\" NULL; 使該字段允許為空。但有時候執(zhí)行上面語句會返回報錯: ORA-01451

    2024年02月12日
    瀏覽(25)
  • oracle查看死鎖以及處理死鎖

    1. 查看死鎖 2. 處理死鎖 將上面查詢出來的sid以及serial放入到下面的sql中進行替換就可以了 示例:alter system kill session \\\'4404,63693\\\';

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包