首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle调整硬件环境方案之ASM迁移

编辑手记

关注荣科云数据公众号的朋友一定看过之前一篇《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

关注荣科云数据公众号:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G173CV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券