3 个狂野的会话在同一个表中分别获得了一个行独占锁:
SELECT * FROM DBA_DML_LOCKS;
如何在没有管理员身份的情况下解除锁定?
如果我是管理员,我会列出(SID,SERIAL#)有锁的会话:
SELECT SID,SERIAL#
FROM V$SESSION
WHERE SID IN (SELECT SESSION_ID
FROM DBA_DML_LOCKS );
然后执行:
ALTER SYSTEM KILL SESSION 'SID,SERIALl#';
例如:
ALTER SYSTEM KILL SESSION '115,1931';
但是由于我不是管理员,所以我得到了一个权限不足的错误:
ALTER SYSTEM KILL SESSION '115,1931'
Error report -
SQL Error: ORA-01031: insufficient privileges
01031. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a database operation without
the necessary privileges.
*Action: Ask your database administrator or designated security
administrator to grant you the necessary privileges
我正在运行 Oracle 11gR2 11.2.0.3。
如果这种情况经常发生,则可以选择为此编写包或存储过程。包的所有者需要更改系统权限,并且应该使用定义者权限创建包。
您只需要对该包的执行权限并使用正确的参数提供会话终止过程。
僵尸进程仍然很有可能继续运行,直到运行被杀死进程的最终用户尝试做任何事情。这些僵尸可以从操作系统中杀死。要找到那些处理过的,在杀死之前通过加入 v$session 和 v$process 来读取它们的 os pid。另一种选择是通过在 v$process 中查找在 v$session 中没有会话的进程来定期清理那些孤立的进程。