删当前用户 ora-01940
- 2017-06-26 12:24:00
- 1147533288 转贴
- 1671
案例1 Oracle 删除用户报错
【案例相关人】 **
一、【问题描述】
健康卡项目升级中,需要在已有库中导入新的数据或者覆盖已有的数据,发现导入的时间比重新建用户和重新导入数据的时间还要长。于是有个想法,把原有的用户级联删除,重新建用户导数据。但是当删除用户时报错,大致错误信息是:无法删除当前已连接的用户。
二、【分析过程】
通过查询资料,发现需要删除已连接的用户进程才能删除。
三、【解决过程】
1、执行以下匿名块
DECLARE
u_sid varchar2(50);
u_serialnumber varchar2(50);
CURSOR c1 IS select trim(s.sid),trim(s.serial#)
from v$session s,v$process p
where s.paddr = p.addr and (s.username='NEUKZX');
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO u_sid,u_serialnumber;
EXIT WHEN c1%NOTFOUND;
dbms_output.put_line('alter system kill session '||''''||trim(u_sid)||','||trim(u_serialnumber)||''';');
END LOOP;
END;
注:可以更改以上代码的加红部分,具体的用户具体的用户名。该字段区分大小写,或者说所有的用户名都得大写。
2、将该匿名块执行后输出的结果复制,然后执行一下。如果没有输出结果则说明该用户已断开。
比如:
alter system kill session '146,5';
alter system kill session '148,52';
3、通过以上两步,该用户已被断开。可以删除。
四、【经验总结】
以上是我的想法,不知道还有没有其他的方法。在已有库中导入数据输入命令: imp neukzx/neukzx@127.0.0.1/orcl file=D:/neukzx.dmp full=y ignore=y,ignore属性是忽略已有的表结构只导入表数据,但是会有一些问题,尤其是导入的时间慢。还有需要查看数据的一致性。所以,暂时的办法是级联删除用户,重新建用户并导入数据库备份。
文章分类
联系我
| 联系人: | meepo |
|---|---|
| 电话: | ***** |
| Email: | 1147533288@qq.com |
| QQ: | 1147533288 |