客户原本是一套单机版的Oracle 11.2.0.3.0 Database for Windows的数据库系统,客户的需求是将单机版的Oracle Database迁移到3节点的Oracle RAC Database中,并且平台变成Linux,但数据库版本不变化。客户希望尽可能短的停机时间。
通常对于不跨版本的Oracle Database迁移常使用DG(Data Guard),配置好DG之后做一次switchover即可完成数据库的快速迁移,后续再进行修改IP地址等工作。
虽然这个案例需要跨平台,但从11g开始Oracle Database支持有限制的跨平台配置DG,下面是配置异构平台DG的兼容性列表(物理Standby):
从上面的兼容性列表可以看出,Microsoft Windows (x86_64)(12)和Linux x86_64(13)能够兼容构建异构平台的DG,但需要注意的是Oracle Database 需要是11g,并且需要应用Patch 13104881,该Patch只存在于Linux平台,并且只在Windows(主库)向Linux(备库)同步时,需要在Linux平台应用此补丁(反向不会遇到相应的bug),更多内容请参考Patch 13104881说明。
有关在异构平台搭建ADG的详细内容请参考文章:《在物理 Data Guard 中对异构主备系统的支持 (Doc ID 1602437.1)》
确认现有的平台和新平台之间能够搭建DG之后,那么剩下的问题就是如何将单机Database转换成RAC Database,这步实际需要在将Linux平台的备库转换成主库之后进行的,下面描述的是整个迁移大致的步骤:
1.在新环境下安装Oracle Grid Infrastructure集群件。
2.在新环境下安装Oracle RAC Database软件。
3.创建ASM磁盘组,配置好监听程序。
4.在RAC的第一个节点创建Windows到Linux的ADG(使用第一个节点的VIP地址,配置成实时同步模式),并直接将控制文件、数据文件、日志文件等存放到共享的ASM磁盘组。
<<<< 由于是配置Windows到Linux的DG,肯定涉及到DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数的设置,这两个参数需要重启数据库实例才能生效,需要注意的是,从主库到备库的duplicate操作,对目录的转换实际是由备库中的这两个参数设置来控制的,所以在前期配置阶段可以不为主库设置这两个参数,这就意味着即使在跨平台的环境中主库也可以在不重启的情况下完成DG的配置(除了这两个参数外的其他大部分DG参数都不需要重启便可生效)。
<<<< LOG_FILE_NAME_CONVERT参数的值一定要包含所有在线Redo日志,standby Redo日志的目录的转换。DB_FILE_NAME_CONVERT参数的值一定要包含所有数据文件和临时文件目录的转换。例如:
LOG_FILE_NAME_CONVERT='+DATA01/dbm/onlinelog/','+DATA_DM01/dbm/onlinelog/','+FRA01/dbm/onlinelog/','+DBFS_DG/dbm/onlinelog/'
DB_FILE_NAME_CONVERT='+DATA01/dbm/datafile/','+DATA_DM01/dbm/datafile/','+DATA01/dbm/tempfile/','+DATA_DM01/dbm/tempfile/'
LOG_FILE_NAME_CONVERT和DB_FILE_NAME_CONVERT两个参数的值的最后都要加上/斜杠。
对DB_FILE_NAME_CONVERT的参数设置除了考虑到数据文件外,还需要考虑到临时文件的位置,特别是ASM的时候,OMF管理设置数据文件为datafile目录,临时文件为tempfile,不能只指定磁盘组的名字,一定要指定到具体的绝对路径。
<<<< 另外还需要注意着两个参数值的配置,假设有A库(主库)和B库(备库),在A库配置的这两个参数的值应该='B库位置','A库位置',在B库配置的这两个参数的值应该='A库位置','B库位置',切不可搞反了。
<<<< 如果DG配置完成后,日志传输服务没有正常工作,可以考虑执行alter system set log_archive_dest_state_2=defer;alter system set log_archive_dest_state_2=enable;的方式禁用再启用远程目录传输。
<<<< 再做单机版主库到备库的的DG的时候,最好将ORACLE_SID环境变量,instance_name和db_unique_name配置为相同的值,之后再进行调整。
5.将备库转换为主库(可以做Switchover操作,也可以在确保主备库实时同步的前提下直接关闭主库,将备库激活成为可读可写的数据库)。
6.执行下面的步骤将单机版的数据库转换为RAC数据库:
4) Take a backup of original single-instance pfile to e.g. /tmp/initorcl.ora and Add the following entry in pfile, e.g. for a two node RAC cluster