为了几天后的系统测试,需要在虚拟机安装整个系统,数据库使用了Oracle 10.2.0版本,但由于Oracle的军情谎报,害我重装了N回。
目前正在运行的数据库服务器是10.2.0.3.0版本的Oracle,当我DMP出一个数据副本并IMP到虚拟机的数据库中时,Oracle竟然无法读取该文件。仔细查看后发现,虚拟机的数据库版本为10.1.0,遂将其卸载改换成Oracle 10.2.0。从此恶梦开始了。
IMP数据时,新版本的Oracle已经可以读取DMP文件,但在执行导入作业时,老是运行失败,并提示:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
PL/SQL 第18行错误
….
几次都是这样。
无奈之下只能求助Google,搜索之后,发现了所谓的Oracle Bug之说。这正是我担心的,因为我手头只有10.2.0.1.0的安装文件。难道…没有别的办法,从网上死拖下来一个10.2.0.3.0的安装补丁,安装,经过N遍重装修补之后(安装补丁也不是那样顺利,错误N多,在此不细描述),现实又给我浇了盆冷水--还是同样的错误。
看来,并不是所谓的BUG在捣鬼。
于是只能重装回10.2.0.1.0(排除升级为10.2.0.3.0后带来的其它问题)。而对于这一错误的解决方法(出自于网络资源)--修改缓冲区大小我也是找不着地方无从下手,看来,俺今天要加班了。
临下班时,我在翻看导入log时猛然间发现了一个可疑的地方。
XXX导入错误,未找到表空间XXX
我迅速找到真实系统的表空间设置,果然发现该服务占用了两个表空间,而在虚拟机系统中只有一个表空间定义,而在导入的时候并没有做映射。难道…死马当活马医,三下五除二,做好了导入表空间的映射。导入…
漫长的2分钟过去,OK!成功了,那个令人费解的“字符串缓冲区太小 ”错误竟然没出来。
当系统跑起来的时候,都下班一个小时了,不过今天算没白加班,也替大家领教了一下Oracle的谎报技术。