暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

利用 DG 单机转RAC - 迁移实操篇

原创 心在梦在 2023-06-25
816

利用 DG 单机转RAC - 迁移实操篇

 

客户需求: 将数据库从单机转为RAC环境,数据库版本11.2.0.4 不变。
 
方案设计: 数据量较大,为了缩短停机时间,我们利用DG Switchover 功能,将数据库切换为RAC环境。
 

架构图:
图片.png

 
大致实施步骤: 

  1. 搭建DG,从单机生产环境,到RAC 新环境。
  2. 通过Switchover 切换,将数据库从单机环境切换为RAC环境。
  3. 注意: 此时数据库仍然是一个单机数据库,需要执行单机转RAC升级脚本。

 
 下面我们看一下具体切换步骤: 部分执行过程篇幅太长、涉及客户信息,省略。。。
 

1. 切换前检查

1.1 停止Ap server

-- 检查当前数据库是否还有session连接 set line222 col username for a10 col module for a40 select inst_id,username,sid,serial#,module from gv$session where username is not null;

图片.png

结论:当前数据库无任何连接。

  • 如果遇到客户没法停止AP server的话,可以停主库监听,重启DB,或者kill session方式来断开应用连接。
-- 停止listener,重启DB [oracle@mes-reportdb ~]$ lsnrctl stop SQL> shutdown immediate SQL> startup

1.2 主、备库停止job

  • 保证数据静止,避免job自动运行,修改数据。
-- 主库: show parameter job_queue_processes alter system set job_queue_processes = 0; select * from dba_jobs_running; -- 备库: show parameter job_queue_processes alter system set job_queue_processes = 0; select * from dba_jobs_running;

1.3 查看主库、备库日志是否一致

select max(sequence#) from v$archived_log;

主库:
图片.png

备库:

图片.png

1.4 查看备库同步进程状态

set line222 col PROCESS for a10 col STATUS for a15 select inst_id, process, status, thread#, sequence# from gv$managed_standby;

图片.png

1.5 检查主备库DG相关参数

  • 检查备库是否也配置了log_archive_dest_2等参数。
set line 1000 set pagesize 1000 col name format a25 col VALUE format a100 SELECT a.NAME, a.VALUE FROM v$parameter a WHERE a.name in ('db_name','db_unique_name','log_archive_config','log_archive_dest_1','log_archive_dest_2','log_archive_dest_state_1','log_archive_dest_state_2','remote_login_passwordfile','db_file_name_convert','log_file_name_convert','standby_file_management','fal_server','fal_client');

1.6 主库手动切换日志,检查备库同步情况

主库:

-- 多切几次 alter system archive log current; alter system checkpoint;

观察备库 alert日志: DG 同步正常。

图片.png

1.7 检查主备库standby logfile

set line222 select group#, bytes/1024/1024, status from v$standby_log; select inst_id, status, type, count(*) from gv$logfile group by inst_id, status, type;

主库:
图片.png

备库:

图片.png

 

2. 主备正式切换

2.1 主库下检查是否可以切换

set line222 col database_role for a20 col switchover_status for a20 col PROTECTION_MODE for a25 select name,database_role,protection_mode,switchover_status from v$database;

图片.png

结论:switchover_status 为to standby,说明当前主库可以切换为standby备库。如果状态是session active ,说明当前主库仍然有活动会话,需要kill session 后再切换。

2.2 主库切换为备库 (期间观察主库alert日志)

alter database commit to switchover to physical standby with session shutdown;

图片.png

期间观察主库 alert日志:
图片.png

2.3 备库下检查是否可以切换

set line222 col database_role for a20 col switchover_status for a20 col PROTECTION_MODE for a25 select name,database_role,protection_mode,switchover_status from v$database;

图片.png

结论:switchover_status 为to primary,说明当前备库可以切换为primary住库。

2.4 备库切换主库 (期间观察备库alert日志)

alter database commit to switchover to primary with session shutdown;

图片.png

期间观察备库 alert日志:
图片.png

2.5 打开新的主库

select name,open_mode,database_role from gv$database; alter database open;

图片.png

2.6 重启新的备库

startup mount set line222 select inst_id,name,database_role,open_mode from gv$database;

图片.png

2.7 新的备库启动mrp进程

alter database recover managed standby database using current logfile disconnect;

图片.png

 

3. 切换后同步检查

3.1 查看新的备库同步进程状态

set line222 col PROCESS for a10 col STATUS for a15 select inst_id, process, status, thread#, sequence# from gv$managed_standby;

图片.png

3.2 新的主库手动切换日志,检查备库同步情况

主库

alter system archive log current;

观察备库alert日志: DG同步正常。
图片.png

 

4. 执行转RAC脚本

  • 注意: 此时switchover操作已完成,RAC环境已经变为primary角色,正式环境,但是数据库仍然是一个单机数据库,需要执行单机转RAC升级脚本。
     

4.1 执行将单机转换成rac的脚本

--先将CLUSTER_DATABASE参数改为flase SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile ; SQL> shutdown immediate SQL> startup --重建集群相关的视图 SQL> @?/rdbms/admin/catclust.sql --建议(非必须) @?/rdbms/admin/catalog.sql @?/rdbms/admin/catproc.sql @?/rdbms/admin/utlrp.sql

图片.png

略。。。。

4.2 添加thread2日志组

alter database add logfile thread 2 group 50('+DATA') size 2048M; alter database add logfile thread 2 group 51('+DATA') size 2048M; alter database add logfile thread 2 group 52('+DATA') size 2048M; alter database add logfile thread 2 group 53('+DATA') size 2048M; alter database add logfile thread 2 group 54('+DATA') size 2048M; alter database add logfile thread 2 group 55('+DATA') size 2048M; alter database add logfile thread 2 group 56('+DATA') size 2048M; alter database add logfile thread 2 group 57('+DATA') size 2048M; alter database add logfile thread 2 group 58('+DATA') size 2048M; alter database add logfile thread 2 group 59('+DATA') size 2048M; set line222 col member for a50 select trim(a.thread#) thread#,trim(a.group#) group#,b.member member,a.status status,a.bytes/1024/1024 "size(M)" from v$log a,v$logfile b where a.group#=b.group# order by 1,2;

图片.png

4.3 修改RAC相关参数

alter system set thread=1 scope=spfile sid='orcl1'; alter system set thread=2 scope=spfile sid='orcl2'; alter system set instance_number=1 scope=spfile sid='orcl1'; alter system set instance_number=2 scope=spfile sid='orcl2'; alter system set cluster_database=true scope=spfile;

4.4 添加节点2 undo tablespace

create undo tablespace undotbs2 datafile '+DATA' SIZE 30G autoextend on; alter tablespace undotbs2 add datafile '+DATA' SIZE 30G autoextend on; alter system set undo_tablespace='undotbs1' scope=spfile sid='orcl1'; alter system set undo_tablespace='undotbs2' scope=spfile sid='orcl2';

4.5 查看当前节点状态

SQL> select thread#,status,enabled from v$thread; THREAD# STATUS ENABLED ---------- ------ -------- 1 OPEN PUBLIC 2 CLOSED DISABLED

4.6 启动其他节点

alter database enable public thread 2; select thread#,status,enabled from v$thread;

图片.png

4.7 使用集群命令重启数据库

srvctl add database -d orcl -o /u01/app/oracle/product/11.2.0/db_1 -p +DATA/orcl/spfileorcl.ora
srvctl add instance -d orcl -i orcl1 -n orcl1
srvctl add instance -d orcl -i orcl2 -n orcl2

srvctl stop database -d orcl
srvctl start database -d orcl
srvctl status database -d orcl

 

5. 再次检查DG同步情况

5.1 新的备库,增加节点2 standby logfile

alter database recover managed standby database cancel; alter database add standby logfile thread 2 group 60('+DATA') size 2048M; alter database add standby logfile thread 2 group 61('+DATA') size 2048M; alter database add standby logfile thread 2 group 62('+DATA') size 2048M; alter database add standby logfile thread 2 group 63('+DATA') size 2048M; alter database add standby logfile thread 2 group 64('+DATA') size 2048M; alter database add standby logfile thread 2 group 65('+DATA') size 2048M; alter database add standby logfile thread 2 group 66('+DATA') size 2048M; alter database add standby logfile thread 2 group 67('+DATA') size 2048M; alter database add standby logfile thread 2 group 68('+DATA') size 2048M; alter database add standby logfile thread 2 group 69('+DATA') size 2048M; alter database add standby logfile thread 2 group 70('+DATA') size 2048M; alter database recover managed standby database using current logfile disconnect; SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

图片.png

5.2 查看新的备库同步进程状态

select inst_id, process, status, thread#, sequence# from gv$managed_standby;

图片.png

5.3 新的主库手动切换日志,检查备库同步情况

主库

alter system archive log current;

观察备库alert日志: DG 同步正常。
图片.png

 

6. 新的主备库参数调整

6.1 修改新的主库 service name

-- 按需调整 alter system set service_names='ORCL' scope=both; show parameter service_names

应用程序使用新的tns:

ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) )

6.2 启动job

--新主库: alter system set job_queue_processes=1000; show parameter job_queue_processes --新备库: alter system set job_queue_processes=1000; show parameter job_queue_processes

图片.png

6.4 检查temp 表空间

select file_name from dba_temp_files;

图片.png

结论:switchover切换后,tempfile都recreate成功,无需重建temp表空间。

6.5 对比参数文件

  • 检查新的主库是否有其他需要修改的参数。

略。。。。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论