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/