[20180829]ora-00054.txt --//以前写的,忘记贴出,现在补上。
--//上午在解决问题时遇到ora-00054错误,导致自己手忙脚乱的,自己心理素质还是存在一些问题. --//就是在问题面前如何保持冷静,实际上开始出现ora-00054错误,是因为应用程序阻塞,一个update语句无法提交. --//解锁后,后面出现错误是我自己输入命令.浪费许多时间. --//自己还是在测试环境模拟错误看看如何解决: 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------- ---------- ---------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production $ oerr ora 54 00054, 00000, "resource busy and acquire with NOWAIT specified or timeout expired" // *Cause: Interested resource is busy. // *Action: Retry if necessary or increase timeout. CREATE PUBLIC DATABASE LINK LOOPBACK CONNECT TO SCOTT IDENTIFIED BY book USING 'localhost:1521/book:DEDICATED'; --//grant EXECUTE ON dbms_lock to scott; CREATE OR REPLACE FUNCTION sleep (seconds IN NUMBER) RETURN NUMBER is BEGIN sys.dbms_lock.sleep(seconds); RETURN seconds; END; / 2.测试1: create table empx as select * from emp; create unique index pk_empx on empx(empno); --//session 1: select empx.*,sleep(2) from empx; --//执行要28秒,有足够的时间切换. --//session 2: SCOTT@book> ALTER INDEX scott.pk_empx INVISIBLE; Index altered. SCOTT@book> ALTER INDEX scott.pk_empx VISIBLE; Index altered. --//可以发现在执行select时,修改索引属性不会出现ora-00054错误. 3.测试2: --//session 1: SCOTT@book> select * from empx where rownum=1 for update ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 --//session 2: SCOTT@book> ALTER INDEX scott.pk_empx INVISIBLE; ALTER INDEX scott.pk_empx INVISIBLE * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired --//可以发现如果事务没有提交或者回滚,不能修改索引属性,否者出现ora-00054错误. 4.测试3: --//session 1: select empx.*,sleep(2) from empx@loopback; --//session 2: SCOTT@book> ALTER INDEX scott.pk_empx INVISIBLE; Index altered. SCOTT@book> ALTER INDEX scott.pk_empx VISIBLE; Index altered. --//可以发现如果是被当作db link访问,修改索引属性不会出现ora-00054错误. SCOTT@book> @ &r/viewlock SID SERIAL# USERNAME OSUSER MACHINE MODULE LOCK_TYPE MODE_HELD MODE_REQUE LOCK_ID1 LOCK_ID2 OWNER OBJECT_TYP OBJECT_NAME BLOCK LOCKWAIT ------ ---------- ---------- ---------- ---------- ------------ --------------- ---------- ---------- ---------- ---------- ------ ---------- -------------------- ----- -------------------- 274 7 SCOTT oracle gxqyydg4 SQL*Plus TX Transaction Exclusive None 65565 1652 PUBLIC SYNONYM /bda290b6_HttpSessio No nBindingLi --//OBJECT_NAME='/bda290b6_HttpSessionBindingLi'. 5.测试4: --//session 1: SCOTT@book> select * from empx where rownum=1 for update ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 --//session 2: SCOTT@book> select * from empx where rownum=1 for update ; --//阻塞挂起!! --//session 3: SCOTT@book> ALTER INDEX scott.pk_empx INVISIBLE; ALTER INDEX scott.pk_empx INVISIBLE * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired --//出现阻塞,一定在该表上有事务出现冲突,修改索引属性一定出现ora-00054错误. 6.如何解决: --//session 3: SCOTT@book> SCOTT@book> @ &r/viewlock SID SERIAL# USERNAME OSUSER MACHINE MODULE LOCK_TYPE MODE_HELD MODE_REQUE LOCK_ID1 LOCK_ID2 OWNER OBJECT_TYP OBJECT_NAME BLOCK LOCKWAIT ------ ---------- ---------- ---------- ---------- ------------ --------------- ---------- ---------- ---------- ---------- ------ ---------- -------------------- ----- -------------------- 41 9 SCOTT oracle gxqyydg4 SQL*Plus TX Transaction None Exclusive 655368 23170 No 0000000084C35DF0 41 9 SCOTT oracle gxqyydg4 SQL*Plus TM DML(TM) Row-X (SX) None 90677 0 SCOTT TABLE EMPX No 0000000084C35DF0 274 7 SCOTT oracle gxqyydg4 SQL*Plus TX Transaction Exclusive None 655368 23170 Yes 274 7 SCOTT oracle gxqyydg4 SQL*Plus TM DML(TM) Row-X (SX) None 90677 0 SCOTT TABLE EMPX No --//理论kill 掉block='YES'的sid,事务能结束事务就ok了. SCOTT@book> alter system kill session '274,7' immediate ; System altered. SCOTT@book> @ &r/viewlock SID SERIAL# USERNAME OSUSER MACHINE MODULE LOCK_TYPE MODE_HELD MODE_REQUE LOCK_ID1 LOCK_ID2 OWNER OBJECT_TYP OBJECT_NAME BLOCK LOCKWAIT ------ ---------- ---------- ---------- ---------- ------------ --------------- ---------- ---------- ---------- ---------- ------ ---------- -------------------- ----- -------------------- 41 9 SCOTT oracle gxqyydg4 SQL*Plus TM DML(TM) Row-X (SX) None 90677 0 SCOTT TABLE EMPX No 41 9 SCOTT oracle gxqyydg4 SQL*Plus TX Transaction Exclusive None 65566 1651 PUBLIC SYNONYM /3a957d9d_HttpSessio No nContext --//奇怪又出现一个OBJECT_NAME='/3a957d9d_HttpSessionContext'.要么等这个事务结束,要么kill会话. SCOTT@book> alter system kill session '41,9' immediate ; System altered. SCOTT@book> ALTER INDEX scott.pk_empx INVISIBLE; Index altered. SCOTT@book> ALTER INDEX scott.pk_empx VISIBLE; Index altered. 7.附上脚本: $ cat viewlock.sql column sid format 99999 column username format a10 column osuser format a10 column machine format a10 column lock_type format a15 column mode_held format a10 column mode_requested format a10 column lock_id1 format a10 column lock_id2 format a10 column owner format a6 column object_type format a10 column object_name format a20 column block format a5 column lockwait format a20 SELECT se.SID, se.serial#,se.username, se.osuser, se.machine,se.module, DECODE (lk.TYPE, 'TX', 'TX Transaction', 'TM', 'TM DML(TM)', 'UL', 'PL/SQL User Lock', lk.TYPE) lock_type, DECODE (lk.lmode, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR (lk.lmode) ) mode_held, DECODE (lk.request, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR (lk.request) ) mode_requested, TO_CHAR (lk.id1) lock_id1, TO_CHAR (lk.id2) lock_id2, ob.owner, ob.object_type, ob.object_name, DECODE (lk.BLOCK, 0, 'No', 1, 'Yes', 2, 'Global') BLOCK, se.lockwait FROM v$lock lk, dba_objects ob, v$session se WHERE lk.TYPE IN ('TX','TM', 'UL') AND lk.SID = se.SID AND lk.id1 = ob.object_id(+) order by 1; --//注意如果rac系统,不能使用上述脚本.[20180829]ora-00054.txt
来源:这里教程网
时间:2026-03-03 12:10:28
作者:
编辑推荐:
- word组织结构图如何设置03-03
- Word下划线如何键入03-03
- [20180829]ora-00054.txt03-03
- [20181026]12c Attribute Clustering特性.txt03-03
- word2003安装教程03-03
- word如何删除页眉页脚横线03-03
- oracle权限03-03
- [20181026]12c增强索引在线DDL操作.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle权限
oracle权限
26-03-03 - word图片文字如何设置
word图片文字如何设置
26-03-03 - linux vdo验证 oracle asm diskgroup sector_size 4096 udev asmlib
- 《魔兽世界:至暗之夜》DLC 上线,微星发布联名限量 RTX 5070 显卡
- 西山居 3D 射击游戏《尘白禁区》发布停机维护公告,开服时间暂未公布
西山居 3D 射击游戏《尘白禁区》发布停机维护公告,开服时间暂未公布
26-03-03 - oraclePL/SQL与存储过程,函数
oraclePL/SQL与存储过程,函数
26-03-03 - oracle角色
oracle角色
26-03-03 - oracle索引,同义词
oracle索引,同义词
26-03-03 - 炮轰微软 Office 功能区界面,LibreOffice 称自家 UI 设计更优秀
- Word如何让表格首行以标题行形式重复出现实现图解教程
Word如何让表格首行以标题行形式重复出现实现图解教程
26-03-03
