SELECT 'SESSION:'||','||A.SESSION_ID||',LOCKED OBJECT:'||B.OWNER||'.'||B.OBJECT_NAME||',OS_USER_NAME:'||A.OS_USER_NAME||'/'||A.ORACLE_USERNAME FROM V$LOCKED_OBJECT A LEFT JOIN DBA_OBJECTS B ON A.OBJECT_ID = B.OBJECT_ID WHERE A.OS_USER_NAME NOT IN ('oracle');
时间: 2023-08-12 10:51:32 浏览: 55
这是一个SQL语句,用于查询当前被锁定的数据库对象及锁定该对象的会话和操作系统用户信息。其中,V$LOCKED_OBJECT是一个视图,用于显示当前被锁定的对象信息;DBA_OBJECTS是一个数据字典视图,用于显示数据库中所有对象的信息。该语句会返回一个结果集,包含SESSION_ID、LOCKED OBJECT、OS_USER_NAME和ORACLE_USERNAME四个字段的信息。其中,SESSION_ID表示锁定该对象的会话ID;LOCKED OBJECT表示被锁定的对象名称,包含对象所属的OWNER和对象名;OS_USER_NAME表示操作系统用户名;ORACLE_USERNAME表示数据库用户名。注意,该语句只查询非Oracle用户的锁定情况。
相关问题
SYS.WRI$_ADV_OBJECTS锁表
SYS.WRI$_ADV_OBJECTS是Oracle数据库中的一个系统表,用于存储PL/SQL程序的编译信息。如果该表被锁定,可能是由于某些正在进行的PL/SQL编译过程导致的。如果你想知道是哪个会话锁定了该表,可以使用以下命令:
```
SELECT s.username, s.sid, s.serial#, l.locked_mode
FROM v$session s, v$lock l
WHERE s.sid = l.sid AND l.type = 'TM' AND l.id1 = (SELECT object_id FROM dba_objects WHERE owner = 'SYS' AND object_name = 'WRI$_ADV_OBJECTS')
```
这将返回锁定该表的会话的用户名、SID和序列号。如果需要,你可以终止该会话以释放表锁。但是在终止会话之前,请确保已经了解该会话正在进行的操作,以避免可能的数据丢失或其他问题。
如何查找oracle锁表进程
您可以通过以下方式查找Oracle锁表进程:
1. 登录Oracle数据库,并运行以下命令查看锁定情况:
SELECT c.owner, c.object_name, 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;
2. 如果要查看特定表的锁定情况,可以使用以下命令:
SELECT object_name, object_type, session_id, type, lmode, request, block
FROM v$locked_object l, dba_objects o
WHERE l.object_id = o.object_id AND object_name = 'TABLE_NAME';
3. 另外,您也可以使用Oracle工具如Enterprise Manager或SQL Developer来查找锁定信息。