Oracle Database: 安全地删除数据库用户
来源:互联网 发布:想成为网络写手 编辑:程序博客网 时间:2024/06/05 03:09
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 ONCREATE 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 lockalter system disconnect session '12,97' IMMEDIATEalter system disconnect session '20,11' IMMEDIATEalter system disconnect session '141,118' IMMEDIATEhold on ...hold on ...drop user AGILE cascadePL/SQL procedure successfully completed.
- Oracle Database: 安全地删除数据库用户
- Oracle数据库用户删除
- Oracle数据库添加删除用户
- Oracle数据库新建、删除用户
- oracle使用DataBase Configuration Assistant创建、删除数据库
- Oracle数据库的创建与删除(DROP DATABASE语句)
- oracle使用DataBase Configuration Assistant创建、删除数据库
- 了解 oracle使用DataBase Configuration Assistant创建、删除数据库
- drop database 删除数据库
- Windwos下面删除oracle数据库/用户
- oracle数据库删除用户及表空间
- 删除oracle数据库用户的dba权限
- 删除oracle数据库用户的dba权限 .
- oracle-数据库用户创建和删除
- Oracle数据库创建、删除用户及用户授权
- oracle数据库用户删除及表空间删除
- Oracle创建、删除DATABASE LINK
- 使用drop database删除数据库
- oracle 处理空值的函数
- [owlpark]电源管理之regulator机制流程(2012-10-20 02:20:02)
- IE下获取触发事件的目标
- UIP tcp/ip协议栈在uCOS-II下的移植
- Linux regulator分析
- Oracle Database: 安全地删除数据库用户
- 腾讯搜搜未必没有未来
- ExtJs4 TreePanel学习
- ios 文件管理 获取文件属性 读取文件
- 今天配置window平台的安卓模拟器各种困难,结果找到一个好的文章分享下!
- Python对MySQL存储过程的调用
- java里使用xfire发布webservice
- MFC tab
- k-d tree算法的研究