前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Data Guard Broker进行Data Guard物理备用库配置

使用Data Guard Broker进行Data Guard物理备用库配置

作者头像
Yunjie Ge
发布2022-04-24 09:33:49
7340
发布2022-04-24 09:33:49
举报
文章被收录于专栏:数据库与编程

本文讲解在Oracle Database 19c中使用Data Guard Broker进行Data Guard物理备用库配置。

1、主服务器配置

1.1 归档模式

检查主数据库是否处于归档日志模式。

代码语言:javascript
复制
SELECT log_mode FROM v$database;
 
LOG_MODE
------------
NOARCHIVELOG
 
SQL>

如果是 NOARCHIVELOG 模式,则切换到 ARCHIVELOG 模式。

代码语言:javascript
复制
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

通过发出以下命令启用强制日志记录。

代码语言:javascript
复制
ALTER DATABASE FORCE LOGGING;
-- 确保至少存在一个日志文件。
ALTER SYSTEM SWITCH LOGFILE;

在主数据库上创建备用重做日志(在切换的情况下)。备用重做日志应该至少和最大的联机重做日志一样大,并且与联机重做日志相比,每个线程应该有一个额外的组。在我的例子中,必须在两台服务器上创建以下备用重做日志。

代码语言:javascript
复制
-- 如果使用Oracle Managed Files(OMF)。
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;

-- 如果未使用Oracle Managed Files(OMF)。
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo04.log') SIZE 50M;

如果您想使用闪回数据库,请立即在主数据库上启用它,因此它也将在备用数据库上启用。它非常有用,你可以使用以下命令启用闪回:

代码语言:javascript
复制
ALTER DATABASE FLASHBACK ON;

1.2 初始化参数

检查 DB_NAME 和 DB_UNIQUE_NAME 参数的设置。在这种情况下,在主数据库上都设置为 “cdb1”。

代码语言:javascript
复制
SQL> show parameter db_name
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_name                  string  cdb1
SQL> show parameter db_unique_name
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_unique_name               string  cdb1
SQL>

备用数据库的 DB_NAME 与主数据库的 DB_NAME 相同,但它必须具有不同的DB_UNIQUE_NAME 值。对于此示例,备用数据库的值为 “cdb1_stby”。

确保已设置 STANDBY_FILE_MANAGEMENT 参数。可以使用以下命令进行设置:

代码语言:javascript
复制
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

1.3 服务配置

两台服务器上的 “$ORACLE_HOME/network/admin/tnsnames.ora” 文件中都需要主数据库和备用数据库的条目。您可以使用网络配置实用程序(netca)或手动创建这些。在本示例都使用以下条目。请注意在条目中使用 SID 而不是 SERVICE_NAME。这很重要,因为代理在关闭时需要连接到数据库,因此服务将不存在。

代码语言:javascript
复制
cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
 
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

主服务器上的 “$ORACLE_HOME/network/admin/listener.ora” 文件包含以下配置。

代码语言:javascript
复制
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db_1)
      (SID_NAME = cdb1)
    )
  )
 
ADR_BASE_LISTENER = /u01/app/oracle

备用服务器上的 “$ORACLE_HOME/network/admin/listener.ora” 文件包含以下配置。由于代理在关闭时需要连接到数据库,因此我们不能依赖于监听器的自动注册,因此数据库的显式条目。

代码语言:javascript
复制
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_stby_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db_1)
      (SID_NAME = cdb1)
    )
  )
 
ADR_BASE_LISTENER = /u01/app/oracle

完成 listener.ora 修改后,请使用以下命令在两台服务器上重新启动监听器。

代码语言:javascript
复制
lsnrctl stop
lsnrctl start

2、备用服务器配置

2.1 准备 DUPLICATE

为备用数据库创建名为 “/tmp/initcdb1” 的参数文件,内容如下:

代码语言:javascript
复制
*.db_name='cdb1'

在备用服务器上创建必要的目录。

代码语言:javascript
复制
mkdir -p /u01/app/oracle/oradata/cdb1/pdbseed
mkdir -p /u01/app/oracle/oradata/cdb1/pdb1
mkdir -p /u01/app/oracle/fast_recovery_area/cdb1
mkdir -p /u01/app/oracle/admin/cdb1/adump

创建密码文件,SYS密码与主数据库的密码匹配。

代码语言:javascript
复制
$ orapwd file=/u01/app/oracle/product/19.0.0/db_1/dbs/orapwcdb1 password=Password1 entries=10

2.2 使用 DUPLICATE 创建备用

使用临时 “init.ora” 文件启动备用服务器上的辅助实例。

代码语言:javascript
复制
$ export ORACLE_SID=cdb1
$ sqlplus / as sysdba
 
SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';

连接到 RMAN,为 TARGET 和 AUXILIARY 实例指定完整的连接字符串。请勿尝试使用 OS 身份验证。

代码语言:javascript
复制
$ rman TARGET sys/Password1@cdb1 AUXILIARY sys/Password1@cdb1_stby

现在发出以下 DUPLICATE 命令:

代码语言:javascript
复制
DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
SET db_unique_name='cdb1_stby' COMMENT 'Is standby'
  NOFILENAMECHECK;

如果需要转换文件位置或更改任何初始化参数,可以在 DUPLICATE 期间使用 SET 命令执行此操作。如下所示:

代码语言:javascript
复制
DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
SET db_unique_name='cdb1_stby' COMMENT 'Is standby'
SET db_file_name_convert='/original/directory/path1/','/new/directory/path1/','/original/directory/path2/','/new/directory/path2/'
SET log_file_name_convert='/original/directory/path1/','/new/directory/path1/','/original/directory/path2/','/new/directory/path2/'
SET job_queue_processes='0'
  NOFILENAMECHECK;

命令中各个项的简要说明如下:

· FOR STANDBY:这告诉 DUPLICATE 命令将用于备用数据库,因此它不会强制更改 DBID。

· FROM ACTIVE DATABASE:DUPLICATE 将直接从源数据文件创建,无需额外的备份步骤。

· DORECOVER:DUPLICATE 将包括恢复步骤,使待机状态达到当前时间点。

· SPFILE:允许我们在从源服务器复制 spfile 时重置它。

· NOFILENAMECHECK:不检查目标文件位置。

以上命令完成后,我们就可以开始使用 Broker 了。

3、启用 Broker

此时我们有一个主数据库和一个备用数据库,所以现在我们需要开始使用 Data Guard Broker 来管理它们。连接到两个数据库(主数据库和备用数据库)并发出以下命令:

代码语言:javascript
复制
ALTER SYSTEM SET dg_broker_start=true;

在主服务器上,发出以下命令以向代理注册主服务器:

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:39:33 2018
Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS cdb1 CONNECT IDENTIFIER IS cdb1;
Configuration "my_dg_config" created with primary database "cdb1"
DGMGRL>

现在添加备用数据库。

代码语言:javascript
复制
DGMGRL> ADD DATABASE cdb1_stby AS CONNECT IDENTIFIER IS cdb1_stby MAINTAINED AS PHYSICAL;
Database "cdb1_stby" added
DGMGRL>

现在我们启用新配置。

代码语言:javascript
复制
DGMGRL> ENABLE CONFIGURATION;
Enabled.
DGMGRL>

以下命令显示如何从 broker 检查数据库的配置和状态:

代码语言:javascript
复制
DGMGRL> SHOW CONFIGURATION;
 
Configuration - my_dg_config
 
Protection Mode: MaxPerformance
Members:
cdb1      - Primary database
cdb1_stby - Physical standby database
 
Fast-Start Failover: DISABLED
 
Configuration Status:SUCCESS   (status updated 26 seconds ago)
 
DGMGRL> SHOW DATABASE cdb1;
 
Database - cdb1
 
Role:               PRIMARY
Intended State:     TRANSPORT-ON
Instance(s):
cdb1
 
Database Status:
SUCCESS
 
DGMGRL> SHOW DATABASE cdb1_stby;
 
Database - cdb1_stby
 
Role:               PHYSICAL STANDBY
Intended State:     APPLY-ON
Transport Lag:      0 seconds (computed 1 second ago)
Apply Lag:          0 seconds (computed 1 second ago)
Average Apply Rate: 5.00 KByte/s
Real Time Query:    OFF
Instance(s):
cdb1
 
Database Status:
SUCCESS
 
DGMGRL>

4、数据库切换

数据库可以是两种互斥模式之一(主用或备用)。可以在运行时更改这些角色,而不会丢失数据或重置日志。此过程称为“切换”,可以使用以下命令执行。连接到主数据库(cdb1)并切换到备用数据库(cdb1_stby)。

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:39:33 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1_stby;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1_stby"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1_stby" is opening...
Operation requires start up of instance "cdb1" on database "cdb1"Starting instance "cdb1"...ORACLE instance started.Database mounted.Switchover succeeded, new primary is "cdb1_stby"
DGMGRL>

让我们切换回原来的主数据库。连接到新主服务器(cdb1_stby)并切换到新的备用数据库(cdb1)。

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1_stby
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1" is opening...
Operation requires start up of instance "cdb1" on database "cdb1_stby"Starting instance "cdb1"...ORACLE instance started.Database mounted.Switchover succeeded, new primary is "cdb1"
DGMGRL>

5、数据库故障转移

如果主数据库不可用,则可以使用以下语句将备用数据库激活为主数据库。连接到备用数据库(cdb1_stby)并进行故障转移。

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1_stby
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> FAILOVER TO cdb1_stby;
Performing failover NOW, please wait...
Failover succeeded, new primary is "cdb1_stby"
DGMGRL>

由于备用数据库现在是主数据库,因此应立即进行数据库备份。

现在可以将原始主数据库配置为备用数据库。如果在主数据库上启用了闪回数据库,则可以使用以下命令相对轻松地完成此操作。

代码语言:javascript
复制
DGMGRL> REINSTATE DATABASE cdb1;
Reinstating database "cdb1", please wait...
Operation requires shut down of instance "cdb1" on database "cdb1"
Shutting down instance "cdb1"...
ORACLE instance shut down.
Operation requires start up of instance "cdb1" on database "cdb1"Starting instance "cdb1"...ORACLE instance started.Database mounted.
Continuing to reinstate database "cdb1" ...
Reinstatement of database "cdb1" succeeded
DGMGRL>

如果未启用闪回数据库,则必须手动将 cdb1 重新创建为备用数据库。基本过程与您之前所做的相反。如下命令:

代码语言:javascript
复制
# 1) 清理旧实例。
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF
 
rm -Rf /u01/app/oracle/oradata/cdb1/*
rm -Rf /u01/app/oracle/fast_recovery_area/cdb1
rm -Rf /u01/app/oracle/fast_recovery_area/cdb1_stby
rm -Rf /u01/app/oracle/admin/cdb1mkdir -p /u01/app/oracle/fast_recovery_area/cdb1mkdir -p /u01/app/oracle/admin/cdb1/adumpmkdir -p /u01/app/oracle/oradata/cdb1/pdbseedmkdir -p /u01/app/oracle/oradata/cdb1/pdb1
rm $ORACLE_HOME/dbs/spfilecdb1.ora
 
export ORACLE_SID=cdb1
sqlplus / as sysdba <<EOF
STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
EXIT;
EOF
# 2) 连接到 RMAN.
$ rman TARGET sys/Password1@cdb1_stby AUXILIARY sys/Password1@cdb1
# 3) 复制数据库。
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
SPFILE
SET db_unique_name='cdb1' COMMENT 'Is standby'
NOFILENAMECHECK;
# 4) 连接到当前主节点上的 DGMDRL。
$ dgmgrl sys/Password1@cdb1_stby
# 5) 启用新备用数据库。
DGMGRL> ENABLE DATABASE cdb1;

6、闪回数据库

在上一节中已经提到过,但值得再次关注闪回数据库。虽然切换/切换对主数据库和备用数据库都是安全的,但故障转移会使原始主数据库无法转换为备用数据库。如果未启用闪回数据库,则必须废弃原始主数据库并将其重新创建为备用数据库。

另一种方法是在主服务器上启用闪回数据库(如果需要,还可以启用备用数据库),以便在发生故障转移时,可以将主数据库闪回到故障转移之前的时间并快速转换为备用数据库,如上所示。

7、只读备用和 Active Data Guard

配置备用数据库后,可以以只读模式打开它以允许查询访问。这通常用于将报告卸载到备用服务器,从而释放主服务器上的资源。以只读模式打开时,归档日志传送将继续,但托管恢复将停止,因此备用数据库将逐渐过时,直到恢复管理恢复。

要将备用数据库切换到只读模式,请执行以下操作。

代码语言:javascript
复制
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;

重置管理恢复,请执行以下操作。

代码语言:javascript
复制
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

在 11g 中,Oracle 引入了活动数据保护功能。这允许备用数据库以只读模式打开,但仍应用重做信息。这意味着一个备用系统可以用于查询,但仍然是最新的。此功能存在许可问题,但以下命令显示如何启用活动数据保护。

代码语言:javascript
复制
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

由于托管恢复继续使用 Active Data Guard,因此在这种情况下无需从只读模式切换回托管恢复。

8、快照备用

在 11g 中引入,快照备用允许备用数据库以读写模式打开。当切换回备用模式时,在读写模式下所做的所有更改都将丢失。这是使用闪回数据库实现的,可以正常工作,备用数据库不需要显式启用闪回数据库来利用此功能。

连接到主(cdb1)数据库并将备用数据库(cdb1_stby)转换为快照备用数据库。

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CONVERT DATABASE cdb1_stby TO SNAPSHOT STANDBY;
Converting database "cdb1_stby" to a Snapshot Standby database, please wait...
Database "cdb1_stby" converted successfully
DGMGRL>

完成快照备用后,将其转换回备用数据库。

代码语言:javascript
复制
$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CONVERT DATABASE cdb1_stby TO PHYSICAL STANDBY;
Converting database "cdb1_stby" to a Physical Standby database, please wait...
Operation requires shut down of instance "cdb1" on database "cdb1_stby"
Shutting down instance "cdb1"...
Database closed.
Database dismounted.
ORACLE instance shut down.
Operation requires start up of instance "cdb1" on database "cdb1_stby"Starting instance "cdb1"...ORACLE instance started.Database mounted.
Continuing to convert database "cdb1_stby" ...Database "cdb1_stby" converted successfully
DGMGRL>

备用数据库再次处于托管恢复状态,并恢复归档日志传送。请注意,闪回数据库仍未启用。

代码语言:javascript
复制
DGMGRL> SHOW CONFIGURATION;
 
Configuration - my_dg_config
 
Protection Mode: MaxPerformance
Members:
cdb1      - Primary database
cdb1_stby - Physical standby database
 
Fast-Start Failover: DISABLED
 
Configuration Status:SUCCESS   (status updated 38 seconds ago)
 
DGMGRL>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山东Oracle用户组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、主服务器配置
    • 1.1 归档模式
      • 1.2 初始化参数
        • 1.3 服务配置
        • 2、备用服务器配置
          • 2.1 准备 DUPLICATE
            • 2.2 使用 DUPLICATE 创建备用
            • 3、启用 Broker
            • 4、数据库切换
            • 5、数据库故障转移
            • 6、闪回数据库
            • 7、只读备用和 Active Data Guard
            • 8、快照备用
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档