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

Oracle 教你用 DG Broker 快速搭建 DataGuard

kk的DBA随笔 2024-10-27
25




主机SIDDB_UNIQUE_NAME
主库host01PROD5H1PROD5H1
备库host02PROD5H2PROD5H2

DG Broker 简介

DataGuard Broker 能更加容易的管理和维护多个 Standby Database。如果有多个备库或者 RAC 数据库中有个多个实例,如果进行手工配置管理,就会太过于麻烦,Oracle 提供了 DataGuard Broker 工具,可以在一台服务器上对所有数据库进行统一的配置和管理,这些配置会自动同步到各个数据库中。Failover 和 Switchover 可以在 DGMGRL 工具中是用一条命令切换,大大简化了我们管理的过程。

一. 主库环境准备

1. 设置环境变量

  1. [oracle@host01 ~]$ export ORACLE_SID=PROD5

  2. [oracle@host01 ~]$ env | grep ORA

  3. ORACLE_SID=PROD5

  4. ORACLE_BASE=/u01/app/oracle

  5. ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/

复制

2. 修改主库参数

修改 dbuniquename

  1. alter system set db_unique_name=PROD5H1 scope=spfile;

复制

修改参数

  1. alter system set standby_file_management=auto;

  2. alter system set dg_broker_start=true;

  3. alter system set temp_undo_enabled=true;

  4. alter system set local_listener='';

  5. alter system set db_domain='example.com' scope=spfile;

复制

3. 添加 SRL 日志文件

先查看原来的 redo log 数量和大小,SRL 的数量需要大于等于 redo log 的数量,大小设置与 redo log 相同。

  1. col member for a45

  2. select group#, status, type, member from v$logfile;

复制

按情况添加 SRL

  1. alter database add standby logfile group 4

  2. '/u01/app/oracle/oradata/PROD5/redo04.log' size 200M;

  3. alter database add standby logfile group 5

  4. '/u01/app/oracle/oradata/PROD5/redo05.log' size 200M;

  5. alter database add standby logfile group 6

  6. '/u01/app/oracle/oradata/PROD5/redo06.log' size 200M;

  7. alter database add standby logfile group 7

  8. '/u01/app/oracle/oradata/PROD5/redo07.log' size 200M;

复制

4. 设置归档路径 dbrecoveryfiledestsize

  1. alter system set db_recovery_file_dest_size=12G;

  2. alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';

复制

5. 主库重启,开启闪回,开启归档,强记日志

  1. shutdown immediate;

  2. startup mount;

  3. alter database archivelog;

  4. alter database flashback on;


  5. alter database force logging;

  6. alter database open;

  7. select log_mode,flashback_on,force_logging from v$database;

复制

  1. 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 目录下

  1. 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. 创建所需要的目录

  1. mkdir -p /u01/app/oracle/admin/PROD5/adump

  2. mkdir -p /u01/app/oracle/oradata/PROD5/

  3. mkdir -p /u01/app/oracle/fast_recovery_area

复制

4. 备库创建密码文件

  1. orapwd file=orapwPROD5 password=oracle format=12

复制

5. 备库启动到 nomount 状态,创建 spfile

此时没有控制文件和数据文件,报错是正常现象

三. 主备库配置静态监听

1. 编辑主库 listener.ora

  1. SID_LIST_LISTENER=

  2. (SID_LIST=

  3. (SID_DESC=

  4. (GLOBAL_DBNAME=prod5h1_dgmgrl.example.com)

  5. (SID_NAME=PROD5)

  6. (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)

  7. )

  8. )

复制

2. 编辑备库 listener.ora

  1. SID_LIST_LISTENER=

  2. (SID_LIST=

  3. (SID_DESC=

  4. (GLOBAL_DBNAME=prod5h2_dgmgrl.example.com)

  5. (SID_NAME=PROD5)

  6. (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)

  7. )

  8. )

复制

3. 编辑主库 tnsnames.ora

  1. PROD5H1_DGMGRL.EXAMPLE.COM =

  2. (DESCRIPTION =

  3. (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))

  4. (CONNECT_DATA =

  5. (SERVER = DEDICATED)

  6. (SERVICE_NAME = prod5h1_dgmgrl.example.com)

  7. )

  8. )


  9. PROD5H2_DGMGRL.EXAMPLE.COM =

  10. (DESCRIPTION =

  11. (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521))

  12. (CONNECT_DATA =

  13. (SERVER = DEDICATED)

  14. (SERVICE_NAME = prod5h2_dgmgrl.example.com)

  15. )

  16. )

复制

4. 编辑备库 tnsnames.ora

  1. PROD5H1_DGMGRL.EXAMPLE.COM =

  2. (DESCRIPTION =

  3. (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))

  4. (CONNECT_DATA =

  5. (SERVER = DEDICATED)

  6. (SERVICE_NAME = prod5h1_dgmgrl.example.com)

  7. )

  8. )


  9. PROD5H2_DGMGRL.EXAMPLE.COM =

  10. (DESCRIPTION =

  11. (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521))

  12. (CONNECT_DATA =

  13. (SERVER = DEDICATED)

  14. (SERVICE_NAME = prod5h2_dgmgrl.example.com)

  15. )

  16. )

复制

测试监听启动后是否可用

主库:

  1. sqlplus sys/oracle@prod5h1_dgmgrl.example.com as sysdba


  2. sqlplus sys/oracle@prod5h2_dgmgrl.example.com as sysdba

复制

备库:

  1. sqlplus sys/oracle@prod5h1_dgmgrl.example.com as sysdba


  2. sqlplus sys/oracle@prod5h2_dgmgrl.example.com as sysdba

复制

三. rman duplicate 搭建物理备库

  1. rman target sys/oracle@PROD5H1_DGMGRL.example.com auxiliary sys/oracle@PROD5H2_DGMGRL.example.com

复制

  1. duplicate target database for standby from active database dorecover nofilenamecheck;

复制

四. 创建 broker 配置

  1. dgmgrl

复制

  1. connect sys/oracle@prod5h1_dgmgrl.example.com

复制

1. 创建主备库配置

  1. CREATE CONFIGURATION OCM AS PRIMARY DATABASE IS PROD5H1 CONNECT IDENTIFIER IS PROD5H1_dgmgrl.example.com;

复制

  1. add DATABASE PROD5H2 AS CONNECT IDENTIFIER IS PROD5H2_dgmgrl.example.com;

复制

2. 启用配置  

  1. enable configuration;

复制

3. 查看配置

这个状态就是还没同步过来之前的数据,需要等一段时间。

一段时间过后备库显示 SUCCESS 

五. 测试主备库数据同步

查看备库 test 表数据


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

评论