`
53873039oycg
  • 浏览: 837167 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Oracle存储过程批量删除Session

阅读更多

     首先,我要申明我之所以写这篇博客是因为今天看来篇博文http://chenzone.iteye.com/blog/2018199,原作者写的很好,只是排版欠缺,我在他的基础上把内容写清晰点,首先,带上我参考的博文链接:

    

http://chenzone.iteye.com/blog/2018199
http://www.jb51.net/article/20823.htm
http://dbajun.iteye.com/blog/135331
http://blog.itpub.net/633084/viewspace-1027933/
http://www.linuxidc.com/Linux/2012-10/72953.htm

    下面开始:

     一开始,我按原作者写的,创建存储过程,报错了,没有权限,而是想使用sysdba赋予权限。

   

    一登录,我发现 sysdba身份是SYS,以前自己一直在尝试使用sys登录,原来sysdba就是sys。

    查看当前用户:

   

show user

 

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

   

ALTER USER SYSTEM IDENTIFIED BY root

    如下:

   

    那么sys和system有何区别呢?

    简单说,SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户,平常一般用该帐号管理数据库就可以了。

    使用system登录,测试修改是否成功。

   

    然后给用户赋予查看v$session的权限。

   

    权限不足,那system又有那些权限呢?

    system用户的系统权限如下:

   

SQL> col privilege for a20;
SQL> select privilege from dba_sys_privs where grantee='SYSTEM';

   

    system用户角色权限为;

    

select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='SYSTEM')

    应该是system用户权限不足,换成sysdba试下,使用sysdba赋予权限。

   

    sysdba也没权限?其实,对于这种动态v$session,系统有一个相对应表,查看相对的表名是什么,赋予权限后就可以了,如下:

   

select synonym_name,table_name from dba_synonyms where synonym_name='V$SESSION';

   

    赋予用户v_$session查看权限就OK了。

   

 grant select on v_$session to tmd;

  

    那如何撤销权限呢?

   

 revoke select on v_$session from tmd;

  

    原来system对象搞错了,切换system赋予v_$session权限试下:

  

    还是没权限,所以只能使用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表我今天才知道。

    世有伯乐,然后有千里马,这是我一开始想到的,我意思是伯乐难求,作为千里马也得自己争取,希望各位以后写博客时候注意排版,不求很漂亮,但求内容清晰,能看懂,谢谢。

   全文完。

 

   

 

  • 大小: 34 KB
  • 大小: 39.8 KB
  • 大小: 35.5 KB
  • 大小: 29.1 KB
  • 大小: 31.5 KB
  • 大小: 22.1 KB
  • 大小: 17.3 KB
  • 大小: 20.9 KB
  • 大小: 6.6 KB
  • 大小: 48.2 KB
0
0
分享到:
评论

相关推荐

    ORACLE存储过程性能优化技巧

    Oracle存储过程是数据库管理系统中的一种重要工具,用于封装一系列的SQL和PL/SQL语句,以执行特定的任务。性能优化是数据库管理的核心任务之一,尤其是对于处理大量数据的企业级应用,存储过程的优化能显著提升系统...

    Oracle表字段更新存储过程效率优化思路

    在Oracle数据库管理中,存储过程是预编译的SQL语句集合,用于执行特定的数据库操作,例如数据处理、业务逻辑等。优化存储过程对于提升系统性能至关重要,尤其是在大规模数据处理场景下。本文将深入探讨Oracle表字段...

    ORACLE 表数据写成TXT文本,CVS等格式存储过程

    本文档将详细介绍一个具体的存储过程,该过程不仅能够将Oracle表数据导出为TXT或CSV格式,而且还包含了一项批量删除的功能。这对于需要定期处理大量数据的场景尤其有用。 #### 二、存储过程核心逻辑 存储过程的...

    hibernate批量删除

    以下是一个使用Oracle存储过程的例子: ```sql CREATE OR REPLACE PROCEDURE batchDeleteCustomers(p_age IN NUMBER) AS BEGIN DELETE FROM CUSTOMERS WHERE AGE > p_age; END; ``` 然后在Java代码中调用这个存储...

    在Hibernate中处理批量更新和批量删除

    对于支持存储过程的数据库(如Oracle),可以创建一个存储过程来实现批量更新,这样不仅可以提高执行速度,还可以充分利用数据库的内置优化机制。 ```sql CREATE OR REPLACE PROCEDURE batchUpdateCustomer(p_age ...

    Hibernate使用存储过程

    在IT领域,尤其是在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式...无论是用于批量更新还是查询操作,正确地配置和调用存储过程都能极大地提高应用的效率和灵活性。

    Hibernate存储过程的调用

    本文将详细介绍如何在Hibernate框架下调用存储过程,并以Oracle数据库中的`batchUpdateStudent()`存储过程为例进行讲解。 #### 二、存储过程的优势 存储过程直接在数据库服务器上执行,与应用程序分离,具有以下...

    在Hibernate应用中处理批量更新和批量删除

    可以使用类似批量更新的策略,即通过HQL或原生SQL执行一次性的删除操作,或者利用数据库的存储过程来提高效率。 ### 结论 在Hibernate应用中处理批量更新和批量删除时,开发者应充分考虑数据库性能和资源消耗,...

    如何解决Oracle杀死死锁进程

    解决 Oracle 杀死死锁进程 Oracle 杀死死锁进程是数据库管理员经常遇到的问题,本文将介绍解决 Oracle 杀死死锁进程的方法。 在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。...

    hibernate批量删除.txt

    4. **使用存储过程**:对于支持存储过程的数据库,如Oracle,可以创建一个存储过程来执行批量删除操作,这种方式可以极大地提高执行效率。 ```sql CREATE OR REPLACE PROCEDURE batchDeleteCustomers(p_age IN ...

    Oracle添加用户

    4. **存储过程**:为了批量执行这些操作,我们需要创建一个存储过程。存储过程是一组预编译的SQL语句,可以接受参数并返回结果。下面是一个简单的示例: ```sql CREATE OR REPLACE PROCEDURE create_user(p_...

    jsp Hibernate批量更新和批量删除处理代码

    对于支持存储过程的数据库系统,如Oracle,可以通过存储过程来执行批量操作。将批量操作逻辑直接写入数据库存储过程中,然后通过Hibernate或JDBC调用该存储过程,可以进一步提升批量操作的性能。 ### 总结 在JSP与...

    Oracle_DBA_java.rar_oracle_oracle 笔记

    这两者在IT领域中都有着举足轻重的地位,尤其在企业级应用开发中,Oracle作为数据存储的核心,Java则常用于构建应用程序并与数据库进行交互。 1. **Oracle DBA基础知识** - 数据库概念:理解数据库的基本概念,如...

    oracle11g学习笔记

    Oracle中的数据对象包括表、视图、存储过程和触发器等,它们构成了数据库的核心元素。SQL*Plus是Oracle自带的命令行工具,用于执行SQL语句。在SQL*Plus中,常用的命令如conn用于连接数据库,disc断开连接,passw修改...

    oracle学习文档1

    `不仅授予yyaccp用户执行任何存储过程的权限,还允许yyaccp将此权限再授予其他用户,增强了权限管理的灵活性。 以上知识点涵盖了Oracle数据库的文件结构查询、基本操作、用户管理以及权限控制等方面,对于初学者和...

    oracle中级培训资料

    PL/SQL是Oracle特有的过程化语言,结合了SQL的功能,用于编写存储过程、函数、触发器等高级数据库编程。 三、数据库管理 1. 表和索引管理:创建、修改和删除表是常见的操作,索引能显著提高查询速度,但也会占用...

    oracle对帐优化过程及函数比赛

    Oracle对账优化过程是数据库管理中的重要环节,尤其是在大型企业或金融机构中,对账工作对于保证数据一致性、准确性和合规性至关重要。Oracle数据库提供了一系列工具和技术来帮助优化这个过程,提高效率并减少错误。...

    详解java调用存储过程并封装成map

    在实际开发中,我们经常需要调用存储过程来完成某些复杂的数据库操作,例如批量数据处理、数据同步等。存储过程可以提高数据库的性能和安全性,因为它们可以减少网络流量、提高数据访问速度和保护数据的安全。 二、...

Global site tag (gtag.js) - Google Analytics