DataGuard的相关特性、功能及应用 知识

wangzha 2月前 171

前面一篇具体写到DataGuard的部署方案,这一篇具体跟大家聊一下及其特性及功能  言归正常  切入正题


1、DataGuard三种保护模式


主库和备库查询哪种模式

select name,open_mode,database_role,protection_mode,protection_level from v$database;


三种保护模式:

1)最高保护

这种模式主备库之间数据是同步的。即主库提交的同时,备库会做相应的恢复。最大限度的保证了数据完整性。不允许数据的丢失。


如果主备库之间网络,或者备库出现问题会直接影响主库操作。导致主库宕机。这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有事务在提交前其redo不仅被写入到本地的online redo log,还要同时提交到standby数据库的standby redo log,并确认redo数据至少在一个standby数据库可用(如果有多个的话),然后才会在primary数据库上提交。然后才会在primary数据库上提交,如果出现了什么故障导致standby数据库不可用的话,primary数据库会被shutdown。


2)最大可用性

这种模式和"最大保护"基本上差不多。正常情况下,主备库之间是同步的。


当网络或者备库出现问题时,不会影响到主库的宕机,主库会自动转换库"最大性能"模式,等待备库可用时,将归档传输到备库做恢复。


可以把这种模式理解为"最大保护"和"最大性能"两种模式的中间体。


3)最大性能

这种模式保证主库性能最大化,主备库之间数据是异步传输的。即,主备日志归档以后才会传输到备用库,在备库上使用归档日志文件做恢复操作。


注意:

最大保护及最高可用性需要至少一个standby数据库rddo数据库被同步


2、DataGuard三种保护模式转换


最大性能->最高可用->最高保护

最高保护->最高可用->最大性能


最大性能:

Lgwr async noaffirm

最大可用:

Lgwr sync affirm

最大保护:

Lgwr sync affirm

查询模式命令

select name,open_mode,database_role,protection_mode,protection_level from v$database;

Show parameter log查看日志

停止redo应用:

alter database recover managed standby database cancel;

启动redo应用

alter database recover managed standby database using current logfile disconnect;

最大性能模式转换为最高可用模式

模式转换

alter database set standby database to maximize performance;
alter database set standby database to maximize availability;
alter database set standby database to maximize protection;


3、SYNC-ASYNC-AFFIRM-NOAFFIRM参数


SYNC和ASYNC:

SYNC:主库commit之前,等待备库接收完日志数据

ASYNC: 主库commit之前,不必等待备库接收完日志数据

 

AFFIRM和NOAFFIRM:

AFFIRM:日志信息写到standby日志后,通知主库日志接收完毕

NOAFFIRM:不用等到日志信息写完standby日志后, 通知主库日志接收完毕

推荐:

最大性能:LGWR ASYNC NOAFFIRM

最大可用:LGWR SYNC AFFIRM

最高保护:LGWR SYNC AFFIRM

 

4、DataGuard日常维护

停止redo应用

alter database recover managed standby database cancel;

开启redo应用(非实时)

alter database recover managed standby database disconnect from session;

开启redo应用(实时)

alter database recover managed standby database using current logfile disconnect from session;

当主库和备库同时shutdown时

shutdown immediate
startup
select open_mode from v$database; (备库查看归档模式)
alter database recover managed standby database using current disconnect; (备库再开启同步模式)

启动数据库:

主、备库都在关闭状态,主备都要启动。

1)主库正常运行,启动备库。

 

主、备库都在关闭状态,主备都要启动。

1)启动备库监听

2)启动备库

3)启动主库监听

4)启动主库

 

主库正常运行,启动备库。

1)启动备库监听

2)启动备库

 

关闭数据库:

1)主库正常运行,只关闭备库。

2)主备库都要关闭。

 

主库正常运行,只关闭备库。

alter database recover managed standby database cancle;
shutdowm immediate;
lsnrctl stop

 

主备库都要关闭。

先关主库,再关备库。

a>关闭主库
shutdowm immediate;
lsnrctl stop
b>关闭备库
alter database recover managed standby database cancel;
shutdown immediate;
lsnrctl stop

 

备库应用了归档日志才能删除:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON standby


5、查询DataGuard状态


物理standby ,最大可用模式。

启动顺序:

先启动备库,再启动主库

Lsnrctl start listener1
Select open_mode from v$database; (查看状态)
Alter database recover managed standby database using current logfile disconnect;

再开启时时同步 (命令参照前面)

先起监听,后起实例

先起实例,后起监听。服务注册到监听需要一定的时间。

关闭顺序:

先关主库,后关备库


主备库里查询:

1

select * from v$database
Select name,open_mode,database_role,protection_mode,protection_level from v$database;

通过视图查看

--------------------------------------

Open_mode:

Read write(主库),read only(没用应模式), read only with apply(已开启实时应用) ,Mounted Database_role:

PHYSICAL STANDBY, LOGICAL STANDBY ,PRIMARY,

SNAPSHOT STANDBY (快照standby)

Protection_mode:

MAXIMUM AVAILABILITY, MAXIMUM PROTECTION, MAXIMUM PERFORMANCE

RESYNCHRONIZATION (重新同步模式), unprotected (处理mount状态)

Protection_level:

同protection_mode一样

--------------------------------------

2)

Select * from v$managed_standby (查看备库的进程状态,仅在备库执行)
Select process,pid,status,sequence# from v$managed_standby;

--------------------------------------

字段有“PROCESS,PID,STATUS,SEQUEDCE#”  相关进程可通过PID查看可用ps -ef |grep ora_

PROCESS 进程:

ARCH: 归档进程

MRPO:在备库用来应用接收的日志media recovery process(实时应用)

Process (表示有开启MRPO实时应用或者非实时应用)

RFS: remote file server,接收远程日志文件   (LOCAL=NO表示不是通过本地连进来)

Pid:操作系统进程号 

STATUS:

CONNECTED:和主库建立了网络连接

CLOSING:进程已经完成归档,并且关闭了归档文件

WRITING:进程正在写redo数据到归档文件

APPLYING_LOG: 正在应用日志到备库,开启实时应用

WAIT_FOR_LOG: 等待归档日志完成(开启非实时应用”alter database recover managed standby database disconnect;”,或者主备库之间不通)

Sequence#:表示当前归档日志序列号

--------------------------------------


3)select * from v$standby_log;   standby日志组,

备库查询

Select group#,sequence#,archived,status from v$standby_log;

最大可用模式,最高保护模式,备库都必须要有standby redo log。

Archive log list; (查看日志序列号变化)
ARCHIVED和STATUS 组合来看
Alter system switch logfile; (切换需要在主库执行)

备库查询

select * from v$log;       查询连机重构日志
Select * from v$logfile;    查看所有的日志文件


--------------------------------------

4

select * from v$archive_dest   (查看归档目的地)
select * from v$archive_dest_status;   (查看归档路径状态)


--------------------------------------

STATUS;(状态)

VALID(有效) INACTIVE(非活动的)  DEFERRED(禁用的)

Alter system set log_archive_dest_state_2=’defer’;  (如临时手动禁用同步)

TYPE:

LOCAL(主库) PHYSICAL(物理standby )  LOGICAL(逻辑standby ) SNAPSHOT(快照standby )

--------------------------------------

5

select * from v$archive_gap  (查看缝隙,很少用)
select * from v$dataguard_status (主库备库都可以查)
--------------------------------------
select * from v$dataguard_status where dest_id=1  (在主库执行,表主库的参数)
Select * from v$dataguard_status t where t.dest_id=2 order by t."TIMESTAMP" desc (主库查询)
Select * from v$dataguard_status t order by t.”TIMESTAMP” desc (备库查询)


--------------------------------------

7)select * from v$archived_log   查看归档日志

--------------------------------------

select * from v$archived_log t where t.dest_id=1 (查看备库信息)
select t.sequence#,t.applied,t.status from v$archived_log t where t.dest_id=1

Applied:

YES:日志文件已经应用,数据文件已经更新。 IN-MEMORY:日志文件已经在内存中应用,但是数据文件还未更新

---------------------------------------

查询命令集合

select * from v$database
Select name,open_mode,database_role,protection_mode,protection_level from v$database;
Select * from v$managed_standby
select process,pid,status,sequence# from v$managed_standby;
select * from v$standby_log;
Select group#,sequence#,archived,status from v$standby_log;
select * from v$log
select * from v$logfile;
select * from v$archive_dest
select * from v$archive_dest_status;
select * from v$dataguard_status
select * from v$dataguard_status where dest_id=1
Select * from v$dataguard_status t where t.dest_id=2 order by t.”TIMESTAMP” desc
Select * from v$dataguard_status t order by t.”TIMESTAMP” desc 
select * from v$archived_log
select t.sequence#,t.applied,t.status from v$archived_log t where t.dest_id=1

---------------------------------------


6、日志传输服务

1)日志传输服务(Redo Transport service)

主库和备库之间传输日志数据。


2)日志应用服务(redo apply service)

备用应用日志


日志传输服务:

1.主库配置发送redo数据到备库

2.备库配置接收redo数据

 

传输认证:

使用密码文件进行redo 传输认证

拷贝$ORACLE_HOME/dbs/orapwqdtestdb

Sys密码必须一致,密码相同才能同步,主库密码不能更改。如果主库密码更改,必须重新拷贝到备库。

----------------------------------------

Show parameter redo_t  
redo_transport_user=rtu(sysoper,sysdba)

创建rtu用户      (仅在主库执行)

Create user rtu identified by rtu;

授权

Grant sysoper,connect,resource to rtu;
Select * from v$pwfile_users;   (先登录主库,再看备库)

在备库给rtu授权

Grant sysoper to rtu;
Alter system set redo_transport_user=rtu;(主备库都要执行)

启用后,如主备库重启服务后,备库需开启实时应用同步。

Show parameter redo_t;


相关参数:

Log_archive_dest_n

Log_archive_dest_state_n

Enable:开启  defer:禁用

Show parameter log_archive_dest_1(登录主库查询)
Show parameter log_archive_dest_2 (登录主库查询)


SYNC和ASYNC:

SYNC:主库commit之前,等待备库接收完日志数据,至少一个备库完居。

ASYNC:主库commit之前,无需等待备库接收完日志数据。

AFFIRM和NOAFFIRM:

AFFIRM:日志信息写到备库standby日志后,通知主库日志接收完毕。

NOAFFIRM:不用等日志信息写到备库standby日志,就通知主库日志已经接收完毕。


三种模式: 

最大性能:LGWR ASYNC NOAFFIRM

最高可用:LGWR SYNC AFFIRM

最大保护:LGWR  SYNC AFFIRM


NET_TIMEO:

在SYNC模式下,LGWR进程等待备库成功接收日志的时间,默认时是30秒。

Seletc * from v$archive_dest: (登录主库查看默认时间)


REOPEN:

自动重新连接备库的最小秒数,默认300秒。

COMPRESSION:

数据以压缩的形式传输。

主库配置传输时间:

Alter system set log_archive_dest_2=’SYNC AFFIRM NET_TIMEOUT=15 REOPEN=60 COMPRESSION=ENABLE SERVICE=TNSstandby LGWR SYNC AFFI RW VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stddb’

备库配置传输时间:

Alter system set log_archive_dest_2=’SYNC AFFIRM NET_TIMEOUT=15 REOPEN=60 COMPRESSION=ENABLE SERVICE=TNSmaster LGWR SYNC AFFI RW VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=qdtestdb’;

最大可用、最高保护模式开启实时应用必须具有standby日志文件。

Alter database add standby logfile group (用这个命令添加standby日志文件)

-------------------------------


7、Redo 日志gap检测与解决

1) 自动解决

低带宽环境,减少gap解决的时间

Compression=enable启用日志压缩

Show parameter log


模拟故障:

   断开备库网络 (可以用此方法在主库上禁用 alter system set log_archive_dest_state_2=’defer’)

   主库切换几次日志,写入一些数据insert,

查看状态:

主库:

Select name,open_mode,database_role,protection_mode,protection_level from v$database;

Protection_level (RESYNCHRONIZATION)表示在同步状态

备库:也同样命令查询

Select * from v$managed_standby;

备库查询

Select t."SEQUENCE#",t."APPLIED" from v$archived_log t where t.dest_id=1  (是否有应用)

主库查询

Select t."SEQUENCE#",t."ARCHIVED" from v$archived_log t where t.dest_id=1
Select t.error from v$archive_dest;  
Select * from v$archive_dest_status;
CHECK CONNECTITITY
RESOLVABLE GAP
Select * from v$dataguard_status order by timestamp desc


2)手动解决

在某些情况下,GAP不能自动执行,必须手动。

主库不可用时

解决思路找出GAP的日志文件。从主库复制到备库。

Scp *.arc 10.10.1.88:/disk1/oracle/archive


拷完过后并没有应用,需要手动注册

rman target /  备库查询 list archivelog all;


手动注册日志文件:(有两种方式)

1)alter database register logfile ‘填日志文件全路径’;
2)rman>catalog start with '/disk1/oracle/archive/';   (自动开始应用)

 

8、定期清量archive_log日志文件


1)用RMAN连接目标DB:在命令行界面输入以下命令

rman target /

2)在RMAN命令窗口中,输入如下命令:

crosscheck archivelog all; 
delete expired archivelog all;

或者删除指定时间之前的archivelog:

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

(指定删除7天前的归档日志)

3)其它相关命令: 查看归档日志列表:

list archivelog all;

查看失效的归档日志列表:

list expired archivelog all;

4)定期清除archivelog: 可以将如下代码写成.bat文件,在控制面版的任务计划下添加新的定时任务:

RMAN target sys/*@orcl crosscheck archivelog all; 
delete expired archivelog all;


9、主备互换


主库:

查看状态

select database_role,switchover_status from v$database;
select protection_mode,protection_level from v$database;
select open_mode,database_role from v$database;

切换

alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby with session shutdown;

启动数据库

startup nomount;
alter database mount standby database;

添加standby redolog

alter database add standby LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/stredo01.log') size 50m;
alter database add standby LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/stredo02.log') size 50m;
alter database add standby LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/stredo03.log') size 50m;
alter database add standby LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/stredo04.log') size 50m;
 
alter database open;
alter database recover managed standby database using current logfile disconnect from session;

 

备库:

查看状态

select database_role,switchover_status from v$database;
select protection_mode,protection_level from v$database;
select open_mode,database_role from v$database;

切换

alter database commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;

 重启数据库

Shutdown immediate
Startup


10、Failover切换


步骤:

停止日志应用

alter database recover managed standby database cancel;

 

关闭standby日志传输

alter database recover managed standby database finish force;

 

切换到primary

alter database commit to switchover to primary with session shutdown;


做这一步的时候,若存在gap,则会报ORA-16139:Switchover: Media recovery required - standby not in limbo 错误。此时需要强制切换

alter database activate physical standby database;

重启数据库到open状态

查询状态

select open_mode,database_role from v$database;


最后于 2月前 被愚人乙编辑 ,原因:
最新回复 (0)
    • 运维开源项目互助社区—致敬开源
      2
        立即登录 立即注册 
返回