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

概述

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

Oracle ADG跨数据库版本可以搭建吗?

Oracle ADG跨平台版本可以搭建吗?

跨版本搭建ADG后会出现什么问题?

跨版本搭建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存在的问题

无法正常将备库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

正因为无法open,也无法查询和验证备库数据

二、跨平台搭建ADG

这个跨平台异构搭建adg,官方已经有所支持,所支持列表如下:

在物理 Data Guard 中对异构主备系统的支持 (Doc ID 1602437.1)

oracle 跨平台adg,oracle ADG 跨版本跨平台搭建实测_第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个多小时!

总结

跨版本搭建oracle adg可以通过异机恢复实现(adg备库无法open,adg部分功能无法实现)

跨平台搭建oracle adg在官方支持范围内也是可以实现

测试中oracle adg跨版本的主备数据是能同步的

oracle adg跨版本搭建后无法open,只能通过切换主库后upgrade拉起,可以作为数据迁移+版本升级的参考方案,但是慎用,毕竟oracle人家没官方说能这么玩。

你可能感兴趣的:(oracle,跨平台adg)