删当前用户 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