当前位置:  数据库>oracle

Oracle Database: 安全地删除数据库用户

    来源: 互联网  发布时间:2017-05-13

    本文导语: Kill Session 在使用drop user cascade之前,通常使用kill session来终止当前已经连接的会话,但对于一个运行中的比较长的事务尚未提交完成的情况下,kill session常需要很长的时间。而且还必须回到操作系统级别kill掉相应的会话进程,...

Kill Session

在使用drop user cascade之前,通常使用kill session来终止当前已经连接的会话,但对于一个运行中的比较长的事务尚未提交完成的情况下,kill session常需要很长的时间。而且还必须回到操作系统级别kill掉相应的会话进程,比较麻烦。否则会出现下述错误:

ORA-01940: cannot drop a user that is currently connected

Disconnect Session

如果使用disconnect session immediate,就直接相对非常方便地终止当前某个会话,并在OS级别kill掉了进程。

下面提供的procedure可以很完美地删除数据库用户。首先使用 alter user account lock锁住用户,防止其他新会话的连接。接着循环disconnect每一个已存的session连接,并等待所有session被删除,最后drop掉。

SET SERVEROUT ON 
 
CREATE OR REPLACE PROCEDURE gracefullyDropUser(v_username IN VARCHAR2) IS 
  l_cnt integer; 
  sqlStmt VARCHAR2(1000); 
BEGIN 
  sqlStmt := 'alter user ' || v_username || ' account lock'; 
  EXECUTE IMMEDIATE sqlStmt; 
  dbms_output.put_line(sqlStmt); 
  FOR x IN (SELECT * FROM v$session WHERE username = v_username) 
  LOOP 
    sqlStmt := 'alter system disconnect session ''' || x.sid || ',' || x.serial# || ''' IMMEDIATE'; 
    EXECUTE IMMEDIATE sqlStmt; 
    dbms_output.put_line(sqlStmt); 
  END LOOP; 
 
  -- Wait until all sessions are disconnected forcely, check every 2 seconds 
  LOOP 
    SELECT COUNT(*) INTO l_cnt FROM v$session WHERE username = v_username; 
  EXIT WHEN l_cnt = 0; 
    dbms_lock.sleep(2); 
    dbms_output.put_line('hold on ...'); 
  END LOOP; 
  sqlStmt := 'drop user ' || v_username || ' cascade'; 
  EXECUTE IMMEDIATE sqlStmt; 
  dbms_output.put_line(sqlStmt); 
END gracefullyDropUser; 

下面例子调用上述过程,删除了名为'AGILE'的用户。注意用户名的大写。

SQL> execute gracefullyDropUser('AGILE'); 
alter user AGILE account lock 
alter system disconnect session '12,97' IMMEDIATE 
alter system disconnect session '20,11' IMMEDIATE 
alter system disconnect session '141,118' IMMEDIATE 
hold on ... 
hold on ... 
drop user AGILE cascade 
 
PL/SQL procedure successfully completed. 


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 所有的Oracle9 i Database选件在Linux上都可用
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle 2010年7月更新修复多个Oracle Database安全漏洞
  • Oracle 9i DataBase 支持 P4 吗?
  • Oracle Database Lite
  • 有人在fedora 10下安装 oracle database 11g,没有呀?提供个安装步骤
  • 谁那里有《Oracle Database 10g完全参考手册》中文版的电子书啊?发给我好吗
  • Linux下启动Oracle database EM及isqlplus等命令
  • 在Linux中安裝Oracle Database 10g時切換root帳戶時出現﹕-bash: eth0 commond not found,這是怎么 回事?各位大仙的幫一下
  • Oracle Database 建立与查询 Sequence
  • Oracle Database 11g Release 2 For Linux发布
  • 在Oracle下创建database link两种方法
  • DBA 在Linux下安装Oracle Database11g数据库图文教程
  • 请教:为什么删除不掉?我用超级用户删除某一文件夹rm -R oracle失败。
  • 在linux 中如何删除oracle db 与卸载oracle.
  • Oracle删除表前判断表名是否存在若存在则删除
  • oracle创建删除用户示例分享(oracle删除用户命令及授权)
  • oracle 彻底删除方法
  • Oracle删除后不能重新安装的解决方法
  • ubuntu如何彻底删除oracle
  • 彻底删除Oracle数据库的方法
  • Oracle删除当前用户下所有表的方法适用于有或没有删除权限
  • shell脚本操作oracle删除表空间、创建表空间、删除用户
  • 技巧分享 删除Oracle10G中的垃圾表
  • Oracle删除带有空格的表
  • 请问怎么用jsp语句删除oracle中的一条记录?
  • Linux环境下完全删除Oracle
  • oracle怎么删除用户提供解决方案
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ORACLE数据库常用字段数据类型介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • Oracle发布Oracle SQL Developer 1.2数据库开发工具 帮助用户简化开发工作
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle收购TimesTen 提高数据库软件性能
  • 卸载oracle数据库
  • Oracle数据库恢复后心得
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle数据库运行Oracle form时避免出现提示信息
  • Oracle欲收购开源数据库MySQL未果
  • 如何在JBuilder中连接Oracle数据库?
  • Oracle数据库访问参数文件的顺序
  • 循序渐进学习Oracle数据库
  • 安装Oracle加载数据库错误areasQueries的解决
  • Jbuilder 7.0 连接 Oracle 数据库
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Linux /$ORACLE_HOME $ORACLE_HOME


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,