前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DG】DataGuard搭建-11gR2单主单备

【DG】DataGuard搭建-11gR2单主单备

作者头像
甚至熊熊
发布2021-04-22 17:24:45
6390
发布2021-04-22 17:24:45
举报

整理一份DG的搭建流程,参考了一些教程及文档,环境是Oracle 11gR2 1+1。DG计划整理三篇:搭建、概念、维护。

一、环境规划

主库 Primary

备库 Standby

操作系统

CentOS Linux release 7.7.1908 (Core)

CentOS Linux release 7.7.1908 (Core)

数据库版本

11.2.0.4

11.2.0.4

IP

192.168.10.131

192.168.10.151

db_name

pxk2

pxk2

instance_name

pxk2

sbdb

db_unique_name

pxk2

sbdb

tnsname

tnspxk2

tnssbdb

服务名

pxk2

pxk2

提前准备

安装数据库软件、DBCA建库、监听

安装数据库软件

说明:

  • 主库和备库建议采用相同服务器配置
  • 主库和备库建议采用相同OS版本
  • 主库和备库需要采用相同数据库版本(含PSU)
  • db_name相同
  • db_unique_name不同
  • db_instance不同

二、主库参数配置

1.启用force logging(强制记录日志)

代码语言:javascript
复制
--查看
select log_mode,force_logging from v$Database;
--启用
alter database force logging;

2.启用归档

代码语言:javascript
复制
--查看
archive log list;
select log_mode from v$database;

--启用
shutdown immediate
startup mount
alter database archivelog;
alter database open;

3.配置主库监听和TNS

监听:

代码语言:javascript
复制
--监听文件默认路径$ORACLE_HOME/network/admin/listener.ora
--配置静态监听,增加SID_LIST_LISTENER部分,然后lsnrctl reload
--LISTENER是默认监听名称,静态监听配置SID_LIST_LISTENER与其对应
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.131)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (GLOBAL_DBNAME = pxk2)   --GLOBAL_DBNAME对应监听里的服务名
        (SID_NAME = pxk2)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      )
    )

配置完成: 状态为UNKONWN代表静态监听

TNS:

代码语言:javascript
复制
--TNS文件默认路径$ORACLE_HOME/network/admin/tnsnames.ora
--方便主备切换服务名设置相同,配置如下:
tnspxk2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.131)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pxk2)
    )
  )

tnssbdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.151)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pxk2)
    )
  )

4.配置主库参数

代码语言:javascript
复制
--1.修改归档文件名后缀为.arc(可选)
alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

--2.检查db_unique_name
show  parameter db_unique_name
alter system set db_unique_name='pxk2' scope=spfile;

--3.修改log_archive_config参数,括号中为主备库的db_unique_name
alter system set log_archive_config='DG_CONFIG=(pxk2,sbdb)' scope=both;

--4.配置log_archive_dest_1,主库归档位置
alter system set log_archive_dest_1='LOCATION=/oradata/archivelog/pxk2 
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  DB_UNIQUE_NAME=pxk2' scope=both;

--5.配置log_archive_dest_2,备库归档参数,采用LGWR异步传输方式
alter system set log_archive_dest_2='SERVICE=tnssbdb LGWR ASYNC 
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sbdb' scope=both;

--6.修改归档日志进程的最大数量(可选)
alter system set log_archive_max_processes=30 scope=both;
show parameter log_archive_max_processes;

--7.检查数据库口令文件的使用模式
show parameter remote_login_passwordfile
alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

--8.修改/etc/hosts文件,追加主备库IP与主机名对应关系,备库同样配置
--如果 tns文件里的HOST直接配置的是IP则,可以不用维护hosts文件
echo "192.168.10.131 pxk" >> /etc/hosts
echo "192.168.10.151 pxk2sd >> /etc/hosts

--9.修改db_file_name_convert参数,主备库数据文件名称跟路径对应对应关系
--主库跟备库存放文件的路径不一定一样,如果一样的话可以不指定,但是不一样就需要指定,一般来说主库跟备库的实例名是不一样的,所以肯定是需要设置该参数
--前面路径是备库数据文件路径,后面是主库路径
alter system set db_file_name_convert='/oracle/app/oracle/oradata/sbdb','/oradata/datafile/pxk2/'
scope=spfile;

--10.修改log_file_name_convert参数,主备库日志文件名称跟路径对应对应关系
alter system set log_file_name_convert='/oracle/app/oracle/oradata/sbdb','/oradata/datafile/pxk2/'
scope=spfile;

--11.设置standby_file_management为auto
--设置文件管理模式,此项设置为自动,不然在主库创建数据文件后,备库不会自动创建
--有教程要求先保持manual,增加完standby redolog后再改为auto
alter system set standby_file_management=auto;

--12.修改fal_client及fal_server
alter system set fal_client='tnspxk2' scope=both;  --本地tns
alter system set fal_server='tnssbdb' scope=both;  --备库tns

部分参数修改没有添加说明,放到概念篇

三、备库参数配置

1.密码文件,主库和备库的SYS密码必须一致

代码语言:javascript
复制
--方式1:使用 orapwd 设置相同密码
orapwd file=orapwsbdb password=  
--方式2:scp主库密码文件到备库$ORACLE_HOME/dbs目录下,并修改密码文件名为orapwsbdb

2.设置pfile文件并启动到nomount状态

在dbs目录下创建initsbdb.ora并参考主库添加参数

代码语言:javascript
复制
db_name='pxk2'
db_unique_name='sbdb'
pga_aggregate_target=191889408     --设置跟主库一样
sga_target=575668224               --设置跟主库一样
audit_file_dest='/u01/app/oracle/admin/sbdb/adump'     --创建这个路径
compatible='11.2.0.4.0'                                --兼容性参数 主备库要保持一致
log_archive_format='%t_%s_%r.arc'
control_files='/u01/app/oracle/oradata/sbdb/control01.ctl','/u01/app/oracle/oradata/sbdb/control02.ctl'   --注意修改文件路径中的实例名
log_archive_config='DG_CONFIG=(pxk2,sbdb)'
log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sbdb'
log_archive_dest_2='SERVICE=tnspxk2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pxk2'
db_file_name_convert='/oradata/datafile/pxk2/','/oracle/app/oracle/oradata/sbdb'     --前面是对方的,后面是本地的
log_file_name_convert='/oradata/datafile/pxk2/','/oracle/app/oracle/oradata/sbdb'
fal_client='tnssbdb'  --该参数与主库设置相反
fal_server='tnspxk2'  --该参数与主库设置相反
standby_file_management='AUTO'

用刚才编辑的pfile 创建spfile

代码语言:javascript
复制
startup nomount pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/initsbdb.ora';
create spfile from pfile;
--关闭数据库正常启动到nomount状态
--查看是否使用spfile启动 show parameter spfile

3.备库配置监听与TNS

监听:

代码语言:javascript
复制
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.151)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (GLOBAL_DBNAME = pxk2)
        (SID_NAME = sbdb)
        (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
      )
    )

ADR_BASE_LISTENER = /u01/app/oracle

DIAG_ADR_ENABLED_LISTENER = OFF

TNS:

代码语言:javascript
复制
tnspxk2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.131)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pxk2)
    )
  )

tnssbdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.151)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pxk2)
    )
  )

3.修改/etc/hosts(见主库配置)

4.测试TNS

主库和备库分别测试: tnsping tnsprod tnsping tnssbdb

sqlplus sys/oracle@tnspxk2 as sysdba sqlplus sys/oracle@tnssbdb as sysdba

注意: 如果出现TNS-12543错误,关闭防火墙再试 如果tnsping出现 ORA-12541 错误,检查一下hosts文件里面是否配置正常,备库也要配置好

四、使用Duplicate创建物理standby

备库执行

代码语言:javascript
复制
--连接RMAN并连接辅助(auxiliary )实例,备库目前是nomount状态
rman target sys/oracle@tnspxk2 auxiliary sys/oracle@tnssbdb

--执行复制
--nofilenamecheck不进行文件名检查(如果复制数据库时,备库的路径和原库一致,就需要加 nofilenamecheck,否则会报错。)
duplicate target database for standby from active database nofilenamecheck;

注意:

  1. 第一次duplicate时遇到ORA-17628错误,排查后发现为需要提前创建的文件夹没有创建 参考http://blog.chinaunix.net/uid-20809130-id-5745814.html
  2. 之前设置过db_file_name_convert跟log_file_name_convert,这里就会按照设置的地址拷贝

五、添加Standby日志组并开启同步

1.主备库添加Standby 日志组

  • standby日志组数量:redo日志组数量+1
  • 添加前需要查看已有的日志组号
  • standby日志大小与普通日志相同大小即可
  • 为日后主备切换做准备,所以主库上也添加Standby日志
代码语言:javascript
复制
select * from v$log;

主库添加:

代码语言:javascript
复制
alter database add standby logfile group 5 ('/oradata/datafile/pxk2/stredo05.log') size 200M;
alter database add standby logfile group 6 ('/oradata/datafile/pxk2/stredo06.log') size 200M;
alter database add standby logfile group 7 ('/oradata/datafile/pxk2/stredo07.log') size 200M;
alter database add standby logfile group 8 ('/oradata/datafile/pxk2/stredo08.log') size 200M;

备库添加:

代码语言:javascript
复制
alter database add standby logfile group 5 ('/oracle/app/oracle/oradata/sbdb/stredo05.log') size 200M;
alter database add standby logfile group 6 ('/oracle/app/oracle/oradata/sbdb/stredo06.log') size 200M;
alter database add standby logfile group 7 ('/oracle/app/oracle/oradata/sbdb/stredo07.log') size 200M;
alter database add standby logfile group 8 ('/oracle/app/oracle/oradata/sbdb/stredo08.log') size 200M;

查看standby日志:

代码语言:javascript
复制
select * from v$standby_log;

打开备库:

代码语言:javascript
复制
alter database open;

2.设置同步

代码语言:javascript
复制
--1.开启实时同步(启动MRP进程),备库操作
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database using current logfile disconnect; --简写

日志记录:

代码语言:javascript
复制
--2.开启同步,日志切换才会同步
alter database recover managed standby database disconnect from session;

日志记录:

代码语言:javascript
复制
--3.停止同步(关闭MRP进程)
alter database recover managed standby database cancel;

日志记录:

3.主备库检查模式

代码语言:javascript
复制
select open_mode,database_role,protection_mode,protection_level from v$database;

备库显示:

open_mode:备库标识为read only with apply ,表示应用了日志,如果关闭同步则这里只有read only database_role:标识为主库 还是备库,此时为物理备库 protection_mode和protection_level 此时标识都是最大性能模式

六、总结

本篇整理了Oracle 11gR2环境下DG 1+1搭建过程,日志传输为LGWR ASYNC异步传输,开启real time apply

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库学习笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境规划
  • 二、主库参数配置
    • 1.启用force logging(强制记录日志)
      • 2.启用归档
        • 3.配置主库监听和TNS
          • 4.配置主库参数
          • 三、备库参数配置
            • 1.密码文件,主库和备库的SYS密码必须一致
              • 2.设置pfile文件并启动到nomount状态
                • 3.备库配置监听与TNS
                  • 3.修改/etc/hosts(见主库配置)
                    • 4.测试TNS
                    • 四、使用Duplicate创建物理standby
                    • 五、添加Standby日志组并开启同步
                      • 1.主备库添加Standby 日志组
                        • 2.设置同步
                          • 3.主备库检查模式
                          • 六、总结
                          相关产品与服务
                          数据库
                          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档