无法删除用户的处理(ora-01940)


oracle 9208 for solaris 9

 


故障描述:

使用drop user test,进行用户删除时,报错或者hang,并且错误一直可以重现,测试如下:

SQL> drop user test1 cascade;
drop user test1 cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected

   并通过clone数据库也发现存在同样的问题,并且还会强行终止processs,以及报出ora-03114的
   错误。alert日志中无任何异常情况。

 

原以为可能是数据字典损坏,通过10046进行追踪,
=====================
PARSING IN CURSOR #4 len=652 dep=1 uid=38 ct=47 lid=38 tim=1206301870620732 hv=3055982128 ad='247f3138'
BEGIN
  BEGIN
    IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner)) THEN
      xdb.XDB_PITRIG_PKG.pitrig_truncate(sys.dictionary_obj_owner, sys.dictionary_obj_name);
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
     null;
  END;
  BEGIN
    IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner, xdb.DBMS_XDBZ.IS_ENABLED_RESMETADATA)) THEN
      xdb.XDB_PITRIG_PKG.pitrig_dropmetadata(sys.dictionary_obj_owner, sys.dictionary_obj_name);
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
     null;
  END;
END;
END OF STMT
PARSE #4:c=1000,e=1261,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,tim=1206301870620711
BINDS #4:


发现每一次进行删除时都是到这一步,而正常的话,应该是后面还有很多过程,


XCTEND rlbk=0, rd_only=1
=====================
PARSING IN CURSOR #5 len=14 dep=0 uid=0 ct=53 lid=0 tim=1206301870603227 hv=0 ad='b727fc04'
drop user test
END OF STMT
PARSE #5:c=7998,e=32601,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1206301870603207
BINDS #5:
=====================
PARSING IN CURSOR #4 len=652 dep=1 uid=38 ct=47 lid=38 tim=1206301870620732 hv=3055982128 ad='247f3138'
=====================
PARSING IN CURSOR #4 len=652 dep=1 uid=38 ct=47 lid=38 tim=1206301870620732 hv=3055982128 ad='247f3138'
BEGIN
  BEGIN
    IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner)) THEN
      xdb.XDB_PITRIG_PKG.pitrig_truncate(sys.dictionary_obj_owner, sys.dictionary_obj_name);
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
     null;
  END;
  BEGIN
    IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner, xdb.DBMS_XDBZ.IS_ENABLED_RESMETADATA)) THEN
      xdb.XDB_PITRIG_PKG.pitrig_dropmetadata(sys.dictionary_obj_owner, sys.dictionary_obj_name);
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
     null;
  END;
END;
END OF STMT
PARSE #4:c=1000,e=1261,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,tim=1206301870620711
BINDS #4:
=====================
PARSING IN CURSOR #3 len=51 dep=2 uid=38 ct=3 lid=38 tim=1206301870636943 hv=397653107 ad='247ef48c'
SELECT USER_ID FROM ALL_USERS WHERE USERNAME = :B1
END OF STMT
PARSE #3:c=2999,e=2890,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=1,tim=1206301870636918
=====================
PARSING IN CURSOR #2 len=37 dep=3 uid=0 ct=3 lid=0 tim=1206301870644807 hv=1398610540 ad='29af6be8'
select text from view$ where rowid=:1
END OF STMT
PARSE #2:c=4999,e=4580,p=0,cr=0,cu=0,mis=1,r=0,dep=3,og=4,tim=1206301870644788
=====================
PARSING IN CURSOR #1 len=210 dep=4 uid=0 ct=3 lid=0 tim=1206301870654916 hv=864012087 ad='29a79348'
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maximum, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and intcol#=:2
END OF STMT
PARSE #1:c=6999,e=6808,p=0,cr=0,cu=0,mis=1,r=0,dep=4,og=3,tim=1206301870654895
BINDS #1:
kkscoacd
 Bind#0
  acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
  kxsbbbfp=b71ea204  bln=22  avl=02  flg=05


  。。。。。

  。。。。。

 


新建一个用户也无法删除,还是会报同样的错误。那么从这里基本可以确定出XDB这一块出现了损坏。

恰好这里有一个经过clone过的环境,  通过testcase问题重现。

唯一的解决办法就是reinstall xdb环境。过程如下:


SQL> conn / as sysdba

SQL> Shutdown Immediate;

SQL> Startup migrate;

SQL> @?/rdbms/admin/xdbrelod.sql 

SQL> Startup

SQL> @?/rdbms/admin/utlrp.sql


通过重新安装xdb后问题解决,删除用户恢复正常。

通过这个问题,并不是说这个case有多么的复杂,而是通过正常的跟踪手段来找出问题,判断问题是非常重要的。


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/104152/viewspace-557723/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/104152/viewspace-557723/

你可能感兴趣的:(无法删除用户的处理(ora-01940))