最近帮着一个客户新装了一个oracle 816,然后进行了oracle 816的exp出来的数据的恢复,在恢复的结束阶段,也就是导入同义词,触发器,存储过程阶段,有个报错,大体意思就是因为找不到db link,存储过程建立报错,仔细分析了报错信息,再加上询问客户方的业务人员,最后明白了该存储过程是通过db link 从sunway 的业务系统中取数。
最后无奈之下,又重新导入了一次,实际上,只重新导入那个出错的存储过程即可。
最后的总结:
1.导入存储过程(包括导入同义词,触发器,视图)时,imp要进行编译,编译通过后,才不会报错。
此问题,就是出在编译时找不到db link,而报错。
2.能否单独导入存储过程,而不是再将全部数据重新导入一次?我感觉应该是有单独导入存储过程的语法,找找。
3.建立db link时,是用的如下的语法:
create public database link SUNWAY_CG CONNECT TO gqcb identified by gqcb using 'sunway_cg'
--小类注:using 'sunway_cg' 中的sunway_cg为在此台oracle816服务器上事先配置好的指向另外一个oracle数据库的net 服务名。
--在006帐套中,使用了这个dblink,到其他的业务系统中取数。
用此语法建立完毕后,测试此database link,发现处于“非活动状态”,一开始百思不得其解,后来经询问同事,才发现,非“非活动状态”与
init.ora的一个参数“global_name”有关系,global_name=false 才行。
另注:
oracle 816,默认安装完毕,global_name=true
oracle 92,默认安装完毕,global_name=false
oracle 10,默认安装完毕,global_name=false