我的任务是允许开发人员在开发数据库中终止他们自己的会话。我已经编写了一个程序,但由于某种原因,我PL/SQL: ORA-00942: table or view does not exist
在尝试调用gv$session
. 这是 proc,被编译为SYSTEM
. 在 11.2.0.4.3、2 节点 RAC 数据库上运行:
create or replace procedure kill_dev_session (v_osname in varchar2)
is
lv_env VARCHAR2(30 char);
li_inst_id number;
li_sid number;
li_serial number;
begin
select replace(global_name, '.DOMAIN.COM', '')
into lv_env
from global_name;
select inst_id, sid, serial#
into li_inst_id, li_sid, li_serial
from sys.gv$session
where upper(osuser) = upper(v_osname)
group by inst_id, sid, serial#;
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION'||''||li_sid||','||li_serial||','||li_inst_id||'''';
EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''127.0.0.1''';
UTL_MAIL.send(sender => lv_env||'@db01.domain.com',
recipients => '[email protected]',
subject => 'Session killed by '||v_osname||' user in '||lv_env,
message => 'This user killed a session using the kill_dev_session procedure.',
mime_type => 'text; charset=us-ascii');
end;
/
所以问题来了:每个开发人员都使用同一个用户登录,所以我不能真正使用username
. 我不想alter system
为每个用户打开毯子。这将允许开发经理传递用户名(即 jsmith)并终止该会话,并通过电子邮件向我们 DBA 告知发生了这种情况,因此我们可以查看开发人员是否经常这样做。
关于我为什么看到这个的任何想法:PROCEDURE KILL_DEV_SESSION 的错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
12/3 PL/SQL: SQL Statement ignored
14/10 PL/SQL: ORA-00942: table or view does not exist
提前致谢!