
1)查看dba_registry无问题。
2)查看无效对象,没有关于系统相关的。
--通过上面排查,排除数据字典问题。
3)创建其它名字的目录,居然可以,也能够删除。到这里我基本上可以判断数据库数据字典有问题了。
4)我使用hcheck.sql检查数据字典,确实发现了问题,报错如下:

01.脚本让我去查询mosid为:1360518.1的文章,文章里面建议我联系专业的人员解决,没有参考意义。
02.人工分析该sql文件的脚本,找到如下过程:
--
Procedure MissingDir$
(nF In Number Default 0,
VerChk In Number Default 5,
Verbose In Boolean Default FALSE)
Is
Cursor sCur1 Is
select o.obj# o_obj, o.owner# o_owner, o.name o_name, d.obj# d_obj,
oa.grantee# oa_grantee, oa.privilege# oa_priv, u.name u_name
from sys.obj$ o, sys.dir$ d, sys.objauth$ oa, sys.user$ u
where o.obj# = d.obj# (+)
and o.obj# = oa.obj# (+)
and o.owner# = u.user#
and o.type# = 23
and d.obj# is null
and decode(bitand(o.flags, 196608),
65536, 'METADATA LINK', 131072, 'OBJECT LINK', 'NONE') = 'NONE';
nFr Number;
ps1 Varchar2(10) := 'HCKE-0013';
ps1a Varchar2(65) := 'DIR$ entry missing for directory objects';
ps1n Varchar2(40) := '(Doc ID 1360518.1)';
CursorRun Boolean := FALSE;
Begin
If ( nF = 0) Then
nFr := FindFname('MissingDir$') ; Else nFr := nF;
End If ;
If ChecknCatVnFR (nCatV, nFr, VerChk) = FALSE Then Return; End If;
For c1 in sCur1 Loop
If (not CursorRun) Then
report_failure('FAIL',ps1,ps1a,ps1n,CursorRun);
End If;
put_line(' OBJ$ OBJ#='||c1.o_obj||' Owner='||c1.u_name||'.'||
c1.o_name||' - Grantee('||c1.oa_grantee||') - Priv ('||
c1.oa_priv||')');
Fatal := Fatal + 1;
End Loop ;
If (CursorRun) Then put(chr(10)) ; else put_line('PASS'); End If ;
End;
03.通过对过程进行分析,发现dir$基表数据存在缺失,反复比对后将缺失的数据insert进去解决,处理后再次检测正常。
insert into sys.dir$ select obj#,'--------------------------------------','E:\hisbak' from sys.obj$ where obj# in(87135,87759,87760,183953,193347,193424,193443);
commit;


微信号:Oray_123






