Oracle ADG搭建

Oracle ADG搭建

参考:Oracle DG搭建–rman.txt - 墨天轮文档 (modb.pro)

安装环境

主备库硬件最好一致。数据库版本一致

数据库版本:11g、19c

主库 192.168.236.146 数据库实例名:ORCL db_unique_name:ORCLPR

从库 192.168.236.147 数据库实例名:ORCL db_unique_name:ORCLST

主库需要安装数据库软件并且建库,备库仅需要安装数据库软件。

主备库的 .bash_profile 文件中 ORACLE_SID=ORCL

一、配置静态监听

1 配置静态监听

1.1 主库监听

cd /opt/oracle/oracle/product/11.2.0/dbhome_1/network/admin/
vim listener.ora
#添加以下内容
SID_LIST_LISTENER=
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCLPR)
      (ORACLE_HOME = /opt/oracle/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = ORCL)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.236.146)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /opt/oracle

1.2 备库监听

cd /opt/oracle/oracle/product/11.2.0/dbhome_1/network/admin/
vim listener.ora
#添加以下内容
SID_LIST_LISTENER=
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCLST)
      (ORACLE_HOME = /opt/oracle/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = ORCL)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.236.147)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /opt/oracle

2 主库备库使用同一个网络服务名

#主库
vim tnsnames.ora
#添加以下内容
ORCLPR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.236.146)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLPR)
    )
  )

ORCLST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.236.147)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLST)
    )
  )
#备库 将主库的tnsnames.ora复制到备库
scp tnsnames.ora 192.168.236.147:/opt/oracle/oracle/product/11.2.0/dbhome_1/network/admin/

#测试
tnsping ORCLPR
tnsping ORCLST

二、主库DG相关参数配置

1 设置归档位置和主库角色

1.1 创建standbylog目录和archivelog目录

[oracle@adg1 ORCL]$ mkdir /opt/oracle/oradata/ORCL/standbylog
[oracle@adg1 ORCL]$ mkdir /opt/oracle/oradata/ORCL/archivelog

1.2 主库设置归档位置

SQL> startup mount
SQL> alter system set log_archive_dest_1='LOCATION=/opt/oracle/oradata/ORCL/archivelog valid_for=(all_logfiles, all_roles) db_unique_name=ORCLPR' scope=spfile;

2 设置归档位置和备库角色

SQL> alter system set log_archive_dest_2='SERVICE=ORCLST lgwr sync valid_for=(online_logfile, primary_role) db_unique_name=ORCLST' scope=spfile;

3 DG服务名配置

SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCLPR, ORCLST)' scope=spfile;

4 设置归档可用

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;

5 配置 FAL_SERVER

这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的到的重做日志间有缺口的时候。

SQL> alter system set FAL_SERVER=ORCLST scope=spfile;
alter system set FAL_CLIENT=ORCLPR scope=spfile;

6 设置主库的 db_unique_name

SQL> alter system set db_unique_name=ORCLPR scope=spfile;

7 数据文件同步配置

如果需要在主库添加或者删除数据文件时,这些文件是否会在备库添加或删除,默认此参数是MANUAL手工方式 (MANUAL不会同步到备库,AUTO自动同步)

SQL> alter system set standby_file_management='AUTO';

8关机启动创建pfile

SQL> shut immediate;
create pfile from spfile;

三、备库创建目录

1 创建目录

[oracle@adg2 admin]$ mkdir -p /opt/oracle/oradata/ORCL/standbylog
[oracle@adg2 admin]$ mkdir -p /opt/oracle/oradata/ORCL/archivelog
[oracle@adg2 admin]$ mkdir -p /opt/oracle/admin/ORCL/adump
[oracle@adg2 admin]$ mkdir -p /opt/oracle/fast_recovery_area/ORCL

四、主库创建standby日志

#创建
SQL> alter database add standby logfile group 11 '/opt/oracle/oradata/ORCL/standbylog/standby11.log' size 150M;
SQL> alter database add standby logfile group 12
'/opt/oracle/oradata/ORCL/standbylog/standby12.log' size 150M;
SQL> alter database add standby logfile group 13 '/opt/oracle/oradata/ORCL/standbylog/standby13.log' size 150M;
SQL> alter database add standby logfile group 14 '/opt/oracle/oradata/ORCL/standbylog/standby14.log' size 150M;
#查询
SQL> select * from v$standby_log;
SQL> select * from v$logfile;
#删除
SQL> alter database drop standby logfile group 11;

五、连接主库进行duplicate操作

1 主库备库开启监听

lsnrctl stop
lsnrctl start

2 把主库的pfile传到备库相应位置并修改

#主库
cd /opt/oracle/oracle/product/11.2.0/dbhome_1/dbs
#发送到备库
scp initORCL.ora 192.168.236.147:/opt/oracle/oracle/product/11.2.0/dbhome_1/dbs/
#备库修改参数
*.db_unique_name='ORCLST'
*.fal_client='ORCLST'
*.fal_server='ORCLPR'
*.log_archive_config='DG_CONFIG=(ORCLST, ORCLPR)'
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/ORCL/archivelog valid_for=(all_logfiles, all_roles) db_unique_name=ORCLST'
*.log_archive_dest_2='SERVICE=ORCLPR lgwr sync valid_for=(online_logfile, primary_role) db_unique_name=ORCLPR'

3 备库创建spfile文件

#备库
SQL> create spfile from pfile='/opt/oracle/oracle/product/11.2.0/dbhome_1/dbs/initORCL.ora';

4 备库创建密码文件 (密码和主库一致)

[oracle@adg2 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwORCL password=oracle entries=5
#19c 解决密码至少8位限制
orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle format=12 entries=5

5 备库启动到nomount状态

6 在primary端通过 rman duplicate 创建备库

[oracle@adg1 dbs]$ rman target sys/oracle@ORCLPR auxiliary sys/oracle@ORCLST [nocatalog]
RMAN> duplicate target database for standby from active database nofilenamecheck;

错误:

RMAN> duplicate target database for standby from active database nofilenamecheck;

Starting Duplicate Db at 02-APR-23
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 04/02/2023 22:16:59
RMAN-05501: aborting duplication of target database
RMAN-06403: could not obtain a fully authorized session
RMAN-04006: error from auxiliary database: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

原因:备库实例名问题(大小写)

SQL> show parameter instance_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
instance_name			     string	 orcl
#指定实例名 (.bash_profile没有生效)
[oracle@adg2 dbs]$ export ORACLE_SID=ORCL

错误:

RMAN> duplicate target database for standby from active database nofilenamecheck;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 09/22/2023 09:44:17
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-06136: Oracle error from auxiliary database: ORA-17629: Cannot connect to the remote database server
ORA-17627: ORA-12154: TNS:could not resolve the connect identifier specified
ORA-17629: Cannot connect to the remote database server

原因:备库没有创建tns,将主库tnsnames.ora通过scp传到备库对应路径下

六、验证

#备库开启同步
SQL> alter database recover managed standby database disconnect from session;
#主库
SQL> alter system switch logfile;

System altered.

SQL> archive log list
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       /opt/oracle/oradata/ORCL/archivelog
Oldest online log sequence     17
Next log sequence to archive   19
Current log sequence	       19
#备库
SQL> archive log list
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       /opt/oracle/oradata/ORCL/archivelog
Oldest online log sequence     0
Next log sequence to archive   0
Current log sequence	       19

如果主从库的当前日志序号一致,证明备库在跟着主库改变。至此,oracle adg 搭建完成。

七、在备库开启实时日志应用

#开启同步
SQL> alter database recover managed standby database disconnect from session;
#暂停同步
SQL> alter database recover managed standby database cancel;

19c 开启同步命令与11g有变化,但也兼容原先命令

#实时同步
alter database recover managed standby database disconnect;
#日志切换才同步
alter database recover managed standby database using archived logfile disconnect;
#取消同步
alter database recover managed standby database cancel;
#查看状态
select name,open_mode,database_role,protection_mode,protection_level from v$database;

DG Broker

DG Broker:实现一条命令完成DG切换

配置监听同ADG配置

#主备库都执行
SQL> alter system set dg_broker_start=true;
#在主库或者备库上执行
[oracle@adg1 ~]$ dgmgrl sys/oracle@ORCLPR
DGMGRL> help create

Creates a broker configuration

Syntax:

  CREATE CONFIGURATION <configuration name> AS
    PRIMARY DATABASE IS <database name>
    CONNECT IDENTIFIER IS <connect identifier>;

DGMGRL> create configuration dg as primary database is ORCLPR connect identifier is ORCLPR;

#增加备库到配置文件中
DGMGRL> help add
DGMGRL> add database ORCLST as connect identifier is ORCLST;
#启动配置文件
DGMGRL> enable configuration
#查看配置文件
DGMGRL> show configuration;
#查看某个数据库的配置消息
DGMGRL> show database verbose ORCLPR
DGMGRL> show database verbose ORCLST
#Broker切换
DGMGRL> switchover to ORCLST;
DGMGRL> show configuration

DG主备切换

Oracle DG主备切换_51CTO博客_oracle dg切换

ADG switch over切换步骤 - Nathan-wang - 博客园 (cnblogs.com)

主备切换的原因

(1)switch:用户主动切换;

(2)failover:主库出现故障,强行切换

switch 切换过程:先主库再备库

主库:v$database SWITCHOVER_STATUS 值的含义

NOT ALLOWED 当前的数据库不是带有备用数据库的主数据库
PREPARING DICTIONARY 该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备
PREPARING SWITCHOVER 接受用于切换的重做数据时,逻辑备用配置会使用它
RECOVERY NEEDED 备用数据库还没有接收到切换请求
SESSIONS ACTIVE 在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话
SWITCHOVER PENDING 适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库
SWITCHOVER LATENT 切换没有完成并返回到主数据库
TO LOGICAL STANDBY 主数据库已经收到了来自逻辑备用数据库的完整的字典
TO PRIMARY 该备用数据库可以转换为主数据库

TO STANDBY 该主数据库可以转换为备用数据库

主库切换成备库

1 查看 SWITCHOVER_STATUS

SQL> select database_role, switchover_status from v$database;

DATABASE_ROLE	 SWITCHOVER_STATUS
---------------- --------------------
PRIMARY 	 SESSIONS ACTIVE

如果switchover_status为:to standby 则

alter database commit to switchover to physical standby;

否则用:

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

2 重启数据库

SQL> startup nomount

3 以备库mount

SQL> alter database mount standby database;

应用redo

SQL> alter database recover managed standby database using current logfile disconnect from session;

备库切换成主库

查看 SWITCHOVER_STATUS

SQL> select database_role, switchover_status from v$database;

DATABASE_ROLE	 SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

如果switchover_status为:to primary 则

SQL> alter database commit to switchover to primary;

否则用:

alter database commit to switchover to primary with session shutdown;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 12c RAC(Real Application Clusters)和单机ADG(Active Data Guard)是两个独立的功能,可以用于提高数据库的可用性和容灾能力。 在Oracle 12c中,RAC允许将多个数据库实例运行在一个共享存储环境中,这些实例可以同时访问共享的数据文件。这样可以实现负载均衡和故障恢复的高可用性。通过RAC的集群架构,可以提供无中断的数据库服务,并且增加了系统的可扩展性。 ADGOracle提供的一种容灾解决方案,可以复制RAC集群上的数据库到另外一个地理位置的数据库服务器上,以保证在主数据库发生故障时,可以切换到备用数据库继续提供服务。使用ADG可以实现数据的冗余备份,并且备用数据库可以在物理或逻辑方式上与主数据库保持同步。 要在Oracle 12c中搭建RAC单机ADG,首先需要在RAC集群中部署主数据库和备用数据库实例。然后,在主数据库上启用ADG功能,并配置物理或逻辑数据保护。物理数据保护需要使用Data Guard进行备份和恢复,而逻辑数据保护使用GoldenGate进行数据同步。 配置ADG功能后,可以通过Data Guard Broker来管理主备数据库的切换和监控。当主数据库发生故障时,可以手动或自动执行切换操作,将备用数据库切换为主数据库继续提供服务。 总之,Oracle 12c RAC和单机ADG搭建是一项复杂的任务,需要了解Oracle集群和容灾技术,并且仔细配置和管理主备数据库。通过合理地使用这两个功能,可以提高数据库的可用性和容灾能力,确保业务的连续性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值