基于RAC的Gataguard架构

ORACLE 21C RAC TO RAC Dataguard 安装部署_数据库

主备数据库环境准备

主备数据库及其实例配置如图表1-1所示。

配置项目

Primary端

Standby端

Clusterware

Grid Infrastructure 21C R2(21.5.0.0.0)

Grid Infrastructure 21C R2(21.5.0.0.0)

Cluster Nodes

21crac1,21crac2

21crac1,21crac2

GRID_HOME

/grid/grid_home

/grid/grid_home

SCAN

rac21c-scan,Port 1521

rac21c-scan,Port 1521

SCAN Listener

21crac1-vip,21crac2-vip

21crac1-vip,21crac2-vip

ASM Instance

+ASM1,+ASM2

+ASM1,+ASM2

Diskgroup for GI

+OCR

+OCR

DB_NAME

racdb

racdb

DB_UNIQUE_NAME

racdb

racdg

INSTANCE_NAME

21crac1,21crac2

21crac1,21crac2

DB Listener

21crac1-vip,21crac2-vip(port 1521)

21crac1-vip,21crac2-vip(port 1521)

DB Storage

ASM

ASM

File Management

AUTO,+ASM

AUTO,+ASM

Diskgroup for DB

+DATA

+DATA

Diskgroup for ARCH

+DGARCH

+DGARCH

ORACLE_HOME

/oracle/db11g

/oracle/db11g

DBMS version

21C (21.5.0.0.0.0)

21C (21.5.0.0.0.0)

Operation System

CentOS7.6

CentOS7.6

Dataguard搭建前的基本条件

主从数据库都是ORACLE 21C RAC环境,数据和ORACLE程序都在ASM 共享磁盘上。为简化叙述,假设如下基础条件已经具备

Primary

※ 两节点Grid Infrastructure集群环境已经安装配置完成。

※ 共享存储:ASM实例及其磁盘组DATADGARCH。

※ 两节点的DBMS集群环境已经安装完成。

RAC数据库RACDB已经创建,两个实例21crac121crac2已经运行在两个节点。

※ 节点的Local Listener和集群Scan Listener已经配置。

※ 主数据库地址如下:

192.168.6.31 21crac1
192.168.6.32 21crac1-vip
192.168.31.31 21crac1-priv

192.168.6.33 21crac2
192.168.6.34 21crac2-vip
192.168.31.33 21crac2-priv

192.168.6.35 rac21c-scan

运行crsctl stat res -t 检查各资源状态。

Standby端

※ 两节点Grid Infrastructure集群环境已经安装配置完成。

※ 共享存储:ASM实例及其磁盘组DATA、DGSYS、DGARCH。

※ 两节点的DBMS集群环境已经安装完成。

※ 节点的Local Listener和集群Scan Listener已经配置。

※ 备用端的主机地址信息如下:

192.168.6.36 21crac1
192.168.6.37 21crac1-vip
192.168.32.31 21crac1-priv

192.168.6.38 21crac2
192.168.6.39 21crac2-vip
192.168.32.33 21crac2-priv192.168.6.40 rac21c-scan

运行crsctl stat res -t 检查各资源状态。

Primary端RAC数据库准备

为构造基于RAC的DATAGUARD环境,在RAC数据库中需要做必要的工作准备,主要包括如下几个方面:

※ 数据库启动FORCE LOGGING。

※ 启动归档模式。

※ 创建STANDBY REDO LOG。

※ 对数据库进行一次备份。

※ 创建备用数据库的控制文件。

※ 针对备用数据库配置网络服务。

※ 为DATAGUARD设置主数据库初始化参数。

※ 为备用数据库准备初始化参数。

调整主库日志模式

DATAGUARD环境下的主数据库需要启动强制日志记录和归档模式。首先检查主数据库的日志归档模式与归档模式;然后,登录数据库RAC的其中一个节点执行如下操作:

SQL> select force_logging from v$database;

FOR
---
YES

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +DGARCH
Oldest online log sequence 59
Next log sequence to archive 60
Current log sequence 60

如果主数据库没有上述强制日志记录状态和归档日志模式,就需要对其进行调整,集群数据库调整时需要关闭其他所有实例。

oracle@21crac1[21crac1]/home/oracle$srvctl stop database -d racdb
oracle@21crac1[21crac1]/home/oracle$sqlplus / as sysdba
SQL> startup mount;
SQL> alter database force logging;
SQL> SELECT NAME,LOG_MODE,FORCE_LOGGING FROM GV$DATABASE;
SQL> alter database archivelog;
SQL> SELECT NAME,LOG_MODE,FORCE_LOGGING FROM GV$DATABASE;
SQL> shutdown immediate;
oracle@21crac1[21crac1]/home/oracle$srvctl start database -d racdb

备份主数据库

备份主数据库需要注意两方面内容,一是对主数据库进行一次物理备份,为在备用端数据库做准备,二是在主数据库中创建备用数据库的控制文件。在主数据库端备份完成后,将形成的备份集传输到备用端节点(执行数据库还原操作的节点的对应位置)

mkdir /odc/dbbak
rman target /
RMAN> run
{
sql "alter system switch logfile";
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
backup as compressed backupset database format '/odc/dbbak/Primary_bakp_for_stdby_%U.bak';
backup as compressed backupset archivelog all format '/odc/dbbak/ARC_bakp_for_stdby_%U.arc';
backup format '/odc/dbbak/standby_bakp_for_stdby_%U.ctl' current controlfile for standby;
release channel ch1;
release channel ch2;
release channel ch3;
}

将备份的文件传输到远端备库/odc/dbbak,包括主库备份文件,备库控制文件,备库参数文件传输至备库服务器。

scp /odc/dbbak/Primary_bakp_for_stdby_%U.bak oracle@192.168.6.36:/odc/dbbak/
scp /odc/dbbak/ARC_bakp_for_stdby_%U.arc oracle@192.168.6.36:/odc/dbbak/
scp /odc/dbbak/standby_bakp_for_stdby_%U.ctl oracle@192.168.6.36:/odc/dbbak/

传输备份文件和pfile文件到备库

21C的密码文件在ASM磁盘组中

srvctl config database -d racdb可以查看密码文件

ORACLE 21C RAC TO RAC Dataguard 安装部署_DATAGUARD_02

把密码文件从ASM复制出来并scp到备库

ORACLE 21C RAC TO RAC Dataguard 安装部署_oracle_03

scp /tmp/pwdracdb.256.1095630267 oracle@192.168.6.36:/odc/dbbak/pwdracdg

主备数据库端网络配置

对备用数据库将要进行的数据库及其实例配置网络服务器。配合给出的预置环境,更新ORACLE NET网络服务配置文件tnsnames.ora的内容。21C的tnsnames.ora文件在$ORACLE_BASE/homes/OraDB21Home1/network/admin目录下。配置如下:

racdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.32)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.34)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)

racdg =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.37)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.39)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdg)
)
)

如果上述配置仅在RAC主数据库端一个节点配置,则需要将tnsname.ora文件复制到集群所有节点,包括备用端。

创建备库配置文件pfile.ora

#创建pfile
create pfile='/home/oracle/pfile.ora' from spfile;修改pfile
#添加以下参数
*.db_unique_name=racdg
#修改以下参数
*.control_files='+DATA/control_racdg.ctl'

传输备份文件和pfile文件到备库

scp /home/oracle/pfile.ora oracle@192.168.6.36:/odc/dbbak/

Standby端RAC数据库准备

物理备用数据库的最初形态是由物理备份还原而成,物理备用数据库控制文件是在主数据库中生成的。因此备用数据库端的主要工作如下:

※ 将主数据库形成的备份集、备用控制文件,传输至备用端的相应位置。

※ 复制主数据库端的口令文件,参数文件至备用端,并进行必要的修改。

※ 准备备用数据库实例的运行环境。

※ 启动数据库实例,并利用备份还原数据库

※ 创建备用重做日志

创建相关目录

#根据主库传输过来的pfile.ora文件中配置的目录在备库中创建
mkdir -p /oracle/admin/racdb/adump

添加Standby数据库服务

srvctl add database -d racdg -o /oracle/db11g 
srvctl add instance -d racdg -i racdb1 -n racdb1
srvctl add instance -d racdg -i racdb2 -n racdb2

启动Standby数据库到NOMOUNT状态

sqlplus / as sysdba
startup nomount pfile='/home/oracle/pfile.ora'

Standby数据库配置密码文件

把从主库传输过来的密码文件复制到ASM目录下

asmcmd
cd +data/racdg

ORACLE 21C RAC TO RAC Dataguard 安装部署_oracle_04

修改备库配置关联密码文件

srvctl modify database -d racdg -pwfile '+data/racdg/pwdracdg'

创建Standby数据库spfile并重启实例到NOMOUNT状态

create spfile from pfile='/home/oracle/pfile.ora';
startup nomount force;

恢复备库控制文件并启动到MOUNT状态

rman target /
restore controlfile from '/odc/dbbak/standby_bakp_for_stdby_0g0ld96r_16_1_1.ctl';
alter database mount;

ORACLE 21C RAC TO RAC Dataguard 安装部署_DATAGUARD_05

恢复Standby数据库

rman target /
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
restore database;
recover database;
release channel ch1;
release channel ch2;
release channel ch3;
}

Standby数据库创建Standby redolog

想要Standby数据库实时同步主库的变化,需要在备库创建standby logfile,每个thread都要创建,group组数量要比主库多一个,日志大小与主库大小一致

ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA') SIZE 200M;

调整主备库参数并开启同步

执行以下步骤时可以tail -f 主备库的alert日志文件,检查是否有报错信息

调整备库参数

alter system set log_archive_config='dg_config=(racdb,racdg)' sid='*';
alter system set FAL_SERVER = racdb sid='*';
alter system set fal_client=racdg sid='*';
alter system set STANDBY_FILE_MANAGEMENT=AUTO sid='*';

调整主库参数

alter system set log_archive_dest_2='service=racdg lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=racdg' sid='*';
alter system set log_archive_config='dg_config=(racdb,racdg)' sid='*';
alter system set log_archive_dest_state_2=enable;

备库启动实时数据同步

alter database recover managed standby database using current logfile disconnect;

这里检查主备库alert日志是否有报错

启动两个实例

停止前面已经启动实例的恢复
alter database recover managed standby database cancel;
启动该实例到read only状态
alter database open read only;
启动另外一个实例
srvctl start instance -d racdg -i racdb1
启动备库实时数据同步
sqlplus / as sysdba
alter database recover managed standby database using current logfile disconnect;

验证数据同步

主库创建一张临时表
create table test_dg as select * from dba_tables;
备库检查是否存在
select * from test_dg;
在主库insert数据测试是否可以实施同步到备库

故障排查思路

数据库的alert日志输出的信息很重要,根据报错信息去找对应的解决方法。

备库的密码文件要与主库的完全一致,而且主库的两个节点的密码文件也要完全一致。否则很容易出现各种问题。不过21C的密码文件里放在ASM里,出问题的概率小了很多。

做完调整之后想测试调整是否有用,可以在主库执行alter system set log_archive_dest_state_2=enable;命令让主库尝试与备库同步归档。