主机 | SID | DB_UNIQUE_NAME | |
主库 | host01 | PROD5H1 | PROD5H1 |
备库 | host02 | PROD5H2 | PROD5H2 |
DG Broker 简介
DataGuard Broker 能更加容易的管理和维护多个 Standby Database。如果有多个备库或者 RAC 数据库中有个多个实例,如果进行手工配置管理,就会太过于麻烦,Oracle 提供了 DataGuard Broker 工具,可以在一台服务器上对所有数据库进行统一的配置和管理,这些配置会自动同步到各个数据库中。Failover 和 Switchover 可以在 DGMGRL 工具中是用一条命令切换,大大简化了我们管理的过程。
一. 主库环境准备
1. 设置环境变量
[oracle@host01 ~]$ export ORACLE_SID=PROD5
[oracle@host01 ~]$ env | grep ORA
ORACLE_SID=PROD5
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/
复制
2. 修改主库参数
修改 dbuniquename
alter system set db_unique_name=PROD5H1 scope=spfile;
复制
修改参数
alter system set standby_file_management=auto;
alter system set dg_broker_start=true;
alter system set temp_undo_enabled=true;
alter system set local_listener='';
alter system set db_domain='example.com' scope=spfile;
复制
3. 添加 SRL 日志文件
先查看原来的 redo log 数量和大小,SRL 的数量需要大于等于 redo log 的数量,大小设置与 redo log 相同。
col member for a45
select group#, status, type, member from v$logfile;
复制
按情况添加 SRL
alter database add standby logfile group 4
'/u01/app/oracle/oradata/PROD5/redo04.log' size 200M;
alter database add standby logfile group 5
'/u01/app/oracle/oradata/PROD5/redo05.log' size 200M;
alter database add standby logfile group 6
'/u01/app/oracle/oradata/PROD5/redo06.log' size 200M;
alter database add standby logfile group 7
'/u01/app/oracle/oradata/PROD5/redo07.log' size 200M;
复制
4. 设置归档路径 dbrecoveryfiledestsize
alter system set db_recovery_file_dest_size=12G;
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
复制
5. 主库重启,开启闪回,开启归档,强记日志
shutdown immediate;
startup mount;
alter database archivelog;
alter database flashback on;
alter database force logging;
alter database open;
select log_mode,flashback_on,force_logging from v$database;
复制
create pfile from spfile;
复制
6. 把参数文件传到备库
主库参数文件如下:
PROD5.datatransfercachesize=0
PROD5.dbcachesize=838860800
PROD5.inmemoryextroarea=0
PROD5.inmemoryextrwarea=0
PROD5.javapoolsize=0
PROD5.largepoolsize=16777216
PROD5.oraclebase='/u01/app/oracle'#ORACLEBASE set from environment
PROD5.pgaaggregatetarget=419430400
PROD5.sgatarget=1241513984
PROD5.sharediopoolsize=67108864
PROD5.sharedpoolsize=301989888
PROD5.streamspoolsize=0
PROD5.unifiedpgapoolsize=0
*.auditfiledest='/u01/app/oracle/admin/PROD5/adump'
*.audittrail='db'
*.compatible='19.0.0'
*.controlfiles='/u01/app/oracle/oradata/PROD5/control01.ctl','/u01/app/oracle/oradata/PROD5/control02.ctl'
*.dbblocksize=8192
*.dbdomain='example.com'
*.dbname='PROD5'
*.dbrecoveryfiledestsize=12884901888
*.dbrecoveryfiledest='/u01/app/oracle/fastrecoveryarea'
*.dbuniquename='PROD5H1'
*.dgbrokerstart=TRUE
*.diagnosticdest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PROD5XDB)'
*.locallistener=''
*.nlslanguage='AMERICAN'
*.nlsterritory='AMERICA'
*.opencursors=300
*.pgaaggregatetarget=393m
*.processes=300
*.remoteloginpasswordfile='EXCLUSIVE'
*.sgatarget=1176m
*.standbyfilemanagement='AUTO'
*.tempundoenabled=TRUE
*.undotablespace='UNDOTBS1'
二. 备库环境准备
1. 把参数文件 cp 到 dbs 目录下
cp initPROD5.ora $ORACLE_HOME/dbs
复制
2. 修改参数文件中的 dbuniquename
PROD5.datatransfercachesize=0
PROD5.dbcachesize=838860800
PROD5.inmemoryextroarea=0
PROD5.inmemoryextrwarea=0
PROD5.javapoolsize=0
PROD5.largepoolsize=16777216
PROD5.oraclebase='/u01/app/oracle'#ORACLEBASE set from environment
PROD5.pgaaggregatetarget=419430400
PROD5.sgatarget=1241513984
PROD5.sharediopoolsize=67108864
PROD5.sharedpoolsize=301989888
PROD5.streamspoolsize=0
PROD5.unifiedpgapoolsize=0
.audit_file_dest='/u01/app/oracle/admin/PROD5/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/PROD5/control01.ctl','/u01/app/oracle/oradata/PROD5/control02.ctl'
*.db_block_size=8192
*.db_domain='example.com'
*.db_name='PROD5'
*.db_recovery_file_dest_size=12884901888
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
.dbuniquename='PROD5H2'
*.dgbrokerstart=TRUE
*.diagnosticdest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PROD5XDB)'
*.locallistener=''
*.nlslanguage='AMERICAN'
*.nlsterritory='AMERICA'
*.opencursors=300
*.pgaaggregatetarget=393m
*.processes=300
*.remoteloginpasswordfile='EXCLUSIVE'
*.sgatarget=1176m
*.standbyfilemanagement='AUTO'
*.tempundoenabled=TRUE
*.undo_tablespace='UNDOTBS1'
3. 创建所需要的目录
mkdir -p /u01/app/oracle/admin/PROD5/adump
mkdir -p /u01/app/oracle/oradata/PROD5/
mkdir -p /u01/app/oracle/fast_recovery_area
复制
4. 备库创建密码文件
orapwd file=orapwPROD5 password=oracle format=12
复制
5. 备库启动到 nomount 状态,创建 spfile
此时没有控制文件和数据文件,报错是正常现象
三. 主备库配置静态监听
1. 编辑主库 listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=prod5h1_dgmgrl.example.com)
(SID_NAME=PROD5)
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)
)
)
复制
2. 编辑备库 listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=prod5h2_dgmgrl.example.com)
(SID_NAME=PROD5)
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)
)
)
复制
3. 编辑主库 tnsnames.ora
PROD5H1_DGMGRL.EXAMPLE.COM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod5h1_dgmgrl.example.com)
)
)
PROD5H2_DGMGRL.EXAMPLE.COM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod5h2_dgmgrl.example.com)
)
)
复制
4. 编辑备库 tnsnames.ora
PROD5H1_DGMGRL.EXAMPLE.COM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod5h1_dgmgrl.example.com)
)
)
PROD5H2_DGMGRL.EXAMPLE.COM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod5h2_dgmgrl.example.com)
)
)
复制
测试监听启动后是否可用
主库:
sqlplus sys/oracle@prod5h1_dgmgrl.example.com as sysdba
sqlplus sys/oracle@prod5h2_dgmgrl.example.com as sysdba
复制
备库:
sqlplus sys/oracle@prod5h1_dgmgrl.example.com as sysdba
sqlplus sys/oracle@prod5h2_dgmgrl.example.com as sysdba
复制
三. rman duplicate 搭建物理备库
rman target sys/oracle@PROD5H1_DGMGRL.example.com auxiliary sys/oracle@PROD5H2_DGMGRL.example.com
复制
duplicate target database for standby from active database dorecover nofilenamecheck;
复制
四. 创建 broker 配置
dgmgrl
复制
connect sys/oracle@prod5h1_dgmgrl.example.com
复制
1. 创建主备库配置
CREATE CONFIGURATION OCM AS PRIMARY DATABASE IS PROD5H1 CONNECT IDENTIFIER IS PROD5H1_dgmgrl.example.com;
复制
add DATABASE PROD5H2 AS CONNECT IDENTIFIER IS PROD5H2_dgmgrl.example.com;
复制
2. 启用配置
enable configuration;
复制
3. 查看配置
这个状态就是还没同步过来之前的数据,需要等一段时间。
一段时间过后备库显示 SUCCESS
五. 测试主备库数据同步
查看备库 test 表数据