dataguard搭建过程

物理Standby和逻辑Standby

1. 物理Standby
Redo Apply: 通过oracle的恢复机制,基于数据库级别应用redo数据,要求数据库在mount状态,不能open。
Read Only: 可以以read only模式打开,以便在standby执行查询等操作,此时虽然还可以接收redo,但无法应用,直到切换回redo apply状态才可以再应用。
Read Write: 可临时性的以read write模式打开,此时日志不传输也不应用,如果设置了flashback area,闪回恢复至read write前状态后,又可以进行redo apply了。
优点: 
1) 可保证standby和primary物理级别上的完全一致性。
2) 效率高,因为是使用最底层的块级别上的复制。
缺点:
1) 在与primary同步时,standby不能open,无法分担primary上的负载。

2. 逻辑Standby
SQL Apply: 从redo 日志中提取SQL语句应用,数据库处于open(read write)模式下。
优点: 
1) 在与primary同步时,standby处于open状态,可分担primary上部分的查询和报表服务。
缺点:
1) standby和primary的物理结构不一致,且对某些数据和SQL语句有限制。
2) 效率较低,因为是执行SQL语句。

===========================
以上写的都是10中的特性,在11g中,dataguard有了新特性:
物理standby在以read only模式打开的同时,还可以做redo apply,类似于逻辑standby的特点。

 下面开始搭建过程:

Oracle Dataguard step by step

 

 

1、将DB服务器设置为归档模式,使用以下命令:

Shutdown immediate

Startup mount

Alter database archivelog;

Alter database open;

Archive log list;(查看归档状态)

 

2、设置DB服务器为force logging模式,使用如下命令;

alter database force logging;

select force_logging from v$database;(查看设置状态)

 

 

3、同步密码文件;

Orapwd file=D:\oracle\1120\database\pwdorcl.ora password=orcl10g entries=10

并把新生产的密码文件复制到备库D:\oracle\1020\database\下

 

 

4、编辑DB服务器上的D:\oracle\admin\pfile\initorcl.ora文件,添加以下内容:

 

#Primary Database Primary role Parameters

db_unique_name=production

log_archive_dest_1 = 'location=d:\oracle\admin\archive valid_for=(all_logfiles,all_roles)'                

log_archive_dest_2='SERVICE=standby LGWR ASYNC valid_for=(online_logfiles, primary_role) db_unique_name=standbydb'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=enable

#log_archive_dest_state_2=defer

log_archive_format = %%ORACLE_SID%%T_%TS%S%R.ARC

remote_login_passwordfile=exclusive

 

#Primary Database Standby role Parameters

fal_server=standby

fal_client=production

#standby_archive_dest='D:\oracle\admin\archive\standby'

standby_file_management=auto

log_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

db_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

注意:归档日志文件(ARC文件)与数据文件(DBF文件)不能存放在同一物理设备上。

 

5、备份DB服务器上的D:\oracle\1020\network\admin\tnsnames.ora文件

6、编辑DB服务器上的D:\oracle\1020\network\admin\tnsnames.ora文件,添加以下内容:

standby =

(DESCRIPTION =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = Standby服务器名或IP地址 )(PORT = 1521))

  )

  (CONNECT_DATA =

    (SERVICE_NAME = orcl)

  )

)

 

 

7、在DB服务器上建立standby日志文件,使用以下命令;

ALTER DATABASE ADD STANDBY LOGFILE 'd\oracle\oradata\stby_redo1.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo2.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo3.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo4.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo5.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo6.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo7.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo8.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo9.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo10.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo11.rdo' SIZE 104857600;

 

注意:Standby日志文件应建立11组。(要比主库上的redo日志多一组)

 

以下命令为查看日志状态及数据库状态:

Select member, group# from v$logfile;

Select controlfile_type,open_mode from v$database;

 

 

 

8、在DB服务器上建立standby服务器的控制文件,使用以下命令:

Alter database create standby controlfile as ‘d:\control01.ctl’;

 

9、在DB服务器及Standby服务器上停止Oracle Service;

shutdown immediate;

 

10、将DB服务器上的数据库文件拷贝到Standby服务器上;

    复制DB服务器数据文件 d:\oracle\oradata 到Standby d:\oracle\oradata    

这里采用的是冷备的方式,也可以用rman的duplicate 在线复制

rman target sys/oracle@production auxiliary sys/oracle@standby nocatalog
duplicate target database for standby from active database nofilenamecheck;

 

11、复制第9步建立的控制文件到Standby服务器

Copy D:\control01.ctl to Standby Server d:\oracle\oradata\control01.ctl

Copy D:\control01.ctl to Standby Server d:\oracle\oradata\control02.ctl

 

12、在DB服务器上启动oracle

13、备份Standby服务器上的D:\oracle\1020\database\initorcl.ora文件;

 

14、在Standby服务器编辑D:\oracle\1020\database\initorcl.ora文件,增加以下内容;

#Standby Database standby role parameters

db_unique_name=standby

fal_server=production

fal_client=standby

log_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

db_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

standby_archive_dest='D:\ORACLE\admin\archive\standby'   ------该参数在11g中弃用,

standby_file_management=AUTO

 

# Standby database primary role parameters

log_archive_dest_1 = 'location=d:\oracle\admin\archive valid_for=(all_logfiles,all_roles)'                

log_archive_dest_2='SERVICE=production LGWR ASYNC valid_for=(online_logfiles, primary_role) db_unique_name=prodb'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=defer

#log_archive_dest_state_2=ENABLE

log_archive_format = %%ORACLE_SID%%T_%TS%S%R.ARC

remote_login_passwordfile=exclusive

 

15、备份Standby服务器上的D:\oracle\1020\network\admin\tnsnames.ora文件

16、在Standby服务器编辑D:\oracle\1020\network\admin\tnsnames.ora文件,增加以下内容:

production =

(DESCRIPTION =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ‘DB服务器名或IP地址’)(PORT = 1521))

  )

  (CONNECT_DATA =

    (SID = orcl)

  )

)

 

 

17、将Standby服务器上的Oracle用NOMOUNT状态启动;

Shutdown immediate;

Startup nomount;

 

18、激活Managed recovery Process (MRP),用以下命令: 取消mrp: alter database recover managed standby database cancel;

Alter database mount standby database;

Alter database recover managed standby database disconnect from session;

 

19、验证tnsname

Tnsping production (在Standby服务器上执行)

Tnsping standby(在DB服务器上执行)

 

20、在DB服务器和Standby服务器上验证角色状态

Select controlfile_type,open_mode from v$database;

DB 服务器显示如下内容:

 

Standby显示如下内容:

 

 

21、检查日志的传输及应用

在DB服务器上执行如下命令:

Alter system switch logfile;

Archive log list;(注意归档日志序列号)

在Standby服务器上执行如下命令;

Select sequence#,name,applied from v$archived_log;(注意归档日志是否全部应用,归档日志序列是否最后一个)

 

 

 

dataguard --swithover 和failover的说明:

 

 

SWITCHOVER

Switchover是有计划的将primary切换为standby,standby切换为primary.在主库结束生产后,备库应用完所有主库archivelog或者redo log后进行切换,不丢失数据。

常用场景:

(1) 有计划的灾备切换演练,如测试灾备站点的可用性,客户端连接等,确保主库发生重大意外时,可以切换至备库正常运转。

(2) 主库长时间的维护升级,如OS升级,DB滚动升级,更换存储,更换OS硬件设备等。

(3) 切换有风险,一般不做切换。

FAILOVER

Failover通常在主库突发故障,短时间无法解决,考虑到备库的可用性,数据丢失的容忍度,迫切需要向外提供数据库服务时进行Failover.

Failover前,如果数据库没有操作在最大保护模式,可能发生数据丢失。

Failover前,需要将准备Failover的备库置于最大性能模式。

Failover前,尽量应用所有的主库重做数据,减少数据丢失。

Failover后,原主库将从DG配置中删除,如果原主库启用了Flashback,则在修复故障后,故障的数据库可恢复为新的standby数据库。

 

Oracle11.2之前,可以拷贝primary的online redo log到standby做recover,从Oracle11.2开始,Oracle提供了flush redo到standby的功能,当primary不能OPEN时,启动到mount状态,standby redo apply处于激活状态,执行以下语句flush redo到standby,以此来减少数据丢失:

SQL> alter system flush redo to target_db_name; 

 

具体切换过程

①switchover-----无损转换

1、检查primary数据库是否支持切换成standby

   SQL>Select switchover_status from v$database;

   如果支持则status状态为  To standby 或session active(当前有用户连接)

2、启动switchover

   SQL>alter database commit to switchover to standby/physical standby with session shutdown;

3、SQL>shutdown immediate

   SQL>startup mount

 

4、检查standby库是否支持切换

   SQL>Select switchover_status from v$database;

       如果支持则status状态为  To primary或session active(当前有用户连接)或switchover pending              (standby库没有启用redo应用)

       如果为switchover pending状态则需要执行启用redo日志应用:

   SQL>alter database recover managed standby database disconnect from session;

5、转换角色到primary

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

   SQL>alter database open;

 

②failover-----会丢失数据

执行failover后原primary库将不再是dataguard中的一部分,所以在执行failover之前,尽可能将原primary库中的redo文件(含联机重做日志文件和归档日志文件)都复制到standby库

1、如果待转换的standby库处于maximum protection模式,需要切换到maximum performence模式

SQL>alter database set standby database to maximum performence;

2、检查归档日志是否连续

   查询待转换standby库(原primary)的v$archive_gap,确认归档文件是否连续

SQL>select thread#,low_sequence#,high_sequence# from v$archive_gap;

如果有返回记录,则按照列出的记录号复制对应的归档日志到待转换的standby服务器

文件复制过去后在待转换的standby服务器上执行:

SQL>alter database register physical logfile ‘filespec1’;

3、检查归档文件是否完整

分别在两台服务器上执行:

SQL>select distinct thread#,max(sequence#)  over(partition by thread#) a from v$archive_log;

4、启动failover

SQL>alter database recover managed standby database finish force;

5、切换物理standby为primary

SQL>alter database commit to switchover to primary;

6、启动新的primary

如果当前库为mount则直接open,如果为read only,则要先shutdown再open

完!

================================================================================

Standby Redo Log就是在Standby端应用传递Redo Log过程中,逐步执行的online redo log。Standby端虽然也有online redo log,但是在redo apply应用的过程中,是不使用online redo log的。即使是11g Active Data Guard支持apply中读取standby数据,这个操作也是read-only的,并不涉及当前实例redo log的生成(注意是生成)。所以,如果一直是在Standby角色,online redo log是不需要的。

 
Primary传递过来的redo log信息,是存放在standby redo log组内进行apply的。并且随着主库Primary日志的切换动作而切换。这也就是为什么推荐standby redo log的大小和Primary online redo log的大小保持一致的原因。

 

Oracle Dataguard提供了三种数据保护模式,上述采用的最大性能模式。

1.最大保护模式
1)这种模式提供了最高级别的数据保护能力;
2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交;
3)主库找不到合适的备库写入时,主库会自动关闭,防止未受保护的数据出现;
优点:该模式可以保证备库没有数据丢失;
缺点:主库的自动关闭会影响到主库的可用性,同时需要备库恢复后才能提交,对网络等客观条件要求非常的高,主库的性能会因此受到非常大的冲击。

2.最大可用性模式
1)该模式提供了仅次于“最大保护模式”的数据保护能力;
2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交;
3)主库找不到合适的备库写入时,主库不会关闭,而是临时降低到“最大性能模式”模式,直到问题得到处理;
优点:该模式可以在没有问题出现的情况下,保证备库没有数据丢失,是一种折中的方法;
缺点:在正常运行的过程中缺点是主库的性能受到诸多因素的影响。

3.最大性能模式
1)该模式是默认模式,可以保证主数据库的最高可用性;
2)保证主库运行过程中不受备库的影响,主库事务正常提交,不因备库的任何问题影响到主库的运行;
优点:避免了备库对主数据库的性能和可用性影响;
缺点:如果与主库提交的事务相关的恢复数据没有发送到备库,这些事务数据将被丢失,不能保证数据无损失;

  最大保护 最大可用 最大性能
对主数据库性能影响 较高 较高
对网络链路要求 极高
备份数据库发生故障 主数据库不可用 无影响 无影响
数据保护 无数据丢失   基本无数据丢失 少量数据丢失

 

 

 

 

 

 

 

 

 

 

 

 

修改数据保护模式步骤

1)关闭数据库,重启到Mount 状态,如果是RAC,需要关闭所有实例,然后只启动一个实例到mount状态。

2)修改模式:

语法:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}; 

如:SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

3) 打开数据库: alter database open;

4) 确认修改数据保护模式:

SQL>select protection_mode,protection_level from v$database; 

 

posted @ 2018-08-31 17:06  lysheng  阅读(2902)  评论(0编辑  收藏  举报