设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] Oracle存储过程批量删除Session

[复制链接]

尚未签到

发表于 2016-7-27 08:32:29 | 显示全部楼层 |阅读模式
  首先,我要申明我之所以写这篇博客是因为今天看来篇博文http://chenzone.iyunv.com/blog/2018199,原作者写的很好,只是排版欠缺,我在他的基础上把内容写清晰点,首先,带上我参考的博文链接:
  

http://chenzone.iyunv.com/blog/2018199
http://www.iyunv.net/article/20823.htm
http://dbajun.iyunv.com/blog/135331
http://blog.itpub.net/633084/viewspace-1027933/
http://www.iyunv.com/Linux/2012-10/72953.htm
  下面开始:
       一开始,我按原作者写的,创建存储过程,报错了,没有权限,而是想使用sysdba赋予权限。
  
DSC0000.jpg
    一登录,我发现 sysdba身份是SYS,以前自己一直在尝试使用sys登录,原来sysdba就是sys。
      查看当前用户:
  

show user
  
  那还有一个什么system呢?说实话system密码我也不知道,所以要使用sysdba修改system密码:
  

ALTER USER SYSTEM IDENTIFIED BY root
   如下:
  
DSC0001.jpg
    那么sys和system有何区别呢?
      简单说,SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户,平常一般用该帐号管理数据库就可以了。
      使用system登录,测试修改是否成功。
  
DSC0002.jpg
    然后给用户赋予查看v$session的权限。
  
DSC0003.jpg
    权限不足,那system又有那些权限呢?
      system用户的系统权限如下:
  

SQL> col privilege for a20;
SQL> select privilege from dba_sys_privs where grantee='SYSTEM';
  
DSC0004.jpg
    system用户角色权限为;
  

select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='SYSTEM')
  应该是system用户权限不足,换成sysdba试下,使用sysdba赋予权限。
  
DSC0005.jpg
    sysdba也没权限?其实,对于这种动态v$session,系统有一个相对应表,查看相对的表名是什么,赋予权限后就可以了,如下:
  

select synonym_name,table_name from dba_synonyms where synonym_name='V$SESSION';
  
DSC0006.jpg
    赋予用户v_$session查看权限就OK了。
  

grant select on v_$session to tmd;
  
DSC0007.jpg
    那如何撤销权限呢?
  

revoke select on v_$session from tmd;
  
DSC0008.jpg
    原来system对象搞错了,切换system赋予v_$session权限试下:
  
DSC0009.jpg
    还是没权限,所以只能使用sysdba赋予权限了。
      然后,新建存储过程:
  

create or replace procedure proc_KILL_INACTIVE_SESSIONS authid current_user is
s VARCHAR2(1000);
begin
FOR sess IN (select SID, SERIAL# from v$session s
where status='INACTIVE'
and (program='lg_server.exe' or program='JDBC Thin Client')
AND TYPE != 'BACKGROUND' and last_call_et>5000)
LOOP
s := 'alter system kill session '''||sess.sid||','||sess.serial# ||'''immediate ' ;
EXECUTE IMMEDIATE s;
END LOOP;
end proc_KILL_INACTIVE_SESSIONS;
   测试如下:
  

begin
-- Call the procedure
proc_kill_inactive_sessions;
end;
  该存储过程原理是:
  

在系统使用的过程中,数据库会出现很多inactive的session,占用服务器的资源,而这些session很多都是由于客户端以不正常的方式断开或者突然的断网产生的,如果清理掉必将会影响到数据库服务器的性能。我们可以通过select * from v$session WHERE status='INACTIVE' 来查看当前处在inactive 状态的sesion,然后将sid和serial#带入以下语句中将相应的session 杀死。
  终于写完了,补充下,我的数据库是oracle 10g的。
      下面啰嗦句,其实很多作者博文内容很好,这是排版欠缺,导致很多人不想看,以为内容低下,这里我要感谢原作者,关于v$session对应v_$session表我今天才知道。
      世有伯乐,然后有千里马,这是我一开始想到的,我意思是伯乐难求,作为千里马也得自己争取,希望各位以后写博客时候注意排版,不求很漂亮,但求内容清晰,能看懂,谢谢。
     全文完。

 
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249941-1-1.html 上篇帖子: Oracle SOA Suite: Medicator and OSB 下篇帖子: AIX6下安装Oracle RAC 集群 PDF
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表