【Oracle】12C RAC系列之02 ADG冗余部署(Linux)
目录
ADG服务器创建前的准备
说明与注意事项
- 使用2+1(RAC+DataGuard)架构,非2+2(RAC+RAC)MMA架构
- RAC必须成功安装
- ADG备库安装同样版本的oracle软件,数据库无需创建;配置参数一致便于后期节点切换后可以正常使用
- 容器数据库分为CDB与PDB,不能基于PDB进行DG(TB级别的数据不建议用CDB)
- 参考资料https://blog.csdn.net/qq877507054/article/details/81209967
- ADG可以使用单机文件系统,或者ASM文件系统(可以是RAC节点)
- CDB:安装时候询问你是否选择容器数据库,勾选就为CDB(需要安照CDB方式部署DG服务器),不勾选就不安装(非CDB)。
- 常见架构
主库:非CDB---备库:非CDB
主库:CDB---备库:CDB - 查看CDB属性
select cdb from v$database;
图 166主库RAC归档配置-1
- N1,N2开启归档
查看归档文件命令规则
- 与数据文件冲突
show parameter log_archive_format
图 167修改归档命名规则
- 在任意一节点登录数据库
- 复制执行时注意字符集是否被更改,修改xshell与oracle统一字符集
shutdown immediate startup mount alter system set log_archive_format=\'%t_%s_%r.arc\' scope=spfile sid=\'*\';
图 168创建RAC归档保存目录
- 在任意一个节点,此为node2上
asmcmd
cd data
ls
mkdir arch
图 169修改两个实例的归档日志保存路径
- 单机环境此参数为log_archive_dest,RAC为log_archive_dest_1,DG归档传输参数是log_archive_dest_2
alter system set log_archive_dest_1=\'LOCATION=+data/arch\' scope=spfile sid=\'*\';
图 170 - 关闭所有节点的数据库
shutdown immediate - 只启动一个节点node1
startup mount
图 171
alter database archivelog;
archive log list;
图 172 - 打开node1数据库
alter database open; - 在node2上启动数据库
startup
图 173 - 查看归档日志参数
show parameter log
图 174
图 175 - 开启归档设置完成后所有节点都生效
主库启用force logging
- 只在一个节点上配置
select force_logging from v$database;
图 176
alter database force logging;
图 177主库初始化参数配置
- 在node1上配置主库初始化参数
- 修改后重启数据库
设置db_unique_name
- 不加‘’,mrzhu为大写
alter sysytem set db_unique_name=’mrzhu’ scope=spfile; alter sysytem set db_unique_name=’mrzhu’ scope=spfile;设置log_archive_config
- 两实例的归档文件的link配置,mrzhu主库全局名,sbdb备库全局名,也是实例名
alter system set log_archive_config=\'DG_CONFIG=(mrzhu,sbdb)\' scope=both sid=\'*\';
图 178设置log_archive_dest_1
- 本地归档保存路径,为ASM存储中
alter system set log_archive_dest_1=\'LOCATION=+data/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mrzhu\' scope=both sid=\'*\';
图 179设置log_archive_dest_2
- RAC传输备库日志文件参数
alter system set log_archive_dest_2=\'SERVICE=tnssbdb LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sbdb\' scope=both sid=\'*\';
图 180设置standby_file_management
- 开启主备库日志自动同步更新
alter system set standby_file_management=auto scope=both sid=\'*\';
图 181设置fal_sever/client
DG向RAC主库拉取通道设置
alter system set fal_client=\'tnsmrzhu\' scope=both sid=\'*\'; alter system set fal_server=\'tnssbdb\' scope=both sid=\'*\';
图 182检查参数
show parameter log
show parameter fal配置N1与N2的tnsnames.ora
- oracle用户
- 在n1 n2下配置tns监听文件
N1:
su – oracle
cd /u01/app/oracle/product/12.2.0/db_1/network/admin
或者cd $ORACLE_HOME/ network/admin
vim tnsnames.ora
########添加以下内容#########tnsmrzhu = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) ) tnssbdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu03)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) )
图 183
图 184
N2:
su – oracle
cd /u01/app/oracle/product/12.2.0/db_1/network/admin
或者cd $ORACLE_HOME/ network/admin
vim tnsnames.ora
########ora配置为#######tnsmrzhu = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu02)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) ) tnssbdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu03)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) )
图 185 - 在N1、N2上添加DG的hosts解析
192.168.230.201 mrzhu03配置ADG数据库服务器
- ADG与DG区别(real-time Apply)
https://blog.csdn.net/weixin_42130786/article/details/116345739?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242 - 提前安装好DG单库主机数据库软件(无需创建数据库实例)
- 本文使用节点1未安装GRID软件之前的快照直接创建
- 实际环境中,参数配置必须与RAC节点一致
- 可使用以下txt文件参数配置单机oracle服务器
密码文件配置
- 从主库拷贝密码文件到备库保证主备密码文件一致
- 11g及以前版本RAC密码文件存放在$ORACLE_HOME/dbs下,文件格式为orapwSID
- 12C RAC存放在asm中
查看主库密码文件
- 查询密码文件位置,在n1上grid账户下
srvctl config database -d mrzhu
图 186拷贝密码文件到临时目录
- 在N1上grid账户下
- asmcmd
pwcopy +DATA/MRZHU/PASSWORD/pwdmrzhu.283.1077455723 /tmp/mypwd
图 187清除多余文件
- 在DG上删除dbs目录下的多余文件,只保留init.ora文件(确保未创建数据库之前的文件布局)
su - oracle
cd $ORACLE_HOME/dbs
图 188修改密码文件格式
- 在N1上先把tmp目录下的密码文件远程复制到DG的dbs目录下
scp mypwd mrzhu03:/u01/app/oracle/product/12.2.0/db_1/dbs - 在DG上修改为系统标准格式密码名
su - oracle
cd $ORACLE_HOME/dbs
mv mypwd orapwsbdb - 修改所属用户与组
chown oracle:oinstall orapwsbdb参数文件配置
- 在DG上创建参数文件使数据库启动到nomount状态
- 注意启动状态顺序与文件需求的关系
nomount --pfile
mount ---控制文件
open—数据文件创建init参数文件
- 在oracle账户下
cd $ORACLE_HOME/dbs
touch initsbdb.ora -
文件内容为
db_name=\'mrzhu\' #主库数据库名,非实例名,非实例名前缀 db_unique_name=\'sbdb\' #备库数据库名 sga_target=2G pga_aggregate_target=800M #手动指定sga+pga=物理内存*80% audit_file_dest=\'/u01/app/oracle/admin/sbdb/adump\' #手动创建目录 compatible=\'12.2.0\' remote_login_passwordfile=\'EXCLUSIVE\' control_files=\'/u01/app/oracle/oradata/sbdb/control01.ctl\',\'/u01/app/oracle/oradata/sbdb/control02.ctl\' #手动创建目录 log_archive_config=\'DG_CONFIG=(mrzhu,sbdb)\' log_archive_dest_1=\'LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sbdb\' #备库归档路径手动创建/u01/arch log_archive_dest_2=\'SERVICE=tnsmrzhu LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=mrzhu\' ##主备切换必选设置 log_archive_format=\'%t_%s_%r.arc\' #归档格式 db_file_name_convert=\'+DATA/MRZHU/DATAFILE\',\'/u01/app/oracle/oradata/sbdb\',\'+DATA/MRZHU/TEMPFILE\',\'/u01/app/oracle/oradata/sbdb\' #设置主库文件与备库文件传输目录(两对),主库的数据文件与临时文件可以通过select * from v$dbfile/v$tempfile;查看 log_file_name_convert=\'+DATA/MRZHU/ONLINELOG\',\'/u01/app/oracle/oradata/sbdb\' fal_client=\'tnsmrzhu\' fal_server=\'tnssbdb\' standby_file_management=\'AUTO\' - 在oralce账户下创建对应目录
mkdir -p /u01/app/oracle/admin/sbdb/adump mkdir -p /u01/app/oracle/oradata/sbdb/ mkdir -p /u01/arch使用参数文件启动实例到nomount状态
- 在DG上生成二进制启动参数文件spfile,注意oracle用户的环境变量sid为sbdb
create spfile from pfile;
图 189
图 190 - 启动到nomount状态
startup nomount
图 191检查启动参数文件
- 检查是否是由对应参数文件启动的数据库实例
show parameter spfile;
图 192P19节
静态监听listener.ora配置
- 使用1522端口
- 数据库在nomount状态下启动时只能使用静态监听,实现sqlplus远程登录操作数据库
创建静态监听配置文件
- DG的oracle用户下
su - oracle
cd /u01/app/oracle/product/12.2.0/db_1/network/admin (或者cd$ORACLE_HOME/network/admin)
vim listener.ora
内容如下:默认监听
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(HOST = mrzhu03)(PORT = 1521)) (ADDRESS = (PROTOCOL= IPC)(KEY = EXTPROC1521)) ) )新增备库监听LISTENER1
LISTENER1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu03)(PORT = 1522)) ) ) ) SID_LIST_LISTENER1 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mrzhu) (SID_NAME = sbdb) (ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1) ) )
图 193启动DG备库监听
- DG的oracle账户下启动监听listener1
lsnrctl start listener1
图 194链接文件tnsname.ora配置
- 使用N1与DG做数据通信
创建tnsname文件
- DG的oracle用户下
su - oracle
cd /u01/app/oracle/product/12.2.0/db_1/network/admin (或者cd$ORACLE_HOME/network/admin)
vim tnsnames.ora配置tnsnames.ora
tnsmrzhu = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) ) tnssbdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mrzhu03)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mrzhu) ) )主库测试与备库TNS通信
- N1_oracle账户下测试与备库通信
tnsping tnsmrzhu
tnsping tnssbdb
图 195
图 196 - 使用数据库之间的sqlplus远程登录测试
sqlplus sys/root123@tnsmrzhu as sysdba sqlplus sys/root123@tnssbdb as sysdba select instance_name,status from v$instance;
图 197
图 198 - N2上测试
tnsping tnsmrzhu
tnsping tnssbdb
sqlplus sys/root123@tnsmrzhu as sysdba #tnsmrzhu与mrzhu02绑定所以显示sid为mrzhu02
sqlplus sys/root123@tnssbdb as sysdba
select instance_name,status from v$instance;
图 199备库测试与主库TNS通信
- 在DG上使用oracle账户测试
tnsping tnsmrzhu
tnsping tnssbdb
sqlplus sys/root123@tnsmrzhu as sysdba #####监听name文件中配置tnsmrzhu与mrzhu01绑定所以显示sid为mrzhu01
sqlplus sys/root123@tnssbdb as sysdba
select instance_name,status from v$instance;
图 200 - listener与tnsname配置文件的区别
https://blog.csdn.net/m0_37373806/article/details/64159846
#########P20节创建DG的STANDBY副本
- 保证DG实例监听启动、实例为nomount状态
- 创建副本的方法使用duplicate复制(本文使用方法)或者使用rman离线复制
使用RMAN远程链接DG
- 在N1的oracle账户下
rman target / #基于操作系统验证,后续可能会报错
或基于密码验证
rman target sys/root123@tnsmrzhu #使用此方法较好 - 链接备备库实例
RMAN> connect auxiliary sys/root123@tnssbdb
图 201 - 或者也可以用一条命令直接链接备库通道
rman target sys/root123@tnsmrzhu auxiliary sys/root123@tnssbdb在N1复制数据库副本到备库
RMAN>duplicate target database for standby from active database nofilenamecheck;
图 202 - temp文件不会拷贝过去,由数据库自动生成
图 203查看备库状态
- DG库相关参数已由pfile设置
- 做完在线复制后DG数据库为mount状态了
图 204配置STANDBY日志组
- redolog
- 添加standby日志组、开启同步
- standby日志组=redo日志组+1共2+1
- 查看RAC主库日志组
select * from v$logfile; - 主库,DG日志成员为2个,如下
N1:
2个日志组goup1、2
N2:
2个日志组 group3、4
member1 ------(g1 、g2)
member2-------(g13、g4)
那么DG日志组配置2+1,thread为线程
thread1 ----(g11 g12 g13)
thread2 ----(g14 g15 g16)
图 205创建备库日志组
- 备库日志文件大小为200M必须与rac一致
- 在dg上查看成员与日志组
select * from v$standby_log;
图 206 - 在DG上添加日志组 2group+1group
#### alter database add standby logfile thread 1 group 11 (\'/u01/app/oracle/oradata/sbdb/stredo11.log\') size 200M; alter database add standby logfile thread 1 group 12 (\'/u01/app/oracle/oradata/sbdb/stredo12.log\') size 200M; ####对应节点1同步 alter database add standby logfile thread 1 group 13 (\'/u01/app/oracle/oradata/sbdb/stredo13.log\') size 200M; ### alter database add standby logfile thread 2 group 14 (\'/u01/app/oracle/oradata/sbdb/stredo14.log\') size 200M; alter database add standby logfile thread 2 group 15 (\'/u01/app/oracle/oradata/sbdb/stredo15.log\') size 200M; #####对应节点2同步 alter database add standby logfile thread 2 group 16 (\'/u01/app/oracle/oradata/sbdb/stredo16.log\') size 200M; #####打开Redo实时应用同步(ADG)功能
- 12c切换归档才能同步
alter database recover managed standby database using archived logfile disconnect; alter system switch logfile; - 取消redo同步
- alter database recover managed standby database cancel;
- ADG
- 切换DG数据库到open状态
alter database open;
图 207 - 在DG上开启redo实时同步
alter database recover managed standby database disconnect; - 设置完成后DG的open模式为read only with apply
修改保护模式为性能
- 最大性能,不会实时同步,如果主库采用非此模式且备库不可用会强制转化为此模式
alter database set standby database to maximize performance; - 最大可用,主库commit后备库实时修改,一般使用此模式
alter database set standby database to maximize availability; - 最大保护,如果主库和备库同步不了,主库就会shutdown
alter database set standby database to maximize protection;查看主备库模式
- 查看主库状态
setline 100 select name,open_mode,database_role,protection_mode, protection_level from v$database;
图 208 - 查看DG状态
select name,open_mode,database_role,protection_mode, protection_level from v$database;
图 209更改保护模式
- 在主库其一节点以及DG上设置即可
alter database set standby database to maximize availability;
图 210测试主备库数据同步功能
主库创建测试表
- 在主库插入表
create table zhu(id int); insert into zhu values(1000); commit; / / /
图 211在DG上查看表同步情况
图 212查看备库redo日志状态
select * from v$standby_log;
图 213查看后台同步进程状态
select * from v$managed_standby;
图 214DG数据同步优化(必配置)
- 之前的tnsname-hostname映射配置,DG的tnsmrzhu参数绑定的是mrzhu01,那么节点1 宕机后DG不会拉取节点2的日志进行同步
- 修改DG的tnsname的tnsmrzhu参数为rac-scan后无论N1或者N2宕机,DG都可以拉取归档
修改DG的tnsname.ora
- 在DG上oracle账户下
cd /u01/app/oracle/product/12.2.0/db_1/network/admin
vim tnsnames.ora
图 215 - 确认hosts解析已经添加
图 216重启监听进程
- 关闭备库监听listener1
lsnrctl stop listener1
图 217 - 关闭DG数据库
sqlplus / as sysdba
shutdown immediate
exit
图 218 - 启动备库监听
- lsnrctl start listener1
图 219- 启动DG实例
sqlplus / as sysdba
startup打开DG实时同步应用
- 数据库每次重启后都要重新开启实时同步
alter database recover managed standby database disconnect;
图 220 - 查看归档
1开头是N1,2开头是N2
图 221 - 在N1上查看最新归档号并与DG作对比,确认是否一致
图 222
图 223
图 224优化后同步测试
DG虚拟机断网
- 关闭虚拟机网卡
图 225N1插入数据到表zhu
- 测试DG断网拉取日志,在N1上插入zhu表数据
insert into zhu values(999); commit;
图 226 - 在N1和N2做几次日志切换
alter system switch logfile;
图 227 - 确认N2已经有此表的新增数据
查看主库节点归档
archive log list;
图 228
图 229确定rac-scan资源在主库哪个节点
grid账户下
crsctl stat res -t
图 230 - 在N1上查看scan监听
lsnrctl status listener_scan1
图 231关闭节点1电源
- 关闭节点1(虚拟机电源-关机),直接关机相当于scan断电,此时scan飘逸到N2上
图 232
crsctl stat res -t
图 233打开DG主机网卡
图 234
图 235确认DG是否接收到N2传输的归档日志
- 查看DG归档日志
cd /u01/arch/
图 236查看N2归档日志
- 建议使用视图化工具查看此参数,网速较慢可能会显示超时error
- 传输进程排错需要查看的参数
select from v$archive_dest;
select from v$archive_dest_status;
图 237对比DG与N2的归档日志
- 如果一样则说明,业务scan资源切换到N2上后,归档也能正常被同步到DG上
检查数据表同步情况
- 在DG上检查在N1上插入的数据有没被同步到DG上
- 打开日志实时同步应用
alter database recover managed standby database disconnect; #同步从N2上的归档到当前数据库中 - 在DG上查看表,确认是否有999值
select * from zhu;
图 238RAC与DG的启停顺序与同步常见问题
启停顺序
- 启动:
先备库,后主库 - 关闭:
先主库,后备库 - 前提:
- 干净的关闭,关闭实例,关闭资源,init 0 关机
常见问题
机房断电
- 注意如果DG服务器直接关机会报错
- 如果机房意外断电导致日志不连续需要DG恢复
图 239断电后的同步问题排查_1
- 排查思路
先执行sql界面优化SQL> COL NAME FOR A13 SQL> COL VALUE FOR A20 SQL> COL UNIT FOR A30 SQL> SET LINES 122 - 在DG上查看同步时间差
SELECT NAME,VALUE,UNIT,TIME_COMPUTED FROM V$DATAGUARD_STATS WHERE NAME IN (\'transport lag\',\'apply lag\'); - 查看主库log seq
select thread#, max(sequence#) from v$archived_log group by thread#; - 查看备库log seq
select thread#, max(sequence#) from v$archived_log where applied=\'YES\' group by thread#; - 本文中问题出在没有开启DG的监听,导致rac-scan数据传输有问题。
开启监听后
图 240 - 由于主库日志没有同步过来,这时候有2个办法
1、等待日志同步到备库后在执行alter databse open;
2、手动在N1和 N2上执行日志切换,强制同步日志。
图 241 - 查看同步时间差恢复正常为0
图 242 - 查看log
图 243
图 244 - 最后别忘了在DG上打开log日志同步到数据库数据应用,否则N1上插入数据DG上不会同步到数据表
alter database recover managed standby database disconnect; - 查看应用log seq
- select thread#, max(sequence#) from v$archived_log group by thread#;
图 245 - 为什么thread2是57而不是最新的应用log seq,因为DG上的tnsname是rac-scan,此时scan节点为N1,所以和节点1是实时同步,要想2节点的实时同步日志号与N2上一致,在N2上发生commit或者日志切换即可。
如下:
图 246
图 247 - 总结:如果没有按照规定关闭开启关数据库集群时,发生断电异步重启,会导致日志不同步而产生的各种问题
排错思路
- 软件层:网络数据同步传输通道正常,如tnsname配置、监听是否打开,解决通讯问题如果还有问题可以考虑日志切换后,手动执行DG恢复。
DG恢复参考:
http://blog.itpub.net/22996654/viewspace-2149347/
https://blog.csdn.net/ctypyb2002/article/details/86699877排查思路
- 查下主库节点,备库的配置
- 检查TNS相关配置
- 检查fal_client,fal_server参数
- 查下备库是否在实时应用模式
- 查询相关视图
备库:
v$managed_standby
注意RFS传输进程和MRP0日志应用进程
主库:
v$archive_dest
v$archive_dest_status
转载请注明-MrZ-个人博客
THE END
1
二维码
海报
【Oracle】12C RAC系列之02 ADG冗余部署(Linux)
目录1 ADG服务器创建前的准备1.1 说明与注意事项1.2 主库RAC归档配置-11.2.1 查看归档文件命令规则1.2.2 修改归档命名规则1.2.3 创建RAC归档保存目录1.2.4 修改两个实例的归档日志保存路径1.3 主库启用force loggi……


















































































MrZ