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的相关服务

4.1 日志传输模式(redo transport services)

日志传输的意义:它不仅控制着传输主库redo log到其他数据库,同时还管理着解决由于网络中断造成的归档文                            件未接收的过程。

日志传输如何发送数据:可以使用归档进程(arcn)或者日志写进程(lgwr)收集redo数据并传输到standby,都是由一个核心参数控制log_archive_dest_n (n: 从0~10) 定义redo文件路径,该参数定义必须通过location或者service指明归档文件路径。

相关参数:

扫描二维码关注公众号,回复: 474848 查看本文章

  归档进程:

    • 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数据。
4.2 应用日志服务(apply services)

 sql apply:没法保证数据块级别的改变发生在同一个位置,例如:建表申请段时,里面的区,不能保证完全和主库一致

  • 物理备库采用 redo apply(redo log中记载了数据块的变化信息),能保证在块级别和主库一直。
  • 逻辑备库采用 sql apply,日志传到备库后,采用logminer 挖掘出所有的sql,重新在备库上执行。
4.3 角色转换(role transitions)

⚠️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/sys@主库的网络服务名 auxillary  sys/sys@备库的网络服务名 

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;

至此,主备库转换完毕!


创建逻辑备库

待续





猜你喜欢

转载自blog.csdn.net/fc_barceiona/article/details/79288453
今日推荐