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

Oracle ADG中如何移除一个备库节点

DBA闲思杂想录 2022-07-23
2310

本文简单介绍、总结一下,如何从Oracle 12C的ADG关系中移除一个备库,下面案例的操作过程仅供参考,具体操作根据实际情况进行调整。大体步骤如下所示。

环境介绍:

当前环境为一主两备库的ADG架构

DG_DB_01    CentOS 7.9.2009   Oracle 12C
DG_DB_02    CentOS 7.9.2009   Oracle 12C
DG_DB_03    CentOS 7.9.2009   Oracle 12C

我们为了节省资源,想将其中一台备库DG_DB_02从ADG关系中拿走,将DG从一主两备变成一主一备的关系.

操作步骤

首先检查DG中主库和备库的一些参数,我们分别在DG的主库和备库上执行下面SQL,了解确认相关参数的配置信息

#备库DG_DB_02上查看下面三个参数

show parameter db_unique_name;
show parameter log_archive_dest_1;
show parameter log_archive_dest_2;
show parameter log_archive_dest_3;

#主库DG_DB_01上执行下面SQL,查看相关参数

SET linesize 200
SET pagesize 80 col name
FOR a24 col value
FOR a80
SELECT name,
       value
FROM v$parameter
WHERE name IN ('log_archive_config',
               'db_file_name_convert',
               'log_file_name_convert',
               'log_archive_dest_1',
               'log_archive_dest_2',
               'log_archive_dest_3',
               'log_archive_dest_state_1',
               'log_archive_dest_state_2',
               'log_archive_dest_state_3',
               'dg_broker_start',
               'dg_broker_config_file1',
               'dg_broker_config_file2',
               'dg_broker_config_file3',
               'standby_archive_dest',
               'standby_file_management',
               'fal_server',
               'fal_client',
               'dg_broker');

由于这里没有启用Data Guard Broker,那么下面操作都是手动操作

主库DG_DB_01操作

SQL> show parameter log_archive_dest_2;
SQL> show parameter log_archive_config;
NAME                         TYPE             VALUE
---------------------- ---------------- ------------------------------
log_archive_config         string       dg_config=(dg_master,dg_slave,dg_slave2)
SQL>

执行下面命令,将log_archive_dest_2参数清空,另外,从参数log_archive_config中移除备库DG_DB_02的db_unique_name:

alter system set log_archive_dest_2='' scope=both;
alter system set log_archive_config='dg_config=(dg_master,dg_slave2)' scope=both;

如果是RAC环境的话,执行下面SQL语句

alter system set log_archive_dest_2='' scope=both sid='*';
alter system set log_archive_config='dg_config=(dg_master,dg_slave2)' scope=both sid='*';

检查确认修改成功

show parameter log_archive_dest_2;
show parameter log_archive_config;

如果fal_server指向了这个DG_DB_02这个备库的话,那么必须从参数fal_server将其移除

SQL> show parameter fal_server;
NAME                         TYPE                  VALUE
--------------------- ----------------- ------------------------------
log_archive_config         string        dg_slave,dg_slave2



SQL> alter system set fal_server='dg_slave2' scope=both;

备库DG_DB_02操作

--清空参数log_archive_dest_n的值,这里n为2,log_archive_dest_2

show parameter log_archive_dest_2;
alter system set log_archive_dest_2='' scope=both;

--修改log_archive_config

SQL>show parameter log_archive_config
SQLshow parameter log_archive_config;
NAME                        TYPE                      VALUE
------------------ --------------------- ------------------------------
log_archive_config     string            dg_config=(dg_master,dg_slave,dg_slave2)
SQL>
SQL>alter system set log_archive_config='' scope=both;

如果DG环境是DG borker的话

主库

在Broker中移除备库

dgmgrl sys/****@*****
dgmgrl> disable database <db_unique_name>; #备库的db_unique_name
dgmgrl> remove database <db_unique_name>;
dgmgrl> show configuration verbose; #备库不会显示在配置文件中。

从sqlplus中进入数据库

sqlplus sys/****@***** as sysdba
show parameter log_archive_dest_n  #备库对于的规定日志日志,n用具体数字替换

alter system set log_archive_dest_n='' scope=both sid='*' ;
show parameter log_archive_config;
alter system set log_archive_config='dg_config=(PRIMARY,STANDBY1,STANDBY2)' scope=both

备库

sqlplus sys/****@**** as sysdba
show parameter dg_broker_config;
alter system set DG_BROKER_CONFIG_FILE1='' scope=both sid='*';
alter system set DG_BROKER_CONFIG_FILE2='' scope=both sid='*';


文章转载自DBA闲思杂想录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论