打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
win32 10g 到 win64 11g的迁移历险
折腾了一段时间,从WIN2003 32bit ORACLE10G到WIN2008 64bit ORACLE11G的迁移终于告一段落。
用的办法很简单,不过反反复复折腾了好久,在这作一记录,留作纪念。


老库运行的时间很久,应用慢的实在难以忍受,而且是32位操作系统,对于内存的识别实在少的可怜,不迁移不行,于是有了这次折腾。
(一)由于是从32位迁移到64位操作系统,不能直接冷备份拷贝过去。SHUTDOWN之后冷备份拷贝的这种方式被PASS掉。
(二)考虑到使用RMAN做异机恢复,对RMAN也比较熟,不过这种方式也没有进行下去。原因如下:
1)原库未开归档,开归档后需要停库
2)原库未挂上存储,且原来硬盘空间不足,不足以存放备份集
(三)最原始的exp/imp方式,这种方法很简单。不过EXP不能放在原服务器上,原服务器没有空间。只能EXP直接到目标库,不过这样也省去了拷贝DMP的时间。
一个140G的库导出需要8个小时,导入需要8个小时。一共居然要16个小时,这样算来停机时间太长。暂时不予考虑。
(四)expdp/impdp方式倒是快很多,不过这种方式必须在服务器上进行,但我的原服务器没有多余的磁盘空间了。
问题到这的时候有点小头疼,几种常用的迁移方式都不行。其实也考虑了DATAGUARD,不过思考后发现也不可能。
原库未开归档,开启归档后,如果归档日志写满,更是个麻烦事。基于归档模式的迁移是不可能成行的。


继续思考,想到了IMPDP+DBLINK。
(五)impdp + dblink 可以用于不同数据库版本迁移,不像exp那样产生中间文件,直接导入到目标库。方法很好。
在测试环境一个TABLE大小16G ,我用EXP导出熬时45分钟,IMP导入到目标库耗时150分钟


直接使用IMPDP+DBLINK方式,耗时50分钟,很好。


测试库的原库版本10.2.0.3
测试库的目标库版本11.2.0.1


但是在生产环境中却遇到了问题。
impdp wzz/wzz network_link=ying8 directory=dirmy logfile=impdp.log
ORA-39006: internal error
ORA-39113: Unable to determine database version
ORA-04052: error occurred when looking up remote object SYS.DBMS_UTILITY@Silver
ORA-00604: error occurred at recursive SQL level 3
ORA-06544: PL/SQL: internal error, arguments: [55916], [], [], [], [], [], [], []
ORA-06553: PLS-801: internal error [55916]
ORA-02063: preceding 2 lines from TO_203
ORA-39097: Data Pump job encountered unexpected error -4052


通过检查metalink,在文档Doc ID: Note:4511371.8中详细描述了这个bug,只要在11g中调用10.1版本
(补丁小于10.1.0.5)或10.2版本(补丁小于10.2.0.2)数据库中的过程,就会引发这个错误。


除了打补丁升级之外,没什么好的临时解决方法。将10g的数据库升级到10.1.0.5或10.2.0.2版本以上,可以避免问题的产生。


而升级又存在风险,需要停机,我想做的还是最省时的迁移。


这时候有点穷途末路了。难不成要把原服务器挂上存储,这时候就可以选择使用RMAN或者EXPDP/IMPDP了?




头疼了。重新思考,回顾了下以上的几种方式。重新回到了EXP/IMP。
于是重新做实验。
这回我尝试EXP不全部导出,将报表数据和业务数据分开来做,和领导沟通后,领导的意思也是说为保证切换,报表的数据可以后进数据库。
这时候EXP拆分为两部分。报表那部分导出需要6个小时,导入也需要6个小时。
业务数据导出需要2个小时,导入也需要2个小时。
这样看来,如果先导入业务数据的话且不考虑报表的情况下,切换需要四个小时,这比之前的16小时好了很多。和领导沟通后,领导点了点头,询问能否再快一下。
I carry on thinking.
expdp/impdp有并行,但是exp/imp没有。没有咋整?创造条件。
业务数据一共有626张表,我将数据拆分为3部分。分开导出,分开导入。
效果再次体现,导出用了40分钟,导入用了65分钟。
算起来,停机时间不超过两个小时。再次向领导汇报,领导挺满意。
这时候忽然想到报表的数据,每天都会有一次结算,在结算过后,数据是不会变化的。也就是说,我完全可以在应用不停的情况下,先导入历史报表。
应用停了之后,再导入剩余的部分。这样完全可以在两个小时之内结束战斗。功夫不负有心人,昨天早上正式切换成功。


步骤如下
1.exp rows=n,imp rows=n,drop table,purge recyclebin
2.disable job
3.exp report table,imp report table
4.create database link,insert into report table where business_day_system>='20131204'
5.exp business table,imp business table
6.drop old sequence,create new sequence
7.enable job
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle 常用导入导出工具集锦
Oracle备份与恢复介绍(物理备份与逻辑备份)
数据库迁移过程中注意的地方
.Net程序员学用Oracle系列(19):导出、导入(备份、还原)
exp导出 imp导入
Oracle数据库迁移的几种方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服