DBCA命令行搭建Oracle ADG的流程


Posted in Oracle onJune 11, 2021

前言

Oracle Data Guard是Oracle MAA(Maximum Availability Architecture)中的成员之一。从Oracle 7i版本开始推出STANDBY DATABASE的概念,慢慢受到大家的欢迎。随着Oracle数据库版本的更迭,搭建备库的方式多种多样。今天介绍一种创建物理备库的新方式,从12C版本开始推出:使用 DBCA 命令行。

DBCA命令行搭建Oracle ADG的流程

dbca -createDuplicateDB -createAsStandby -dbUniqueName

优缺点:方便快捷,搭建速度较快。但是会影响主库的性能,执行过程报错不方便排查。

具体命令可参考:

dbca -silent -createDuplicateDB
    -gdbName global_database_name
    -primaryDBConnectionString easy_connect_string_to_primary
    -sid database_system_identifier
    [-createAsStandby 
        [-dbUniqueName db_unique_name_for_standby]]
    [-customScripts scripts_list]

更详细参数可参考The createDuplicateDB command creates a duplicate of an Oracle database.

DBCA命令行搭建Oracle ADG的流程

12.2.0.1开始支持DBCA创建物理备库:

主库必须是单机环境,非RAC数据库。

主库必须是非CDB环境。

18c之后,以上限制已经取消,支持主库是CDB和RAC环境。

一、环境准备

环境安装过程忽略,可参考:

30分钟!一键部署Oracle 19C单机CDB+PDB

本次测试尽量按照生产环境升级进行模拟:

节点 主机版本 主机名 实例名 Oracle版本 IP地址
rac01 rhel7.9 rac01 cdb19c 19.3.0(补丁 29585399) 10.211.55.100
rac02 rhel7.9 rac02 orcl+cdb19c 19.3.0(补丁 29585399) 10.211.55.101
备库 rhel7.9 dbca_stby 不创建实例 19.3.0(补丁 29585399) 10.211.55.110

注意:

1、db_unique_name主备库不能相同。

2、db_name主备库需保持一致。

3、主备库DB版本需保持一致。

Oracle测试环境安装:

可参考:DBA运维福音:10分钟,Linux一行命令安装Oracle数据库

主库RAC环境一键安装:

./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\
-n rac `# hostname`\
-c TRUE `# cdb`\
-pb orcl `# pdb`\
-o cdb19c `# oraclesid`\
-rs oracle `# root password`\
-op oracle `# oracle password`\
-gp oracle `# grid password`\
-b /u01/app `# install basedir`\
-s AL32UTF8 `# characterset`\
-pb1 10.211.55.100 -pb2 10.211.55.101 `# node public ip`\
-vi1 10.211.55.102 -vi2 10.211.55.103 `# node virtual ip`\
-pi1 1.1.1.1 -pi2 1.1.1.2 `# node private ip`\
-si 10.211.55.105 `# scan ip`\
-dd /dev/sdc `# asm data disk`\
-od /dev/sdb `# asm ocr disk`\
-or EXTERNAL `# asm ocr redundancy`\
-dr EXTERNAL `# asm data redundancy`\
-on OCR `# asm ocr diskgroupname`\
-dn DATA `# asm data diskgroupname`\
-puf eth0 -prf eth1 `# network fcname`\
-tsi 10.211.55.200 `# timeserver`\
-gpa 32545008 `# Grid PSU NUMBER`

DBCA命令行搭建Oracle ADG的流程

备库一键安装:(备库仅安装ORACLE软件,不建库)

./OracleShellInstall.sh -i 10.211.55.110 -n dbca_stby -o cdb19c -opa 32545013 -w Y

DBCA命令行搭建Oracle ADG的流程

二、ADG搭建准备

a.配置hosts文件

主库:

cat <<EOF >> /etc/hosts
##FOR DG BEGIN
10.211.55.110 dbca_stby
##FOR DG END
EOF

DBCA命令行搭建Oracle ADG的流程DBCA命令行搭建Oracle ADG的流程

备库:

cat <<EOF >> /etc/hosts
##FOR DG BEGIN
10.211.55.100 rac01
10.211.55.101 rac02
10.211.55.105 rac-scan
##FOR DG END
EOF

DBCA命令行搭建Oracle ADG的流程

b.配置静态监听和TNS

listener.ora增加静态监听:

grid用户执行:

rac01

cat <<EOF >> $TNS_ADMIN/listener.ora
##FOR DG BEGIN
SID_LIST_LISTENER =
	(SID_LIST =
		(SID_DESC =
			(GLOBAL_DBNAME = cdb19c)
			(ORACLE_HOME = /u01/app/oracle/product/19.3.0/db)
			(SID_NAME = cdb19c1)
		)
	)
##FOR DG END
EOF

DBCA命令行搭建Oracle ADG的流程

rac02

cat <<EOF >> $TNS_ADMIN/listener.ora
##FOR DG BEGIN
SID_LIST_LISTENER =
	(SID_LIST =
		(SID_DESC =
			(GLOBAL_DBNAME = cdb19c)
			(ORACLE_HOME = /u01/app/oracle/product/19.3.0/db)
			(SID_NAME = cdb19c2)
		)
	)
##FOR DG END
EOF

DBCA命令行搭建Oracle ADG的流程

备库

cat <<EOF >>$TNS_ADMIN/listener.ora
##FOR DG BEGIN
SID_LIST_LISTENER =
(SID_LIST =
	(SID_DESC =
		(GLOBAL_DBNAME = cdb19c_stby)
		(ORACLE_HOME = /u01/app/oracle/product/19.3.0/db)
		(SID_NAME = cdb19c_stby)
	)
)
##FOR DG END
EOF

DBCA命令行搭建Oracle ADG的流程

重启监听

#主库RAC重启监听
srvctl stop listener
srvctl start listener

##备库重启监听
lsnrctl start

DBCA命令行搭建Oracle ADG的流程DBCA命令行搭建Oracle ADG的流程DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程

tnsnames.ora增加TNS:

oracle用户执行:

cat <<EOF >> $TNS_ADMIN/tnsnames.ora
##FOR DG BEGIN
CDB19C =
(DESCRIPTION =
	(ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
	)
	(CONNECT_DATA =
		(SERVICE_NAME = cdb19c)
	)
)
CDB19C1 =
(DESCRIPTION =
	(ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = rac01)(PORT = 1521))
	)
	(CONNECT_DATA =
		(SERVICE_NAME = cdb19c)
	)
)
CDB19C2 =
(DESCRIPTION =
	(ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = rac02)(PORT = 1521))
	)
	(CONNECT_DATA =
		(SERVICE_NAME = cdb19c)
	)
)
CDB19C_STBY =
(DESCRIPTION =
	(ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = dbca_stby)(PORT = 1521))
	)
	(CONNECT_DATA =
		(SERVICE_NAME = cdb19c_stby)
	)
)
##FOR DG BEGIN
EOF

tnsping测试连通性:

tnsping cdb19c
tnsping cdb19c1
tnsping cdb19c2
tnsping cdb19c_stby

DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程

c.主库配置参数

SQL> select force_logging,log_mode,cdb from gv$database;

FORCE_LOGGING		LOG_MODE     CDB
--------------------------------------- 
YES					ARCHIVELOG   YES

如果没有开启强制日志:

alter database force logging;

如果没有开启归档日志:

shutdown immediate
startup mount
alter database archivelog;
alter database open;
alter pluggable database all open;

DBCA命令行搭建Oracle ADG的流程

d.主库添加stanby log文件

set line222
col member for a60
select t2.thread#,t1.group#,t1.member,t2.bytes/1024/1024 from v$logfile t1,v$log t2 where t1.group#=t2.group# order by 1,2;

DBCA命令行搭建Oracle ADG的流程

--需要注意:
--1.stanby log日志大小至少要和redo log日志一样大小,不能小于
--2.stanby log数量: standby logfile=(1+logfile组数)=(1+2)=3组,每个thread需要加3组standby logfile.
--3.thread要与redo log保持一致,如果是rac,需要增加多个thread对应的standby log

ALTER DATABASE ADD STANDBY LOGFILE thread 1 
group 5 ('+DATA') SIZE 120M,
group 6 ('+DATA') SIZE 120M,
group 7 ('+DATA') SIZE 120M;

ALTER DATABASE ADD STANDBY LOGFILE thread 2
group 8 ('+DATA') SIZE 120M,
group 9 ('+DATA') SIZE 120M,
group 10 ('+DATA') SIZE 120M;

DBCA命令行搭建Oracle ADG的流程

select t2.thread#,t1.group#,t1.member,t2.bytes/1024/1024 from v$logfile t1,v$standby_log t2 where t1.group#=t2.group# order by 1,2;

DBCA命令行搭建Oracle ADG的流程

三、DBCA创建物理备库

oracle用户执行:

dbca -silent -createDuplicateDB \
-gdbName cdb19c \
-sid cdb19c \
-sysPassword oracle \
-primaryDBConnectionString 10.211.55.105:1521/cdb19c \
-nodelist dbca_stby \
-databaseConfigType SINGLE \
-createAsStandby -dbUniqueName cdb19c_stby \
-datafileDestination '/oradata'

DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程

DBCA物理DG创建成功。

四、配置主库+备库DG参数

--主库设置DG参数
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(CDB19C,CDB19C_STBY)' sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=CDB19C' sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=cdb19c_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=CDB19C_STBY' sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4 sid='*';
ALTER SYSTEM SET FAL_SERVER=CDB19C_STBY sid='*';
ALTER SYSTEM SET FAL_CLIENT=CDB19C sid='*';
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='+DATA','/oradata/CDB19C_STBY' SCOPE=SPFILE sid='*';
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='+DATA','/oradata/CDB19C_STBY' SCOPE=SPFILE sid='*';
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO sid='*';

注意:RAC修改参数需要加上 sid='*',修改多个实例。

--备库设置DG参数
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(CDB19C_STBY,CDB19C)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=CDB19C_STBY';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=CDB19C ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=CDB19C';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;
ALTER SYSTEM SET FAL_SERVER=CDB19C;
ALTER SYSTEM SET FAL_CLIENT=CDB19C_STBY;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/oradata/CDB19C_STBY','+DATA' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/oradata/CDB19C_STBY','+DATA' SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

查看OMF参数配置:

show parameter db_create_file_dest

DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程

注意:如果同时设置OMG和DB_FILE_NAME_CONVERT参数,则优先OMF参数。

五、开启日志应用

##备库执行
alter database recover managed standby database using current logfile disconnect from session;

##主库执行
alter system set log_archive_dest_state_2=enable sid='*';

DBCA命令行搭建Oracle ADG的流程
DBCA命令行搭建Oracle ADG的流程

六、测试同步

主库创建测试数据:

alter session set container=orcl;

DBCA命令行搭建Oracle ADG的流程

sqlplus lucifer/lucifer@orcl

DBCA命令行搭建Oracle ADG的流程

备库查看是否同步:

DBCA命令行搭建Oracle ADG的流程

至此,ADG已搭建完毕。感谢食用~

参考文章:

官方文档12c:Using DBCA to Create a Data Guard Standby 12C

官方文档19c:Using DBCA to Create a Data Guard Standby 19C

官方文档21c:Using DBCA to Create a Data Guard Standby 21C

MOS文档:Creating a Physical Standby database using DBCA duplicate (Doc ID 2283697.1)

以上就是DBCA搭建Oracle ADG的详细内容,更多关于DBCA搭建Oracle ADG的资料请关注三水点靠木其它相关文章!

Oracle 相关文章推荐
Oracle笔记
Apr 05 Oracle
ORACLE数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
oracle覆盖导入dmp文件的2种方法
May 21 Oracle
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
Jun 04 Oracle
Oracle11g R2 安装教程完整版
Jun 04 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 Oracle
Oracle删除归档日志及添加定时任务
Jun 28 Oracle
ORACLE数据库应用开发的三十个注意事项
Jun 07 #Oracle
Oracle创建只读账号的详细步骤
Oracle11g R2 安装教程完整版
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
使用Navicat Premium工具将oracle数据库迁移到MySQL
Oracle更换为MySQL遇到的问题及解决
May 21 #Oracle
oracle覆盖导入dmp文件的2种方法
You might like
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
php扩展开发入门demo示例
2019/09/23 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
Python复制目录结构脚本代码分享
2015/03/06 Python
Python随机生成数模块random使用实例
2015/04/13 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
保护环境的建议书
2014/03/12 职场文书
关于感谢信的范文
2015/01/23 职场文书
演讲开场白台词大全
2015/05/29 职场文书
公司财务管理制度
2015/08/04 职场文书