日常運維過程中,經常使用PLSQL的command模式運行SQL腳本,對於一些常見的錯誤,你知道原因在哪里嗎?
1.SQL腳本執行后彈出輸入框

原因:SQL*PLUS默認環境里會把'&字符'當成變量來處理.
解決方案:
方案一:有些時候我們也需要在SQL>的符號下輸入'&字符', 只需要改變SQL*PLUS下一個環境變量define即可.在腳本最前面添加關閉綁定變量功能,在腳本最后重新打開綁定變量功能。
set define off; #是把默認的&綁定變量的功能取消, 可以把'&字符'當成普通字符處理
set define on;#打開&綁定變量的功能,
方案二:在編輯器中將 & 批量更換成 '||'&'||' 然后執行即可。
2.SQL腳本執行后未正常結束,返回數字

原因:SQL腳本未正常結束
解決方案:在對應的腳本未正常結束SQL行后添加/或者;
3.SQL腳本執行后一直顯示excuting執行中,無法結束

原因:SQL腳本中引用的表被鎖定,相關事務鎖未釋放
解決方案:
1:查V$DB_OBJECT_CACHE
SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0';
注意:CUX_OE_ORDER_RPT_PKG 為存儲過程的名稱。
發現 locks=2
2:按對象查出sid,serial#
SELECT A.OBJECT_NAME,
B.SESSION_ID,
C.SERIAL#,
C.PROGRAM,
C.USERNAME,
C.COMMAND,
C.MACHINE,
C.LOCKWAIT
FROM ALL_OBJECTS A, v$locked_object B, v$session C
WHERE A.OBJECT_ID = B.OBJECT_ID
AND C.SID = B.SESSION_ID
3:alter system kill session 'sid值,serial#值' immediate;