暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

迷一般的ORA-01775

我不说你不造 2018-05-03
1204

正式环境:AIX Oracle 11.2.0.3 
测试环境:Linux Oracle 11.2.0.4 
事件的起源:帮客户备份正式环境的数据到测试环境,使用expdp导出,impdp导入。 
导出语句:expdp / as sysdba directory=BACKUP dumpfile=backup_{time}.dmp logfile =backup_{time}.log FULL = Y COMPRESSION = ALL 
导入语句:impdp / as sysdba directory=BACKUP dumpfile=backup_180319.dmp logfile= implog.log full=Y 
导入完成,只有warning,没有error。 
测试库的环境是给开发测试存储过程和程序包的,所以特别要求权限一定要对,所以在导出完成后,我特别去对照了一下数据库的权限表,以及用户对单独表的权限。 
但是,问题还是出现了额。开发在正式环境下,差不多有80+程序包,100+存储过程,其中差不多有1/3的程序包和存储过程,都显示有错误,无法编译,报错没有对应程序包,而且都是同一个用户下的程序包:**RDL下的UTL_DBWS程序包,还有一个程序包的名字忘了。但是在对应的程序包和存储过程中,在报错的命令前添加**RDL.,则可以正常编译,那就问题就定位到,对程序包的权限上了,遂在DBA用户下开启/**RDL.UTL_DBWS的权限,报错依旧,而且在正式环境中,也没有授权,于是乎又revoke。然后检查同义词,发现正式环境中UTL_DBWS->SYS,SYS->PUBLIC,但是在测试环境中只有UTL_DBWS->SYS,遂立即添加同义词。问题又出现了,那1/3正常了,但是原来正常的那2/3全部报错了,显示ORA-01775 同义词循环链。同样,在程序包中的报错命令前加/**RDL.,问题能够解决。于是乎,删除同义词,又恢复原来的。 
我在自己的虚拟机中进行测试,A用户下创建一个存储过程AA,创建同义词->SYS,然后B用户执行SYS.AA,可以执行;然后创建同义词SYS.AA->PUBLIC ,然后B用户执行AA,可以执行,执行SYS.AA,可以执行;并没有同义词循环链问题的产生,数据库中肯定还有其他权限没有完全导入过来。expdp和impdp毕竟是个黑盒,其中有很多机制我们作为一般用户,根本不知道,BUG也比较多。经理以前提及,他们以前做数据迁移备份,都不是用expdp或者rman的,都是自己写脚本底层复制,以后也要多多学习底层复制,研究一下数据复制迁移的机理,这样遇到问题也能更有把握处理,也不会再在客户询问时,只能回答,程序内部具体的执行内容我们无法得知。 
好了,删库,跑路。

文章转载自我不说你不造,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论