DataGuard

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataGuard相关的知识,希望对你有一定的参考价值。

DataGuard


一、容灾复制方案

1、阵列的复制技术(硬件)

通过在阵列之间进行复制,异地保存数据

对存储设备和网络环境要求比较高。

2、基于逻辑卷的复制技术(操作系统层面)

通过LVM的镜像技术来实现。

3、基于 Oracle 的 redo log 的复制(在应用层)

1) DataGuard

2) GoldenGate

3) Stream


二、什么是DG

1)不同于RAC保护主机,DG保护的是数据库

2)主库(一个)和备库(可以多个),异地容灾

3)物理DG和逻辑DG

逻辑复制:将主库的redo log传递到备库后,再利用logminer 的工具,从redo log中解析出sql语句,在备库执行,保证和主库同步。(主库和备库可以是不同的环境,备库可以处于读写状态)逻辑备库可以看作是一个单独的库(数据库名和DBID和主库都不一样)。

物理复制:将主库的redo log传递到备库后,备库对redo log日志进行recovery,来和主库保持一致。(主库和备库必须是相同的环境,备库一般处于只读状态)

物理的备库和主库是一样的(比如:数据库名、DBID)

4)Oracle Data Guard

Oracle 成本最低的容灾技术(Oracle企业版自动支持,通过主库和备库来实现容灾;一般主库处于生产环境,备库处于备份状态,或者可以利用备库做数据查询、生成报表、数据备份等减轻主库的压力)

主库将redo log传递到备库上,备库对redo log进行应用以保持和主库的同步。

(物理----RECOVERY,逻辑-----应用sql语句)

5)DG 环境

主库1个,备库最多可以有 9 个 

1、主库和备库之间都是单实例

2、主库是RAC,备库是单实例

3、主库是RAC,备库也是RAC(MAA实现最高可用性)

三、DG的保护模式

 

1.最大保护(Maximum Protection) 

这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的事务在提交前其REDO不仅被写入到本地的Online Redologs,还要同时写入到Standby数据库的Standby Redologs,并确认REDO数据至少在一个Standby数据库中可用(如果有多个的话),然后才会在Primary 数据库上提交。如果出现了什么故障导致Standby数据库不可用的话(比如网络中断),Primary 数据库会被Shutdown,以防止数据丢失。使用这种方式要求Standby Database必须配置Standby Redo Log,而 Primary Database必须使用LGWR,SYNC,AFFIRM方式归档到Standby Database.


2.最高可用性(Maximum availability) 

这种模式在不影响 Primary 数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台

Standby 数据库的 Standby Redologs 中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。这种方式虽然会尽量避免数据丢失,但不能绝对保证数据完全一致。这种方式要求Standby Database必须配置Standby Redo Log,而Primary Database 必须使用LGWR SYNC,AFFIRM方式归档到Standby Database.


3.最高性能(Maximum performance) 

缺省模式。这种模式在不影响Primary数据库性能前提下,提供最高级别的数据保护策略。事务可以随时提交,当前Primary 数据库的REDO数据至少需要写入一个Standby数据库,不过这种写入可以是不同步的。如果网络条件理想的话,这种模式能够提供类似最高可用性的数据保护,而仅对 Primary 数据库的性能有轻微影响。

这也是创建Standby数据库时,系统的默认保护模式。这种方式可以使用 LGWR ASYNC 或者 ARCH 进程实现,Standby Database也不要求使用Standby Redo Log


四、DG的有关进程

RFS: 在备库上启用的进程,接受重做日志(redo log和arch log)

LNSn: 本地网络服务,在主库上负责传送redo日志

MRP: 备库上管理恢复进程,如果是物理 DG,用于对redo log做recovery

LSP: 备库上逻辑备用进程,逻辑DG,是对redo log中抽取的sql进行应用。



例1:物理DG

条件:2台机器(PROD1;SBDB1)


PROD1:


ALTER DATABASE FORCE LOGGING;


select force_logging from v$database;


SELECT GROUP#, BYTES FROM V$LOG;

SELECT GROUP#, BYTES FROM V$STANDBY_LOG;


ALTER DATABASE ADD STANDBY LOGFILE (‘/u02/oradata/PROD1/slog1.rdo‘) SIZE 50M;

ALTER DATABASE ADD STANDBY LOGFILE (‘/u02/oradata/PROD1/slog2.rdo‘) SIZE 50M;

ALTER DATABASE ADD STANDBY LOGFILE (‘/u02/oradata/PROD1/slog3.rdo‘) SIZE 50M;


SELECT GROUP#, BYTES FROM V$STANDBY_LOG;

SELECT * FROM V$LOGFILE;


SHOW PARAMETER RECOVER;


NAME     TYPE VALUE

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

db_recovery_file_dest     string /home/oracle/flash

db_recovery_file_dest_size     big integer 4G

recovery_parallelism     integer 0



archive log list;


Database log mode       Archive Mode

Automatic archival       Enabled

Archive destination       USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     5

Next log sequence to archive   8

Current log sequence       8



SHUTDOWN IMMEDIATE;


STARTUP MOUNT;

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;



在initPROD1.ora文件最后添加一下内容


DB_UNIQUE_NAME=PROD1

LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(PROD1,SBDB1)‘

LOG_ARCHIVE_DEST_1=

 ‘LOCATION=/home/oracle/arch

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

  DB_UNIQUE_NAME=PROD1‘

LOG_ARCHIVE_DEST_2=

 ‘SERVICE=SBDB1 ASYNC

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 

  DB_UNIQUE_NAME=SBDB1‘



FAL_SERVER=SBDB1

DB_FILE_NAME_CONVERT=‘/u03/oradata/SBDB1‘,‘/u02/oradata/PROD1‘

LOG_FILE_NAME_CONVERT=‘/u03/oradata/SBDB1‘,‘/u02/oradata/PROD1‘

STANDBY_FILE_MANAGEMENT=AUTO



在tnsnames。ora文件下创建SBDB1配置


更名spfilePROD1.ora为spfilePROD1.ora.bak


将initPROD1.ora生成spfilePROD1.ora文件


重新启动数据库


将initPROD1.ora文件拷贝至node02机器中



STANDBY database

SBDB1:

更改initPROD1.ora部分内容,并创建相关目录

将改变后的initPROD1.ora文件变成initSBDB1.ora文件

生成SBDB1密码文件

在listener.ora文件中添加SBDB1属性,同时也在TNSNAMEs.ora文件中添加SBDB1属性

启动监听

进入sqlplus界面

生成 SBDB1的spfile

create spfile from pfile=‘initPROD1.ora‘;


启动到nomount的状态




PROD1:


rman target sys/[email protected] auxiliary sys/[email protected] nocatalog


duplicate target database for standby from active database  dorecover nofilenamecheck;


SBDB同步数据

sql > recover managed standby database using current logfile disconnect from session;


recover managed standby database cancel;


alter database open;


recover managed standby database using current logfile disconnect from session;






本文出自 “11862116” 博客,请务必保留此出处http://11872116.blog.51cto.com/11862116/1959066

以上是关于DataGuard的主要内容,如果未能解决你的问题,请参考以下文章