首页 » ORACLE [C]系列, ORACLE 9i-23c » 12c wait library cache lock self-deadlock when compile EDITIONABLE Procedure

12c wait library cache lock self-deadlock when compile EDITIONABLE Procedure

前段时间遇到的一个案例,当编译一个invalid procedure时,自已会话堵塞自己等待’library cache lock’. 数据库版本Oracle 12.2, 当然这个procedure里面用到了dblink 嵌套procedure跨了3个数据库,在查看procedures定义时发现附加了”EDITIONABLE”, EDITIONABLE在11.2引入,刚发现在12c开始EDITIONABLE成为了默认, EDITIONABLE是指可以在数据库中为一个对象创建多个版本, 如view, synonym, PL/SQL object , Tim Hall’s notes 介绍过可以参考。这里只是简单记录一下处理方法。

SQL> @s 4878

    SID SQLID_AND_CHILD      STATUS   STATE   EVENT                                          SEQ# SEC_IN_WAIT BLOCKING_SID P1                 P2                 P3                 P1TRANSL
------- -------------------- -------- ------- ---------------------------------------- ---------- ----------- ------------ ------------------ ------------------ ------------------ ------------------------------------------
   4878 dc26hs56954yy 0      ACTIVE   WAITING library cache lock                              958         292 4878         handle address=    lock address=      100*mode+namespace
                                                                                                                           0x000000033CB97E18 0x000000021ED50468 = 65539

SQL> @usid 4878    

USERNAME                SID                 AUDSID OSUSER           MACHINE            PROGRAM              SPID             OPID CPID                     SQL_ID           HASH_VALUE   LASTCALL STATUS   SADDR            PADDR            TADDR            LOGON_TIME
----------------------- -------------- ----------- ---------------- ------------------ -------------------- -------------- ------ ------------------------ --------------- ----------- ---------- -------- ---------------- ---------------- ---------------- -----------------
SYS                      '4878,8981'    4294967295 oracle           anbob2             (TNS V1-V3)          75954             112 75953                    dc26hs56954yy    1284674526         44 ACTIVE   0000000404159630 00000004234D9CC0 000000043D733238 20191231 09:39:36

SQL> oradebug setorapid 112
Oracle pid: 112, Unix process pid: 75954, image: oracle@anbob2 (TNS V1-V3)

SQL> oradebug dump errorstack 1;
Statement processed.

SQL> oradebug short_stack;
ksedsts()+346<-ksdxfstk()+71<-ksdxcb()+912<-sspuser()+217<-__sighandler()<-__poll()+16<-ipcgxp_selectex()+409<-ipclw_wait()+1045<-ksxpwait_ipclw()+3844<-ksxpwait_int()+22103<-ksxpwait()+845<-ksliwat()+10782<-kslwaitctx()+197<-kjusuc()+9058<-ksipgetctxia()+5359<-ksixpgetia()+167<-kqlmLock()+3201<-kqlmClusterLock()+209<-kgllkal()+3424<-kglLock()+1307<-kglget()+290<-kkdllk0()+427<-kqlrde()+1804<-kglrdi()+470<-kglrlo()+1016<-kqlrld()+3812<-kqlrldop()+121<-kqlLoadRemoteObject()+615<-kqllod()+242<-kglobld()+1080<-kglobpn()+2375<-kglpim()+425<-kglpin()+1672<-kglgob()+545<-kgldpo0()+673<-kgldpo()+89<-kgldon()+280<-pkldon()+94<-pkloud()+278<-phnnrl_name_resolve_by_loading()+3939<-phngdl_get_defining_libunit()+155<-phnrpls_resolve_prefix_libscope()+224<-phnrp_resolve_prefix()+138<-phnr_resolve()+224<-ph2o_get_cands()+343<-ph2o_overload_diana()+265<-ph2stm()+12894<-ph2sms()+243<-ph2blo()+539<-ph2obl()+111<-ph2uni()+4595<-ph2dr2()+338<-ph2drv()+304<-phpsem()+62<-phpcmp()+1543<-pcicmp0()+468<-kkxcmp0()+976<-rpiswu2()+627<-kkxcmp()+258<-kkpalt()+2564<-opiexe()+22930<-opiosq0()+4766<-opiodr()+1229<-rpidrus()+201<-skgmstack()+65<-rpidru()+134<-rpiswu2()+627<-rpidrv()+1540<-rpisplu_internal()+471<-kqlvld()+4104<-kglgob()+2737<-kkdlLoadDDL()+3444<-qcdlgbo()+8243<-qcdlgob()+1005<-qcsfgob()+290<-qcsprfro()+531<-qcsprfro_tree()+380<-qcsprfro_tree()+150<-qcspafq()+246<-qcspqbDescendents()+278<-qcspqb()+272<-kkmdrv()+192<-opiSem()+1978<-opiprs()+333<-kksParseChildCursor()+541<-rpiswu2()+627<-kksLoadChild()+5470<-kxsGetRuntimeLock()+2035<-kksfbc()+15083<-kkspsc0()+2130<-kksParseCursor()+123<-opiosq0()+2391<-kpooprx()+404<-kpoal8()+850<-opiodr()+1229<-ttcpip()+1257<-opitsk()+1940<-opiino()+941<-opiodr()+1229<-opidrv()+1021<-sou2o()+145<-opimai_real()+455<-ssthrdmain()+417<-main()+262<-__libc_start_main()+245 

SQL>  oradebug short_stack;
ksedsts()+346<-ksdxfstk()+71<-ksdxcb()+912<-sspuser()+217<-__sighandler()<-__poll()+16<-ipcgxp_selectex()+409<-ipclw_wait()+1045<-ksxpwait_ipclw()+3844<-ksxpwait_int()+22103<-ksxpwait()+845<-ksliwat()+10782<-kslwaitctx()+197<-kjusuc()+9058<-ksipgetctxia()+5359<-ksixpgetia()+167<-kqlmLock()+3201<-kqlmClusterLock()+209<-kgllkal()+3424<-kglLock()+1307<-kglget()+290<-kkdllk0()+427<-kqlrde()+1804<-kglrdi()+470<-kglrlo()+1016<-kqlrld()+3812<-kqlrldop()+121<-kqlLoadRemoteObject()+615<-kqllod()+242<-kglobld()+1080<-kglobpn()+2375<-kglpim()+425<-kglpin()+1672<-kglgob()+545<-kgldpo0()+673<-kgldpo()+89<-kgldon()+280<-pkldon()+94<-pkloud()+278<-phnnrl_name_resolve_by_loading()+3939<-phngdl_get_defining_libunit()+155<-phnrpls_resolve_prefix_libscope()+224<-phnrp_resolve_prefix()+138<-phnr_resolve()+224<-ph2o_get_cands()+343<-ph2o_overload_diana()+265<-ph2stm()+12894<-ph2sms()+243<-ph2blo()+539<-ph2obl()+111<-ph2uni()+4595<-ph2dr2()+338<-ph2drv()+304<-phpsem()+62<-phpcmp()+1543<-pcicmp0()+468<-kkxcmp0()+976<-rpiswu2()+627<-kkxcmp()+258<-kkpalt()+2564<-opiexe()+22930<-opiosq0()+4766<-opiodr()+1229<-rpidrus()+201<-skgmstack()+65<-rpidru()+134<-rpiswu2()+627<-rpidrv()+1540<-rpisplu_internal()+471<-kqlvld()+4104<-kglgob()+2737<-kkdlLoadDDL()+3444<-qcdlgbo()+8243<-qcdlgob()+1005<-qcsfgob()+290<-qcsprfro()+531<-qcsprfro_tree()+380<-qcsprfro_tree()+150<-qcspafq()+246<-qcspqbDescendents()+278<-qcspqb()+272<-kkmdrv()+192<-opiSem()+1978<-opiprs()+333<-kksParseChildCursor()+541<-rpiswu2()+627<-kksLoadChild()+5470<-kxsGetRuntimeLock()+2035<-kksfbc()+15083<-kkspsc0()+2130<-kksParseCursor()+123<-opiosq0()+2391<-kpooprx()+404<-kpoal8()+850<-opiodr()+1229<-ttcpip()+1257<-opitsk()+1940<-opiino()+941<-opiodr()+1229<-opidrv()+1021<-sou2o()+145<-opimai_real()+455<-ssthrdmain()+417<-main()+262<-__libc_start_main()+245

-- dia trace (HM) 中也有记录
*** 2019-12-31T10:04:41.401172+08:00
HM: Session with ID 4878 serial # 8981 (FG) on read/write instance 2 is hung
    and is waiting on 'library cache lock' for 96 seconds.
    Session was previously waiting on 'SQL*Net message from dblink'.
    Final Blocker is Session ID 4878 serial# 8981 on instance 2
     which is waiting on 'library cache lock' for 96 seconds
     p1: 'handle address'=0x33cb97e18, p2: 'lock address'=0x21ed50468, p3: '100*mode+namespace'=0x10003

*** 2019-12-31T10:15:10.176899+08:00
HM: Short Stack of self-deadlocked session ID 4878, OSPID 75954 of hang ID 12
Short stack dump:
ksedsts()+346<-ksdxfstk()+71<-ksdxcb()+912<-sspuser()+217<-__sighandler()<-__poll()+16<-ipcgxp_selectex()+409<-ipclw_wait()+1045<-ksxpwait_ipclw()+3844<-ksxpwait_int()+22103<-ksxpwait()+845<-ksliwat()+10782<-kslwaitctx()+197<-kjusuc()+9058<-ksipgetctxia()+5359<-ksixpgetia()+167<-kqlmLock()+3201<-kqlmClusterLock()+209<-kgllkal()+3424<-kglLock()+1307<-kglget()+290<-kkdllk0()+427<-kqlrde()+1804<-kglrdi()+470<-kglrlo()+1016<-kqlrld()+3812<-kqlrldop()+121<-kqlLoadRemoteObject()+615<-kqllod()+242<-kglobld()+1080<-kglobpn()+2375<-kglpim()+425<-kglpin()+1672<-kglgob()+545<-kgldpo0()+673<-kgldpo()+89<-kgldon()+280<-pkldon()+94<-pkloud()+278<-phnnrl_name_resolve_by_loading()+3939<-phngdl_get_defining_libunit()+155<-phnrpls_resolve_prefix_libscope()+224<-phnrp_resolve_prefix()+138<-phnr_resolve()+224<-ph2o_get_cands()+343<-ph2o_overload_diana()+265<-ph2stm()+12894<-ph2sms()+243<-ph2blo()+539<-ph2obl()+111<-ph2uni()+4595<-ph2dr2()+338<-ph2drv()+304<-phpsem()+62<-phpcmp()+1543<-pcicmp0()+468<-kkxcmp0()+976<-rpiswu2()+627<-kkxcmp()+258<-kkpalt()+2564<-opiexe()+22930<-opiosq0()+4766<-opiodr()+1229<-rpidrus()+201<-skgmstack()+65<-rpidru()+134<-rpiswu2()+627<-rpidrv()+1540<-rpisplu_internal()+471<-kqlvld()+4104<-kglgob()+2737<-kkdlLoadDDL()+3444<-qcdlgbo()+8243<-qcdlgob()+1005<-qcsfgob()+290<-qcsprfro()+531<-qcsprfro_tree()+380<-qcsprfro_tree()+150<-qcspafq()+246<-qcspqbDescendents()+278<-qcspqb()+272<-kkmdrv()+192<-opiSem()+1978<-opiprs()+333<-kksParseChildCursor()+541<-rpiswu2()+627<-kksLoadChild()+5470<-kxsGetRuntimeLock()+2035<-kksfbc()+15083<-kkspsc0()+2130<-kksParseCursor()+123<-opiosq0()+2391<-kpooprx()+404<-kpoal8()+850<-opiodr()+1229<-ttcpip()+1257<-opitsk()+1940<-opiino()+941<-opiodr()+1229<-opidrv()+1021<-sou2o()+145<-opimai_real()+455<-ssthrdmain()+417<-main()+262<-__libc_start_main()+245

-- 函数调用 --
ipcgxp_selectex()+409                          inter process calls  [partial hit for: ipc ] 
ipclw_wait()+1045                              inter process calls lightweight (exafusion)  [partial hit for: ipclw ] 
ksxpwait_ipclw()+3844                          kernel service  cross instance cross instance ipc  [partial hit for: ksxp ] 
ksxpwait_int()+22103                           kernel service  cross instance cross instance ipc  [partial hit for: ksxp ] 
ksxpwait()+845                                 kernel service  cross instance cross instance ipc  [partial hit for: ksxp ] 
ksliwat()+10782                                kernel service  latching and post-wait inner wait function; setup a wait that times out 
kslwaitctx()+197                               kernel service  latching and post-wait wait for n centi-seconds or until posted wait context; wait until timeout 
kjusuc()+9058                                  kernel lock management global enqueue service synchronous open and convert a lock 
ksipgetctxia()+5359                            kernel service  instance locking get a group lock (synchronous interface to DLM for lock get)  [partial hit for: ksipget ] 
ksixpgetia()+167                               kernel service  instance locking  [partial hit for: ksi ] 
kqlmLock()+3201                                kernel query library cache multi-instance manager  [partial hit for: kqlm ] 
kqlmClusterLock()+209                          kernel query library cache multi-instance manager  [partial hit for: kqlm ] 
kgllkal()+3424                                 kernel generic library cache management library cache lock allocate 
kglLock()+1307                                 kernel generic library cache management library cache lock 
kglget()+290                                   kernel generic library cache management get a lock on an object 
kkdllk0()+427                                  kernel compile dictionary lookup lock an object  [partial hit for: kkdllk ] 
kqlrde()+1804                                  kernel query library cache remote  [partial hit for: kqlr ] 
kglrdi()+470                                   kernel generic library cache management  [partial hit for: kgl ] 
kglrlo()+1016                                  kernel generic library cache management  [partial hit for: kgl ] 
kqlrld()+3812                                  kernel query library cache remote load a remote library object 
kqlrldop()+121                                 kernel query library cache remote load a remote library object  [partial hit for: kqlrld ] 
kqlLoadRemoteObject()+615                      kernel query library cache  [partial hit for: kql ] 
kqllod()+242                                   kernel query library cache database object load 
kglobld()+1080                                 kernel generic library cache management object load 
kglobpn()+2375                                 kernel generic library cache management object pin heaps and load data pieces 
kglpim()+425                                   kernel generic library cache management pin and load more heaps 
kglpin()+1672                                  kernel generic library cache management pin heaps and load data pieces of an object 
kglgob()+545                                   kernel generic library cache management get an objected locked and pinned 
kgldpo0()+673                                  kernel generic library cache management depend on an object  [partial hit for: kgldpo ] 
kgldpo()+89                                    kernel generic library cache management depend on an object 
kgldon()+280                                   kernel generic library cache management depend on an object 
pkldon()+94                                    PLSQL KG interface  [partial hit for: pk ] 
pkloud()+278                                   PLSQL KG interface  [partial hit for: pk ] 
phnnrl_name_resolve_by_loading()+3939          PLSQL semantics  [partial hit for: phn ] 
phngdl_get_defining_libunit()+155              PLSQL semantics  [partial hit for: phn ] 
phnrpls_resolve_prefix_libscope()+224          PLSQL semantics  [partial hit for: phn ] 
phnrp_resolve_prefix()+138                     PLSQL semantics  [partial hit for: phn ] 
phnr_resolve()+224                             PLSQL semantics  [partial hit for: phn ] 
ph2o_get_cands()+343                           PLSQL phase 2 (semantic analyzer)  [partial hit for: ph2 ] 
ph2o_overload_diana()+265                      PLSQL phase 2 (semantic analyzer)  [partial hit for: ph2 ] 
ph2stm()+12894                                 PLSQL phase 2 (semantic analyzer) statement(?) 
ph2sms()+243                                   PLSQL phase 2 (semantic analyzer) process statements 
ph2blo()+539                                   PLSQL phase 2 (semantic analyzer) idl node D_BLOCK, D_DECL 

-- ctrl +c --
SQL> alter procedure  xxx.ap_rec_statxxxx compile;
^Calter procedure  xxx.ap_rec_statxxxx compile
*
ERROR at line 1:
ORA-04052: error occurred when looking up remote object xxx.AP_UPDATE_xxxx@db1xx
ORA-01013: user requested cancel of current operation


Solution:
开始以为是dblink问题,尝试半天最后发现drop procedure,重新创建就解决了。 仅记录未发现已知BUG.

打赏

,

对不起,这篇文章暂时关闭评论。