【原創】ORA-00054問題的解決(plan_table在autotrace過程中會被鎖定)
實驗環境:WinXP SP2
資料庫版本:10.2.0.1
今天在實驗過程中發現autotrace是會鎖定plan_table表的,具體實驗步驟如下:
sys@ TEST>set autotrace on trace explain
生成執行計劃
sys@TEST>select * from dual;
Execution Plan
----------------------------------------------------------
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
在當前會話下刪除plan_table是沒有問題的
sys@TEST>drop table plan_table;
Table dropped.
但是這時候在其他會話刪除plan_table的話,就會報ORA-00054錯誤
sys@TEST>drop table plan_table;
drop table plan_table
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
通過查詢v$locked_object表可以看出,在autotrace生成執行計劃後會鎖定plan_table表
sys@TEST>col object_name for a20
sys@TEST>select object_name,oracle_username,session_id from v$locked_object l,dba_objects d where l.object_id=d.object_id;
OBJECT_NAME ORACLE_USERNAME SESSION_ID
-------------------- ------------------------------ ----------
PLAN_TABLE SYS 130
這時候在第一個會話中關閉autotrace也不能解除鎖定
sys@TEST>set autotrace off
sys@TEST>select object_name,oracle_username,session_id from v$locked_object l,dba_objects d where l.object_id=d.object_id;
OBJECT_NAME ORACLE_USERNAME SESSION_ID
-------------------- ------------------------------ ----------
PLAN_TABLE SYS 130
只有斷開會話後,對plan_table表的鎖定才可以解除
sys@TEST>conn / as sysdba
Connected.
sys@TEST>select object_name,oracle_username,session_id from v$locked_object l,dba_objects d where l.object_id=d.object_id;
no rows selected.
這時候就可以在第二個會話中刪除plan_table表了
sys@TEST>drop table plan_table;
Table dropped.
所有在drop過程中報ORA-00054錯誤的問題,都可以通過查詢v$locked_object看看那個會話鎖定了物件的方法來解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/498744/viewspace-264996/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】autotrace中statistics為0的問題的解決
- 設定autotrace的報錯問題解決
- 運維必備-解決鎖問題的全過程運維
- 設定autotrace全過程
- 死鎖問題排查過程-間隙鎖的復現以及解決
- SQLserver 程式被死鎖問題解決SQLServer
- munium學習過程中問題解決
- 儲存過程被鎖無法編譯的解決儲存過程編譯
- 【mysql】配置MySQL,解決安裝過程中的問題MySql
- 在CSS中解決內容過長的問題CSS
- 【原創】RedHat Linux啟動時間過長的問題解決RedhatLinux
- 在製作遊戲的過程中,我都解決和改進了哪些問題遊戲
- 通過 sysprocesses 解決Sql死鎖問題SQL
- 【原創】cache buffer chains的一次解決過程AI
- tomcat5中文問題解決之道(原創)Tomcat
- 一個lua問題解決過程
- 無線路由器撥號過程中可能會遇到的問題以及解決方法路由器
- 怎麼解決內容的原創性問題
- Mysql安裝過程中遇到的問題及解決辦法MySql
- oracle 鎖問題的解決Oracle
- 解決超過會話數問題會話
- 解決一個C#中定時任務被阻塞問題C#
- SQL在shared pool中的解析過程問題SQL
- 【原創】ORA-02085問題的解決
- 解決Java執行過程中拋簽名異常的問題Java
- elk(單機)安裝過程中遇到的問題及解決方法
- Oracle RAC之--安裝過程中碰到的問題及解決方法Oracle
- 一次線上問題的排查解決過程
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- 解決SQL Server 2005中鎖的問題SQLServer
- [原創]專案過程管理在專案管理中的重要性專案管理
- 能幫你解決90%以上Java面試中的鎖問題(Java中的鎖)Java面試
- 位運算解決多標籤問題【原創】
- [原創]Gerrit中文亂碼問題解決方案分享
- oracle儲存過程!解決網友問題Oracle儲存過程
- Data Pump Import速度問題之解決過程Import
- 使用javamail發信過程中的一些問題及解決方法JavaAI
- dsp builder 11.0 使用過程中產生的問題及解決方案UI