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

oracle ADG 跨版本跨平台搭建实测

原创 张洋华 2020-06-30
4499

概述

最近有个客户在咨询adg跨版本相关问题,大伙都知道不能跨数据库版本,那11.2.0.1到11.2.0.4呢?12.2.0到19c呢?和几个同事讨论后,发现大家都思考过这个问题,但是又不能确定正确答案,引发我的好奇心,确切的说触发知识盲区了hhhh;希望读者看本篇blog能有底气的回答下面的问题。

  1. Oracle ADG跨数据库版本可以搭建吗?
  2. Oracle ADG跨平台版本可以搭建吗?
  3. 跨版本搭建ADG后会出现什么问题?
  4. 跨版本搭建ADG后是否可以真正实现数据迁移?

目录

一、跨数据库版本搭建ADG

环境:
主库:12.2.0.1.0 os:redhat 7.6
备库:19.5.0.0.0 os:redhat 7.6
技能比较熟练的读者就可以跳过1.1章节

使用两种搭建方法来测试是否能完成跨数据库版本搭建

1.1 前期准备

这里的前期准备工作有参数配置、日志组调整、tns配置等,不管是哪个种方式搭建都需要做的;

1.1.1 归档模式和附加日志

shutdown immediate startup mount alter database archivelog; alter database open; alter database force logging;

检查:

SQL> select log_mode,force_logging from v$database; LOG_MODE FORCE_LOGGING ------------ --------------------------------------- ARCHIVELOG YES

1.1.2 添加1621静态监听

--集群添加 srvctl add listener -l LSNR_DG -p 1621 --- listener.ora 添加以下内容 SID_LIST_LSNR_DG = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = hygge) --根据实际更改 (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) --根据实际更改 (SID_NAME = hygge1) --根据实际更改 ) ) --打开监听 srvctl start listener -l lsnr_dg --检查监听状态 lsnrctl status

1.1.3 配置tnsname.ora

hyggeold = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.218.51)(PORT = 1621)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hygge) ) ) hyggenew = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.218.21)(PORT = 1621)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.218.23)(PORT = 1621)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hygge) ) ) --检查 tnsping hyggeold tnsping hyggenew

1.1.4 修改主库参数

这里对每个参数是什么意思,怎么设置就不赘述了。

alter system set standby_file_management=AUTO scope=both sid='*'; alter system set log_archive_config='DG_CONFIG=(hygge, standby)' scope=both sid='*'; alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=hygge' scope=both sid='*'; alter system set log_archive_dest_2='SERVICE=hyggenew LGWR SYNC VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' scope=both sid='*' alter system set fal_server=hyggenew scope=both sid='*'; alter system set fal_client=hyggeold scope=both sid='*'; alter system set db_file_name_convert='+DATA','+DATA' scope=spfile sid='*'; --位置都是+data下其实也可以不用设置这个参数 alter system set log_file_name_convert='+DATA/HYGGE/ONLINELOG/','+DATA/STANDBY/ONLINELOG/' scope=spfile sid='*';

1.1.5 添加standby 日志

在主库添加就可以了

alter database add standby logfile thread 1 group 11 size 200M; alter database add standby logfile thread 1 group 12 size 200M; alter database add standby logfile thread 1 group 13 size 200M; alter database add standby logfile thread 1 group 14 size 200M;

1.1.6 备库上操作

---备库加库 srvctl add database -db standby -oraclehome /u01/app/oracle/product/19.3.0/dbhome_1 -diskgroup DATA,FRA -dbname hygge --- 添加实例 srvctl add instance -db standby -instance standby1 -n hygge1

1.1.7 拷贝密码文件

均在asm中操作 pwcopy pwdyngedb.256.1037464551 /home/grid/pwdhygge --主服务器复制出来 scp pwdhygge 192.168.218.21:/home/grid/pwdstandby --scp传输密码文件 pwcopy /home/grid/pwdstandby +DATA --dbuniquename standby --备服务器复制进去 --将密码文件注册到数据库资源中 srvctl modify database -db standby -pwfile '+DATA/STANDBY/PASSWORD/pwdstandby.322.1044481127'

1.1.8 生产备库参数文件

将主库参数文件中参数修改后,传到备库

--编辑参数文件,并对参数文件进行修改(主库操作) create pfile='/home/oracle/1.ora' from spfile; scp /home/oracle/1.ora hygge:/home/oracle/1.ora
  • 根据修改后的参数文件启动到nomount(备库)
startup nomount pfile='/home/oracle/1.ora';

1.2 duplicate方式

[oracle@hygge1 ~]$ rman target sys/123456@hyggeold auxiliary sys/123456@hyggenew nocatalog Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jun 30 21:41:28 2020 Version 19.5.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00554: initialization of internal recovery manager package failed RMAN-06429: TARGET database is not compatible with this version of RMAN RMAN-06618: RMAN client and database version mismatch; indicated database version is 12.2.0.1

由于oracle的版本不同,就不能使用rman duplicate搭建。

1.3 异机恢复的方式

异机恢复就是使用rman的全库备份恢复来搭建adg

1.3.1 主库上全库备份

--全部备份,如果库很大可以压缩 backup database format '/home/oracle/backup/%U.bak'; --待全库备份完成后,对控制文件进行备份 backup current controlfile for standby format'/home/oracle/backup/std_control01.ctl';
  • 将备份集通过scp传到备库服务器
scp /home/oracle/backup/* 192.168.218.21:/home/oracle/backup/

1.3.2 在19c的软件上恢复全库

  • 先恢复控制文件(注意,恢复后将参数文件中的控制文件名字改成asm实际的名字)
restore standby controlfile from '/home/oracle/backup/std_control01.ctl'; --然后将库启到mount状态 alter database mount;
  • 然后恢复数据文件
run { SET NEWNAME FOR DATABASE TO '+DATA'; restore database; switch datafile all; recover database; }

1.3.3 应用日志检查是否同步

  • 成功应用上日志
SQL> alter database recover managed standby database using current logfile disconnect from session; Database altered.
  • 日志传输和应用均无延迟
NAME VALUE UNIT TIME_COMPUTED ------------------------- -------------------- ------------------------------ ------------------------------ transport lag +00 00:00:00 day(2) to second(0) interval 06/30/2020 22:16:10 apply lag +00 00:00:00 day(2) to second(0) interval 06/30/2020 22:16:10
  • 进程状态也是正常的
SQL> select process,client_process,THREAD#, sequence#,status from v$managed_standby; PROCESS CLIENT_P THREAD# SEQUENCE# STATUS --------- -------- ---------- ---------- ------------ DGRD N/A 0 0 ALLOCATED ARCH ARCH 0 0 CONNECTED DGRD N/A 0 0 ALLOCATED ARCH ARCH 1 24 CLOSING ARCH ARCH 0 0 CONNECTED ARCH ARCH 1 23 CLOSING RFS Archival 1 0 IDLE RFS LGWR 1 25 IDLE RFS UNKNOWN 0 0 IDLE MRP0 N/A 1 25 APPLYING_LOG 10 rows selected.
  • 主库日志应用序列号,也是与备库正常相差小于等于1
DB Role THREAD# MAX(SEQUENCE#) --------- ---------- -------------- Primary : 1 26 Standby : 1 25
  • 主库主动切换日志,观察备库alert日志也有变化
2020-06-30T22:18:17.734556+08:00 rfs (PID:51571): Selected LNO:12 for T-1.S-27 dbid 4195110742 branch 1044439066 2020-06-30T22:18:17.738354+08:00 MRP0 (PID:54199): Media Recovery Waiting for T-1.S-27 (in transit) 2020-06-30T22:18:17.770535+08:00 ARC0 (PID:51517): Archived Log entry 24 added for T-1.S-26 ID 0xfa0ba753 LAD:1 2020-06-30T22:18:17.775983+08:00 Recovery of Online Redo Log: Thread 1 Group 12 Seq 27 Reading mem 0 Mem# 0: +DATA/STANDBY/ONLINELOG/group_12.379.1044482047 Mem# 1: +DATA/STANDBY/ONLINELOG/group_12.341.1044482047

1.3.4 异机恢复搭建跨平台adg存在的问题

  1. 无法正常将备库open(read only)
SQL> alter database open read only 2 ; alter database open read only * ERROR at line 1: ORA-00603: ORACLE server session terminated by fatal error ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option Process ID: 51532 Session ID: 3186 Serial number: 36053
  1. 正因为无法open,也无法查询和验证备库数据

二、跨平台搭建ADG

这个跨平台异构搭建adg,官方已经有所支持,所支持列表如下:
在物理 Data Guard 中对异构主备系统的支持 (Doc ID 1602437.1)
在这里插入图片描述

三、跨版本搭建adg无法open处理

由于从主库12.2恢复到19.5的软件上,需要进行数据库升级处理;但是由于是备库,所以必须得强制切换成主库后再做升级。

3.1 强制failover备库

--停止应用恢复模式 alter database recover managed standby database finish; --转换为primary db alter database commit to switchover to primary;

3.2 升级备库版本

--升级必须将这个参数成false ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile ; -- 将备库已升级模式启动 alter database open upgrade; --跑升级脚本 @?/rdbms/admin/catupgrd.sql; cd $ORACLE_HOME/rdbms/admin $ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql

这个升级脚本跑了2个多小时!

总结

  1. 跨版本搭建oracle adg可以通过异机恢复实现(adg备库无法open,adg部分功能无法实现)
  2. 跨平台搭建oracle adg在官方支持范围内也是可以实现
  3. 测试中oracle adg跨版本的主备数据是能同步的
  4. oracle adg跨版本搭建后无法open,只能通过切换主库后upgrade拉起,可以作为数据迁移+版本升级的参考方案,但是慎用,毕竟oracle人家没官方说能这么玩。
最后修改时间:2020-07-05 21:08:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论