日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle解除锁表【原】

發布時間:2025/4/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle解除锁表【原】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在日常操作中,經常會有不小心被鎖表的情況發生

一般造成原因有:

  • 開發人員不小心執行了 for update 查詢語句后,沒有解鎖
  • 不合理代碼中開啟事務(begin transaction)后,沒有關閉(close)或回滾(rollback)該事務.

此時我們必須擁有dba的權限才能對被鎖的表進行解鎖操作.而鎖表的時如果突然斷網或斷電那么可能會報如下異常:

Exception in thread "Thread-4" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLException: Io 異常: Connection reset ### The error may exist in file [D:\application\eclipse64ee\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp7\wtpwebapps\isc\WEB-INF\classes\com\testdemo\pcis\isc\dao\LockMapper.xml] ### The error may involve com.testdemo.pcis.isc.dao.LockMapper.queryLockTableForUpdate-Inline ### The error occurred while setting parameters ### SQL: SELECT T.C_PK_ID as cId, T.C_IP as cIP,T.C_MEMO as cMemo ,T.T_CRT_TM as tCrtTm FROM WEB_ISC_LOCK T FOR UPDATE ### Cause: java.sql.SQLException: Io 異常: Connection resetat org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:128)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)at com.sun.proxy.$Proxy24.queryLockTableForUpdate(Unknown Source)at com.testdemo.pcis.isc.threadpool.MasterSlaveThread.judgeMasterNewCode(MasterSlaveThread.java:73)at com.testdemo.pcis.isc.threadpool.MasterSlaveThread.run(MasterSlaveThread.java:54) Caused by: java.sql.SQLException: Io 異常: Connection resetat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:829)at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854)at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3476)at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)... 7 more View Code

?

創造鎖表情景:

SELECT * FROM STUDENT FOR UPDATE;

現在查看有哪些表被鎖了

執行以下語句必須有oracle管理員權限,不然會報錯 "ORA-00942:表或視圖不存在"

SELECT OBJECT_NAME, MACHINE, S.SID, S.SERIAL#FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION SWHERE L.OBJECT_ID  = O.OBJECT_IDAND L.SESSION_ID = S.SID;

?

解除被鎖定的表

ALTER SYSTEM KILL SESSION '219,59457'; -- 219為SID,59457為SERIAL

繼續查看哪些表被鎖了

SELECT OBJECT_NAME, MACHINE, S.SID, S.SERIAL#FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION SWHERE L.OBJECT_ID  = O.OBJECT_IDAND L.SESSION_ID = S.SID;

  

?

?

在我自己的mybatis3項目中

如果用select * from tableName where id='XXX' for update 鎖表后不 rollback() 或 commit() ,那么只會鎖 id = 'XXX' 這一數據行

?

查看表被鎖的其它形式語句

SELECT OBJECT_ID,SESSION_ID,SERIAL# AS SERIAL,ORACLE_USERNAME,OS_USER_NAME,S.PROCESSFROM V$LOCKED_OBJECT A, V$SESSION SWHERE A.SESSION_ID = S.SIDAND SYSDATE - S.LOGON_TIME > 0.5

?

其它參考

查詢Oracle正在執行的sql語句?

?ORACLE腳本之鎖表時 查詢誰鎖了表而又引起誰的等待--https://blog.csdn.net/haiross/article/details/17223295

其它相關語句

查看oracle中的鎖的情況.
SESSION_ID, USERNAME, MODE_HELD, MODE_REQUESTED, OBJECT_NAME, LOCK_TYPE, LOCK_ID
分別是 擁有鎖的SESSION_ID,擁有鎖的USERNAME,鎖的執行模式MODE_HELD,鎖的請求MODE_REQUESTED,鎖所在的數據庫對象名,鎖的類型,鎖的ID

SELECT S.SID SESSION_ID,S.USERNAME,DECODE(LMODE,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(LMODE)) MODE_HELD,DECODE(REQUEST,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(REQUEST)) MODE_REQUESTED,O.OWNER || '.' || O.OBJECT_NAME || ' (' || O.OBJECT_TYPE || ')',S.TYPE LOCK_TYPE,L.ID1 LOCK_ID1,L.ID2 LOCK_ID2FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION SWHERE L.SID = S.SIDAND L.ID1 = O.OBJECT_IDAND S.USERNAME = 'bobo'; View Code

?

轉載于:https://www.cnblogs.com/whatlonelytear/p/4714244.html

總結

以上是生活随笔為你收集整理的oracle解除锁表【原】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。