正式环境: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
782次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
661次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
590次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
543次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
529次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
509次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
493次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
467次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
382次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
380次阅读
2025-05-05 19:28:36