设为首页 收藏本站
查看: 805|回复: 0

[经验分享] 记一次高可用迁移方案的规划— Oracle 9i 32 bit升级至Oracle 10g 64 bit

[复制链接]

尚未签到

发表于 2016-8-5 11:11:32 | 显示全部楼层 |阅读模式
  由于系统整体规划需求,需将现有9iR2数据库统一升级到10gR2版本,由于涉及到机房内多套业务系统,因此作为明年的迁移项目,需要做前期迁移方案规划和测试。
  情况大致如此
 

迁移前

迁移后

OS 版本

Linux AS4( 32bit)

Linux AS4( 64bit)

Oracle版本

9iR2(9.2.0.6/9.2.0.8)

10.2.0.4

  由于涉及的业务数据库容量动辄几百G,且停机时间有限(不超过4小时),因此迁移方案的核心在于如何用最短的时间和最安全可控的步骤来完成这次迁移。
  在高可用迁移案例中,最糟糕的情况莫过于跨OS的数据库迁移(非异构,排除字符集不同的情况,比如Linux->UNiX,Windows->Unix),除了可借助一些oracleAQ和Streams来完成高可用同步和迁移外,并没有更好的处理办法(Dataguard无从发挥作用,诸如transporttablespace等手段对一个跨os的大容量的迁移项目也几乎鸡肋,实际中根本无法承受转换数据文件类型所带来的时间损耗)。但Streams等方案太过于繁琐,需要有审慎周密的迁移步骤和考虑。当然,借助于三方工具可以完成诸多海量迁移(如DSG/SharePlex等),但出于成本和其他因素,并不是每个迁移用户都有选择的余地.
  话题转到开篇的迁移情况,由于只是OS位数和Oracle版本/位数的转换,所以情况并非那么悲观。Oracle本身也提供了脚本,用来支持在32位和64位之间做互相转换(rdbms/admin/utlirp.sql,这种转换是双向的).那么重点问题在于如何在停机之前将32位os上的32位db与64位os上的64位db做同步,因为不可能停库以后才去将32bit os上datafile文件copy到64bitos上,如此数据量,光copy文件的时间就无法接受。能想到的最简单的同步办法,莫过于dataguard了.
  因此整个迁移方案雏形形成,新增一台设备,安装linux 64bit的os,部署2套Oracle版本,一套Oracle9i(版本对应待升级源库版本,作为待升级源库的standby端做日志同步),另一套Oracle 64bit10.2.0.4(用来做最终的升级版本).
  如此一来,整个迁移步骤就比较明了了。停库升级之前,做好主备的dataguard同步.待升级时刻,停主库,备库做failove切换,然后在新主库上做一系列数据字典升级和位数转换工作.跨版本的升级和位数转换过程,可以参考Metalink ID 62290.1(该文档并没有提及跨大版本升级的位数转换,但实际测试中9i 32bit 升级到10g 64bit依然可行)
  特别提出:Metalink ID 62290.1提出32bit与64bit区别仅仅在于PL/SQL的编译格式不同,而且,一般的版本升级/降级过程会自动进行位数的转换。
  The on-disk format for database data, redo, and undo isidentical for the 32-bit and 64-bit installations of Oracle. The onlyinternal structural differences between the 32-bit and 64-bit Oracleinstallations are the following:
The compiled format of PL/SQL is different. The instructions for howand when to recompile PL/SQL are provided in the appropriate chaptersof the Migration book. The storage format of user-defined types isbased on the release of Oracle that created the database. The existingstorage format will be converted to the correct format transparentlywhen necessary. User-defined types include object types, REFs, varrays,and nested tables.
  If you are changing word-size during a migration,upgrade, or downgrade operation then no additional action is required.The word-size is changed automatically during any of these operations
  问题到此为止远没有结束,当我提出这个方案的时候,同事持有诸多疑虑。在Linux64bit的OS上,用来做standby同步的9i版本,装的是32bit的还是64bit的呢,且是否能够与32bit OS上的32bitdb形成dataguard体系呢?
  早前我曾做过测试案例,无论位数32还是64,dataguard体系都不存在任何问题.但要害在于,无论装32bit和64bit,看似Oracle官方都有不支持的地方且有明确的文档说明。
  1.linux 64bit OS上安装oracle 32bit 9iR2
  按照常规办法,这种组合根本就无法正常安装成功。Oracle不支持在linux 64bit OS上安装oracle 32bit 9iR2,见metalink ID 416530.1
  实际中从主库上tar一个安装好的Oracle 32bit 9iR2放到linux 64bit的OS上,数据库依然能够正常运行并与主库形成dataguard体系.
  Dataguard failover后,利用10gR2的软件,直接进行数据字典升级(或者用dbua).
  2.linux 64bit OS上安装oracle 64bit 9iR2
  这种办法等同于64bit的db与32bit的db做dataguard,metalink ID 413484.1 给出了异构平台下的dataguard组合列表,只有在10g以后,Oracle才支持linux 64bit与 Linux 32bit之间做dataguard.
  但实际测试说明,这种dataguard组合模式在9iR2下依然成立.
  Dataguard failover后,利用9iR2 64bit的软件,执行utlirp脚本将32bit9iR2转换成64bit .接下来利用10g R264bit的软件,做常规的9i->10g数据库升级(手工升级数据字典或者使用dbua).
  两种方案在测试中皆可行,个人倾向于后者。
  实际测试中按照Dataguard+升级数据字典和转换位数的方法测试,整个升级过程没有任何问题,检查数据库各组件状态,均正常(注意OLAP组件,如果库使用了该组件,32bit->64bit的转换会造成该组件的不可用,需要单独处理。另外,升级到10204需要注意TimeZoneDefinitions的问题)。升级过程在3小时之内可以完成.回顾整个迁移方案,唯一没有文档有力支撑的方便是Dataguard的组合模式,实际standby端也无非是做了block级别的recover,既然dataguard能启用且日志能够被Recover,那就不存在由于该步骤引发其他的bug的可能。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253225-1-1.html 上篇帖子: oracle隐式游标,显示游标,游标循环 下篇帖子: 清除Oracle数据库的所有远程连接进程:(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表