编辑手记
关注荣科云数据公众号的朋友一定看过之前一篇《Oracle数据库调整硬件环境方案简述》,里面介绍了在各种可能的硬件环境调整中,Oracle该如何做相应的调整。本文我们就介绍一个场景的实施案例,原环境是ASM单机环境,客户计划将数据库架构变更为Oracle RAC,存储利用原存储,数据量2.5TB,可申请停机时间4小时。根据这些已知条件,大家会采取什么样的方案呢?
本次案例示意图
上面的示意图描述了本次案例需要做的调整,需要将原Oracle单机(11.2.0.4)+ASM环境,变更为Oracle RAC(11.2.0.4)+ASM环境。相当于更换主机,并将Oracle架构从单机调整为RAC,但存储并不更换。
方案的选择
1、利用ADG迁移
使用新环境做原库的DG备端,需要割接时直接switchover
缺点:应用层要调整连接IP,需要双倍的存储空间
2、利用rman迁移
在新环境安装集群软件和数据库软件,与原库保持版本一致,备份原库,在新环境恢复数据库,可以在新环境库mount状态时,不断拷贝原库归档文件进行恢复,减少停机切换窗口,切换时,停应用,切归档,在新环境最后恢复一次所有归档,数据库打开
缺点:手动操作多,需要双倍的存储空间
3、利用数据泵迁移
在新环境(RAC)安装集群软件和数据库软件,创建数据库,然后使用数据泵或exp/imp工具从源库导出数据,再导入到新库。
缺点:由于存储并不更换,此种方案需要双倍的存储空间,再加上数据泵导出导入时间较长,4个小时的停机窗口很难满足
4、直接迁移ASM数据盘组
使用新主机重新构建集群(ocr和vote需要额外磁盘),并安装相同版本数据库软件。在原环境数据库和ASM实例停止后,将ASM磁盘映射给所有新主机,新环境集群直接挂载数据库所用ASM盘组,再启动数据库即可。
优点:能够在停机窗口期完成,无需双倍存储空间,回退简单(原端磁盘映射可以先不取消,但要停止HAS服务,迁移失败可直接拉起原端)
通过以上四种方案的对比,我们选择了第四种直接迁移ASM数据盘组的方案,下面我们就介绍一下这个方案的具体实施方法。
方案概述
注意什么?
1、原生产端与新目标端的操作系统版本要求一致
2、原生产端与新目标端的数据库版本要求一致
3、原生产端与新目标端ASM磁盘的属主与权限要求一致
4、新目标端RAC两节点映射的磁盘路径和名称必须一致(原端和目标端的磁盘名称可不同,ASM是靠盘头信息确认盘组归属的)
基本实施步骤
1、在新目标端安装与原生产端版本一致的操作系统
2、收集原生产环境ASM磁盘组相关信息并备份磁盘头
3、从存储端分配votedisk所需要的磁盘
4、在新目标环境安装GRID软件、配置集群环境(要求与原生产环境版本一致)
5、停止原生产环境数据库和ASM实例(单机ASM需要停止HAS服务)
6、在新目标环境挂载ASM数据盘组相关磁盘,并确认磁盘的属主与权限
7、在新目标环境使用ASMCA命令mount同步过来的磁盘组
8、在新目标环境安装RDBMS软件(要求与原生产环境版本一致)
9、从原生产环境复制参数文件至新目标环境,并修改对应的参数变量
10、使用crsctl命令把数据库以及实例注册到集群环境中
11、使用setasmgidwrap命令修改oracle权限,否则oracle用户无法访问ASM盘组
12、启动目标环境数据库
13、连接数据库进行业务验证
方案实施
1、安装操作系统
两台目标端服务器安装要求与原生产环境版本一致,包括操作系统相关补丁,安装过程忽略,但提出以下几点注意事项:
1)需要修改新目标端共享存储盘的属主和权限(grid:asmadmin 660)
2)对目标端安装集群前的准备工作(创建用户、目录,修改HOST文件、SHELL限制,内核参数等)
3)目标端主机名可与生产端不一致
2、原生产环境收集ASM盘组信息并备份盘头
1)收集磁盘组信息
Select name,total_mb,free_mb,GROUP_NUMBER,DISK_NUMBER,path,FAILGROUP,MOUNT_STATUS,HEADER_STATUS,name,group_id,total_mb from v$asm_disk order by FAILGROUP;
2)备份磁盘头信息
kfed read /dev/raw/raw1 text=raw1.txt
注:10.2.0.5之后,盘头会自动备份,但仍然建议手工备份盘头
3、安装grid软件
两台目标端服务器安装与原生产端版本一致的Grid软件,同时,需要新分配磁盘创建Votedisk和ocr盘组。具体细节忽略
4、挂载映射磁盘组
目标端集群安装完毕后,原生产端数据库及集群保证为关闭状态。目标端用asmca命令挂载映射过来的磁盘组,asmca命令会自动扫描相关磁盘并将可用磁盘组列出,点击mount all后会挂载盘组(相关盘组资源会自动加载进集群资源中)
5、安装RDBMS软件
两台目标端服务器安装与原生产端版本一致的RDBMS软件,注意安装时选择仅安装软件,不要创建数据库。
6、设置Oracle参数文件
从原生产端复制参数文件到目标环境,并修改相对应的参数变量,步骤如下:
1)在生产端创建pfile
Create pfile=’/home/oracle/pfile.ora’ from spfile;
2)拷贝生产端pfile和密码文件到两台目标端
3)在目标端修改pfile,根据目标端环境修改相应参数(SGA、PGA)
DB_NAME不能被修改
4)增加集群相关参数,如下:
*.cluster_database=true
*.REMOTE_LISTENER=‘ftpdb_scan:1521’
ftpdb1.instance_name=ftpdb1
ftpdb2.instance_name=ftpdb2
ftpdb1.instance_number=1
ftpdb2.instance_number=2
ftpdb1.undo_tablespace='UNDOTBS1'
ftpdb2.undo_tablespace='UNDOTBS2'
ftpdb1.thread=1
ftpdb2.thread=2
5)创建spfile,并到spfile文件存放到ASM中
su – oracle
sqlplus / as sysdba
create spfile='+datadg/ftpdb/spfileftpdb.ora' from pfile;
配置两台服务器的pfile文件
$more initftpdb1.ora
spfile='+datadg/ftpdb/spfileftpdb.ora'
6)在两台目标端创建audit目录
mkdir –p $ORACLE_BASE/admin/xxxx/adump
7、把数据库及实例注册进集群环境
su – oracle
srvctl add database -d ftpdb -o /u01/app/oracle/product/11.2.0/dbhome_1
srvctl add instance -d ftpdb -i ftpdb1 -n gkdb1
srvctl add instance -d ftpdb -i ftpdb2 -n gkdb2
查看配置
srvctl config database -d ftpdb
修改数据库为自动启动(如果DB资源的AUTO_START属性不是always)
8、修改Oracle权限
使用setasmgidwrap命令修改oracle权限(两个节点都执行)
su – grid
cd $ORACLE_HOME/bin
setasmgidwrap -o /oracle/app/oracle/product/11.2.0/bin/oracle
/oracle/app/oracle/product/11.2.0此路径为RDBMS的$ORACLE_HOME
9、启动Oracle实例并打开数据库
1)先启动实例1
su – oracle
srvctl start instance –d orcl –i ftpdb1
2)增加实例2的redolog日志以及undotbs2表空间
alter database add logfile thread 2 group 6 ('+DATADG') size 2g reuse;
alter database add logfile thread 2 group 7 ('+DATADG') size 2g reuse;
alter database add logfile thread 2 group 8 ('+DATADG') size 2g reuse;
alter database add logfile thread 2 group 9 ('+DATADG') size 2g reuse;
alter database add logfile thread 2 group 10 ('+DATADG') size 2g reuse;
create undo tablespace UNDOTBS2 datafile '+DATADG' size 30G;
3)启动集群线程2
SQL> alter database enable public thread 2;
SQL> select thread#,status,enabled from v$thread;
THREAD# STATUS ENABLED
---------- ------------ ----------------
1 OPEN PUBLIC
2 CLOSED PUBLIC
注意:如果thread2为private,可以采用下面的方法修改
关闭instance ORCL2,重启至nomount状态。在现有一个intsance ORCL1上操作:
alter database disable thread 2;
alter database enable public thread 2;
再开启ORCL2
4)创建集群相关视图
@$ORACLE_HOME/rdbms/admin/catclust.sql
5)启动实例2
srvctl start instance –d orcl –i ftpdb2
关注荣科云数据公众号: