在Oracle数据库中,如果你想查看当前正在处理的锁定表或者查询与锁定相关的信息,可以使用以下几个视图和工具:
-
`V$LOCK`
视图:这个视图显示了当前数据库中的所有锁定信息。你可以使用它来查看哪些进程持有锁,哪些进程在等待锁。SELECT * FROM v$lock WHERE blocking_session IS NOT NULL; -- 查看正在阻塞的锁
2.`V$SESSION`
视图:结合`V$LOCK`
视图,可以使用`V$SESSION`
视图来获取更多关于会话的信息,比如会话ID、用户名等。SELECT s.sid, s.serial#, s.username, l.request, l.blocking_session FROM v$session s JOIN v$lock l ON s.sid = l.sid;
3.`V$SESSION_WAIT`
视图:这个视图显示了当前会话正在等待的资源,包括锁。SELECT * FROM v$session_wait WHERE event LIKE '%lock%';
4.`DBA_LOCKS`
和`DBA_LOCKED_OBJECTS`
视图:这些是DBA权限下的视图,提供了更详细的锁定信息,包括锁定的对象信息。SELECT l.request, l.sid, l.serial#, o.owner, o.object_name, o.object_type FROM dba_locks l JOIN dba_locked_objects o ON l.object_id = o.object_id;
在Oracle数据库中,如果你需要强制终止一个持有锁的会话,可以使用以下几种方法:
-
使用
`ALTER SYSTEM KILL SESSION`
命令: 这个命令可以用来强制终止一个或多个会话。你需要提供会话的SID和SERIAL#(或者完整的会话ID)。ALTER SYSTEM KILL SESSION 'sid,serial#'; -- 或者 ALTER SYSTEM KILL SESSION 'session_id';
-
注意:使用这个命令会立即终止会话,可能会导致未保存的数据丢失。谨慎使用。
-
能用的sql语句
SELECT c.owner, c.object_name, c.object_type, b.sid, b.serial#, b.status, b.osuser, b.machine FROM v$locked_object a, v$session b, dba_objects c WHERE b.sid = a.session_id AND a.object_id = c.object_id;
技巧:可以用plsqldev.exe客户端提交语句,运行完以后,会有一个提交事务的按钮,点一下