如何在没有 DBA 权限的情况下杀死自己的 Oracle SQL 会话?

jki*_*kix 3 sql oracle r jdbc database-administration

给定 Oracle SID,没有 DBA 权限的用户是否可以终止自己的会话/连接?

具体来说,我可以在没有管理员权限的情况下在我的数据库中运行它:

SELECT SID, "SERIAL#", STATUS, USERNAME
 FROM V$SESSION
 WHERE 
 (USERNAME = 'LastF') 
 AND
 (STATUS = 'INACTIVE');
Run Code Online (Sandbox Code Playgroud)

但是当我去终止我的孤立会话时(从另一个我仍然可以访问的会话),

ALTER SYSTEM KILL SESSION "12, 123"
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

JDBC ERROR: ORA-01031: insufficient privileges
Run Code Online (Sandbox Code Playgroud)

注意:我使用 RJDBC 包通过 R/Rstudio 与 JDBC 连接。

动机:

在 Oracle SQL 中终止会话似乎并不难:https : //docs.oracle.com/cd/B28359_01/server.111/b28310/manproc008.htm#ADMIN11192
如何终止连接到我的 oracle 数据库的所有会话?

但是,对于具有孤立连接(即互联网中断、管理连接错误的第 3 方客户端等)的非 DBA 用户来说,获得:

ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
Run Code Online (Sandbox Code Playgroud)

并且必须等待超时。

mat*_*guy 6

要成功运行ALTER SYSTEM命令,您不需要是 DBA,但您确实需要ALTER SYSTEM授予您(或拥有您连接到数据库的应用程序的“用户”——这可能不同于“您”作为 RStudio 的“用户”)。

您有几个选择:

  • 要求 DBA 终止会话
  • 要求被授予ALTER SYSTEM特权(这是一种非常糟糕的做法)
  • 有一个“主管”(无论定义如何 - 专门负责这些情况)被授予ALTER SYSTEM特权,他将负责终止此类会话
  • (也许是最好的选择)创建一个打包的过程,它的唯一任务是终止孤立的会话。授予ALTER SYSTEM包所有者,并将对该包的执行权限授予单个用户(根据需要)。该过程应编写为仅终止特定类型的会话。