DG内容的积累总结
DG(data guard)
1. DG:
类似mysql的AB复制。dg是一个整体的环境配置,实现:高可用,数据保护,以及灾备三个特性,包含一个主库,一个或多个备库且最多只能有9个备库。
⚠️ADG情况说明:10g之前的dg,只有在mount状态下才可以接受应用redo log;11g增加的ADG功能,支持备库在open(read only)的同时可以接受应用主库传过来的redo log。
⚠️dg环境中的主备库大版本号必须一致,例如 11.2.0.4.n “n”可以不同;
2. 主库:
在dg环境中,主导整个数据变化,只能一个主库,众多应用访问的生产库,可以是单实例,也可以是RAC。
3. 备库:
是一种主库事物级别一致性拷贝,分为三个类型:物理备库,逻辑备库,快照备库。
- 物理备库:提供和主库完全相同的形态,数据内容和存储位置是块对块级别的一直,可以看成是镜像关系,以 redo apply。
- 逻辑备库:数据内容上完全一致,在物理存储位置上可能不同,以sql apply。
- 快照备库:把备库先变成快照模式,然后进行其他的测试,用完之后,还可以变回之前状态那个点。在12c中稳定性更好,被广泛应用。
4. DG的相关服务
日志传输的意义:它不仅控制着传输主库redo log到其他数据库,同时还管理着解决由于网络中断造成的归档文 件未接收的过程。4.1 日志传输模式(redo transport services)
日志传输如何发送数据:可以使用归档进程(arcn)或者日志写进程(lgwr)收集redo数据并传输到standby,都是由一个核心参数控制log_archive_dest_n (n: 从0~10) 定义redo文件路径,该参数定义必须通过location或者service指明归档文件路径。
相关参数:
归档进程:
- ARCn进程归档 --默认的方式,⚠️只支持最大性能保护模式。
- LGWR进程归档 --触发本地写的同时将这个日志条目写到备库的standby redo logfile。
(⚠️由ARCn传输同步模式改为LGWR传输同步模式步骤
首先要查看当前数据库角色:
>select name, database_role,open_mode,protection_mode,protection_level from v$database;
查看当前的传输进程
>select process, status from v$managed_standby;
查看当前的传输参数设定
>show parameter log_archive_dest_2
修改日志的传输模式
>alter system set log_archive_dest_2='service=备库的网络服务名 lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=备库的网络服务名';
网络传输模式:
- sync --同步
- async --异步
磁盘写确认模式:
- affirm --确认
- noaffirm --非确认
常见的组合:
- arcn async noaffrim(默认的)
- lgwr sync affrim
常见单词缩写:
- RFS(remote file server):接收主库传过来的日志,将其应用到备库重做日志。
- MRP(managed recovery process):应用日志到物理备库。
- LSP(logical standby process):用于归档日志到逻辑备库
作用:
- 负责将主库的redo data 传输到备库上去。
- 管理可能发生的日志gap。
- 自动获取missing的redo数据。
sql apply:没法保证数据块级别的改变发生在同一个位置,例如:建表申请段时,里面的区,不能保证完全和主库一致
- 物理备库采用 redo apply(redo log中记载了数据块的变化信息),能保证在块级别和主库一直。
- 逻辑备库采用 sql apply,日志传到备库后,采用logminer 挖掘出所有的sql,重新在备库上执行。
⚠️DG环境中,从物理备库转换成逻辑备库,不能从逻辑备库转换成物理备库,
转换方式分两种:
手动切换 switchover,可以确保不丢失数据。
被动切换 failover,当主库出现故障,并且不能被及时恢复时,会调用failover,将一个备库转换为新的主库,在最大保护模式下或最高可用模式下,failover可以保证不丢失数据。
5.DG提供的保护模式
5.1 最大性能模式:在不影响主库性能的情况下,提供*别的保护模式。
5.2 最大保护模式:保证主备库内容必须完全一致,保证当主库出现问题时,不会有数据丢失,redo data必须同时写入主备两库中,一旦不成功,主库hang住。
5.3 最大可用模式:介于上两个模式之间,退而求其次的关系,如果是同一机房同一机柜可以采用此方式。
6.DG中涉及到的日志
- online redo log
- archived log
- standby log
DG环境的搭建
一、主库的前期准备
1.主库设置开启强制日志,enable force logging
操作方法:
>select force_logging from v$database; --查看强制日志的开启状态
>alter database force logging; --开启强制日志功能
⚠️默认情况下数据库操作会记录redo log,但是在一些特定的情况下可以使用 nologging来不生成redo信息
- 表的批量INSERT(通过/*+APPEND */提示使用“直接路径插入“。或采用SQL*Loader直接路径加载)。表数据不生成redo,但是所有索引修改会生成redo(尽管表不生成日志,但这个表上的索引却会生成redo!)。
- LOB操作(对大对象的更新不必生成日志)。
- 通过CREATE TABLE AS SELECT创建表
- 各种ALTER TABLE操作,如MOVE和SPLIT
- 在一些表迁移和表空间迁移中,可以使用alter table a nologging;或者alter tablespace snk nologging;在操作完成后再修改回logging状态。 这里需要多说一句,如果你使用nologging导入大批量数据,以后对这些数据的修改会在redo或者archive log中,但是基准的数据是没有的,所以一旦介质损坏是无法完全恢复的,必须在使用nologging完成切换回logging后,做一次全备或者0级备份。
2.密码文件的设置
同一个dg中所有数据库必须拥有独立的密码文件,且sys 用户拥有相同的密码已保证redo 数据顺利传输。
3.设置主库的参数文件
需要添加如下内容:
db_unique_name=??? --用于dg环境中为每个库指定唯一的名称,区别不同库
log_archive_config='dg_config=(这里填写dg环境中所有库的db_unique_name)'
log_archive_dest_1='location=主库本地的归档路径 valid_for=(all_logfiles,all_roles) db_unique_name=主库的的db_unique_name'
log_archive_dest_2='service=备库的本地服务名 valid_for=(online_logfiles,primary_role) db_unique_name=接受的备库的db_unique_name'
log_archive_dest_stat_1=enable
log_archive_dest_stat_2=enable
log_archive_format=%t_%s_%r.arc
log_archive_max_processes=4 --指定归档进程数量(>=30)
fal_server=指定切换对象的db_uniquen_name
db_file_name_convert=‘/备库的文件存储路径’,‘/主库的文件存储路径’
--指定在主库中数据文件的位置,并指定如果到了备库该存放在哪里,主备数据文件存放路径对应关系对方在前,自己在后。
log_file_name_convert=同上
standby_file_managent=auto --dg的管理方式,如果主库数据文件发生例如新建,重命名等的修改时,按照参数的设置备库中也有相应的修改变化,(manual表示手动管理。)
4.创建相应的目录
5.创建新的参数文件,重启数据库,
create spfile from pfile;
6.给主库增加备库在线日志文件组
当以后发生主备转换时才用到,默认比主库的在线日志组多一组
7.主库开启归档模式
8.采用rman 备份主库
RMAN>configure channel device type disk format '备份的路径‘;
RMAN>backup as compressed backupset database include current controlfile for standby plus archived log
二、备库的前期准备
1.创建备库的密码文件
为防止出现ora-16191错误,将主库的sys用户的密码scp给备库
2.修改备库的参数文件
db_unique_name=??? --备库的
log_archive_config='dg_config=(这里填写dg环境中所有库的db_unique_name)'
log_archive_dest_1='location=此备库本地的归档路径 valid_for=(all_logfiles,all_roles) db_unique_name=备库的的db_unique_name'
log_archive_dest_2='service=主库的本地服务名 valid_for=(online_logfiles,primary_role) db_unique_name=接受的备库的db_unique_name' --此条设置做主库需要传输日志时才使用
log_archive_dest_stat_1=enable
log_archive_dest_stat_2=enable
log_archive_format=%t_%s_%r.arc
log_archive_max_processes=4 --指定归档进程数量(>=30)
fal_server=指定切换对象的db_uniquen_name
db_file_name_convert=‘/主库的文件存储路径’,‘/此备库的文件存储路径’
--指定在备库中数据文件的位置,并指定到了备库该存放在哪里,主备数据文件存放路径对应关系对方在前,自己在后。
log_file_name_convert=同上
standby_file_managent=auto --dg的管理方式,如果主库数据文件发生例如新建,重命名等的修改时,按照参数的设置备库中也有相应的修改变化,(manual表示手动管理。)
3.创建相应的路径
4.启动备库的实例
三、主备库分别做静态注册并且配置网络服务名
四、恢复备库
$rman target sys/[email protected]主库的网络服务名 auxillary sys/[email protected]备库的网络服务名
RMAN>duplicate target database for standby;
恢复完备库自动启动到mount状态
五、同步数据
>alter database recover managed standby database disconnect from session; --应用日志服务
⚠️ disconnect from session 字句并非必须,该句用于指定启动完应用后自动退出到命令操作符前,如果不指定,当前的session就会一直停留在处理redo应用,如果想做其他操作,就只能新建链接。
⚠️如果备库要从mount打开到read only 模式,需要先停止日志应用服务
>alter database recover managed standby database cannel;
>alter database open;
⚠️对于oracle 11g 的版本,支持ADG 物理备库可以在open状态下启用日志应用服务;
>alter database recover managed standby database using current logfile disconnect;
备库的管理
1.主备库的启停
起库 --先备后主
关库 --先主后备,首先应关闭redo应用,alter database recover managed standby database cancel;
2.查看主库中日志传输应用情况
select sequence#,applied from v$archived_log order by 1;
3.在主库中查看日志传输是否有异常
select dest_id,status,error,target,process from v$archive_dest;
4.在不同的数据库上创建物理备库
4.1 修改参数文件
- 增加log_archive_config和og_archive_dest_n;
- 修改db_file_name_convent和log_file_name_convent
- create spfile from pfile;
4.2 拷贝主库的sys密码文件
4.3 创建相应路径
4.4 启动备库到nomount状态
export=ORACLE_SID=规划的实例名
startup nomount
保护模式的转换
⚠️在主库上执行
1.最大性能====>最大保护
步骤:
- 一致性停库
- 启动到mount状态
- 设置为最大保护模式
>alert database set standby database to maximize protection;
- 启动到open状态
2.最大保护===>最大可以模式
步骤:
- 一致性停库
- 启动到mount
- 设置最大可用模式
>alter system set standby database to maximize availability
- 启动到open状态
3.最大可用模式===>最大性能模式
- 一致性停库
- 启动到mount
- 设置最大可用模式
>alter system set standby database to maximize performance
- 启动到open状态
物理主备库的转换
DG环境中的角色分为:
- 主库
- 物理备库
- 逻辑备库
角色转换方式分两种:
- switchover:人为有计划的角色切换(适用情况包括:主库升级,或者是硬件升级)
- failover:当主库宕机
角色切换的顺序:
必须是主库首先切换成备库,然后选择某一个备库切换成主库
一、主库转备库
1.分别查看确定主备库上的相关参数
>select database_role,protection_mode,protection_level from v$database;
>select group#,status,used from v$standby_log; --只在主库查看
>show parameter fal_server
>show parameter db_file_name_convert
>show parameter log_file_name_convert
2.检查网络
交替在两库内tnsping
3.查看主库转换状态并进行角色转换
>select name, database_role,switchover_status from v$database;
⚠️如果状态是session active 可以使用一下命令转换
alter database commit to switchover to physical standby with session shutdown
4.主库首先转换成备库
>alter database commit to switchover to physical standby;
5.将新备库关闭重启至mount
>shutdown abort;
>startup mount;
二、备库转成主库
1.在原备库上执行:
>alter database commit to switchover to primary;
⚠️如果执行后报错如下:
“> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
start the recover action:”
可执行:>alter database recover managed standby database disconnect;
如果执行提示信息如:applied all log....
then switchover to primary 继续下步操作
2.原备库切换成新主库
>alter database commit to switchover to primary with session shutdown;
3.查看切换之后的状态
>select name, database_role,protection_mode,protection_level from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
------------- ------------------------ ----------------------------------- ----------------------------
ORCL11G PRIMARY MAXIMUM PERFORMANCE UNPROTECTED
>select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------------- --------------stddb MOUNTED
4.将新主库开启至open状态
>alter database open
5.在新备库开启日志应用模式
>alter database recover managed standby database using current logfile disconnect;
至此,主备库转换完毕!
创建逻辑备库
待续