Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性、数据保护和灾难恢复解决方案。它提供管理、监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受故障、灾难、错误和损坏的影响。

Data Guard 优点

灾难恢复和高可用性
Data Guard 提供了一个高效、全面的灾难恢复和高可用性解决方案。自动故障切换和易于管理的转换功能允许主数据库和备用数据库之间的快速角色转换,从而使主数据库因计划中和计划外的中断所导致的停机时间减到最少。

完善的数据保护
备用数据库还针对数据损坏和用户错误提供了有效防护。主数据库上的存储器级物理损坏不会传播到备用数据库上。同样,导致主数据库永久损坏的逻辑损坏或用户错误也能够得到解决。最后,重做数据在到达备用数据库并在以后应用到备用数据库时得到验证。

有效利用系统资源
物理备用数据库可用于备份和只读报表,这样既减少了主数据库的负载又节省了宝贵的 CPU 和 I/O 周期。物理备用数据库还可以在不牺牲数据保护的同时在物理备用数据库和开启读/写功能的数据库间轻松转换。逻辑备用数据库支持对同步的备用数据库进行读写访问,和/或向备用数据库添加本地表来实现更新,和/或创建额外索引来优化读取性能。

数据保护中的灵活性平衡性能需求和可用性
Oracle Data Guard 提供最大程度的保护、最大的可用性和最佳性能模式来帮助企业平衡数据可用性和系统性能需求。

防止通信失败
如果主数据库和一个或多个备用数据库失去网络连接,重做数据将不能从主数据库发送到这些失去连接的备用数据库。一旦连接重新建立起来,Data Guard 将自动检测丢失的重做数据,必要的存档日志将自动传输到备用数据库。备用数据库将与主数据库重新同步,无需管理员手动干预。

简单的集中式管理
Data Guard Broker 实现了 Data Guard 配置中跨多个数据库的管理和监视任务的自动化。管理员可以借助 Oracle 企业管理器或 Broker 自己专用的命令行界面 (DGMGRL) 来利用这个集成管理框架。

一、环境介绍

1. 主数据库环境

操作系统版本      : Red Hat 5.8 x86_64
IP地址            : 192.168.100.121
数据库版本        : Oracle 11.2.0.1 x86_64
数据库名          : fxopt
数据库SID         : fxopt
Db_unique_name    : fxopt
Instance_name     : fxopt
网络服务名        : PRIMARY

 

2. 备数据库环境

操作系统版本      : Red Hat 5.8 x86_64

IP地址            : 192.168.100.122
数据库版本        : Oracle 11.2.0.1 x86_64(只安装oracle数据库软件)
数据库名          : fxopt
数据库SID         : fxopt
Db_unique_name    : fxopt_std
Instance_name     : fxopt
网络服务名        : STANDBY

 

3. DataGuard启动顺序

启动顺序:先启备库,后启主库

关闭顺序:先关主库,后关备库

 

.主数据库环境准备

1. 准备工作

1) 检查数据库状态

SQL> select force_logging,log_mode,flashback_on from v$database;

2) 将主库设置为FORCE LOGGING模式

SQL> alter database force logging;

3) 开启归档模式(如已开启,跳过)

SQL> alter system set log_archive_dest_1='LOCATION=/ora_rman/arc' scope=spfile;

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;

 

2. 重建密码文件

充分利用主数据库原来环境,尽量不对主数据库参数配置作过多的修改。

$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=oracle entries=10 force=y

$ cp $ORACLE_HOME/dbs/orapw$ORACLE_SID /ora_rman


3. 
修改主库参数文件

SQL>

alter system set INSTANCE_NAME='fxopt' scope=spfile;

alter system set DB_UNIQUE_NAME='fxopt' scope=spfile;

alter system set LOCAL_LISTENER='primary' scope=spfile; --配TNS Name

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fxopt,fxopt_std)'; --这里是db_unique_name!如果db_unique_name一致的话,这个参数不需要配

alter system set LOG_ARCHIVE_DEST_1='LOCATION=/ora_rman/arc valid_for=(all_logfiles,all_roles) db_unique_name=fxopt' scope=spfile;

alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=fxopt_std' scope=spfile; --Service是配TNS Name

alter system set LOG_ARCHIVE_FORMAT='ARC_%T_%S_%R.arc' scope=spfile;

alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=spfile;

alter system set FAL_CLIENT='primary' scope=spfile; --配TNS Name

alter system set FAL_SERVER='standby' scope=spfile; --配TNS Name

alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;

alter system set STANDBY_ARCHIVE_DEST='/ora_rman/arc' scope=spfile; --配的路径跟LOG_ARCHIVE_DEST_1一致

然后重启数据库:

SQL> shutdown immediate;

SQL> startup;

4. 修改配置lisener监听文件

# listener.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = fxopt)

(ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1)

(SID_NAME = fxopt)

)

)

ADR_BASE_LISTENER = /app/oracle

 

5. 修改配置tnsname.ora文件

说明:PRIMARY是主库的服务名,STANDBY是备库的服务名。

#/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

PRIMARY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = fxopt)

)

)

STANDBY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = fxopt)

)

)

6. 备份主库数据文件

关闭应用服务器,停止监听,开始RMAN备份:

$ lsnrctl stop

$ rman target /

RMAN> backup full database format '/ora_rman/backup_%T_%s_%p.bak';

##RMAN> sql "alter system archive log current";

##RMAN> backup archivelog all format='/backup/arch_%T_%s_%p.bak';

7. 在主库上建立备库控制文件

控制文件通常需要有多份,手工将文件复制几份。

$ sqlplus / as sysdba

SQL> alter database create standby controlfile as '/ora_rman/std_control.ctl';

$ cd /ora_rman/

$ cp std_control.ctl control01.ctl

$ cp std_control.ctl control02.ctl

$ cp std_control.ctl control03.ctl

 

8. 配置standby redolog

SQL> shutdown immediate

SQL> startup mount

SQL> alter database add standby logfile

group 4 '/app/oracle/oradata/fxopt/standby_redo04.log' size 50M,

group 5 '/app/oracle/oradata/fxopt/standby_redo05.log' size 50M,

group 6 '/app/oracle/oradata/fxopt/standby_redo06.log' size 50M,

group 7 '/app/oracle/oradata/fxopt/standby_redo07.log' size 50M;

SQL> alter database open;
Standby redo log的组数参考公式:(online redo log组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。
Standby redo log的组成员数和大小也尽量和online redo log一样。

三、备库配置

1. 准备备库参数文件

$ vi initfxopt.ora

audit_file_dest='/app/oracle/admin/fxopt/adump'

control_files='/app/oracle/oradata/fxopt/control01.ctl','/app/oracle/oradata/fxopt/control02.ctl','/app/oracle/oradata/fxopt/control03.ctl'

db_domain=''

db_name='fxopt'

db_unique_name='fxopt_std'

fal_client='standby'

fal_server='primary'

instance_name='fxopt'

log_archive_config='DG_CONFIG=(fxopt,fxopt_std)'

log_archive_dest_1='LOCATION=/ora_rman/arc valid_for=(all_logfiles,all_roles) db_unique_name=fxopt_std'

log_archive_dest_2='SERVICE=primary lgwr async affirm valid_for=(online_logfile,primary_role) db_unique_name=fxopt'

log_archive_dest_state_1='enable'

log_archive_dest_state_2='enable'

log_archive_format='ARC_%T_%S_%R.arc'

log_archive_max_processes=5

log_archive_min_succeed_dest=1

standby_file_management='AUTO'

STANDBY_ARCHIVE_DEST='/ora_rman/arc'

undo_tablespace='UNDOTBS1'

 

2. 创建11g数据库基本目录

$ export ORACLE_BASE=/app/oracle

$ export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

$ export ORACLE_SID=fxopt

$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump

$ mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID

$ mkdir -p /ora_rman/arc

$ mkdir -p /ora_data/fxopt

 

3. 拷贝文件到备库主机

/ora_rman目录下的文件:

  • backup_%T_%s_%p.bak
  • control01/02/03.ctl
  • initfxopt.ora

$ cd /ora_rman/

$ scp backup*.bak oracle@192.168.100.122:/ora_rman/

$ scp initfxopt.ora oracle@192.168.100.122:$ORACLE_HOME/dbs/

$ scp orapwfxopt oracle@192.168.100.122:$ORACLE_HOME/dbs/

$ scp control*.ctl oracle@192.168.100.122:$ORACLE_BASE/oradata/$ORACLE_SID

4. 修改配置lisener监听文件

# listener.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = fxopt)

(ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1)

(SID_NAME = fxopt)

)

)

ADR_BASE_LISTENER = /app/oracle

 

5. 修改配置tnsname.ora文件

说明:PRIMARY是主库的服务名,STANDBY是备库的服务名。

#/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

PRIMARY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = fxopt)

)

)

STANDBY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = fxopt)

)

)

6. 重启监听服务(主库备库都要执行)

$ lsnrctl stop

$ lsnrctl start

测试服务名连通性:

$ tnsping primary

$ tnsping standby

测试远程登录

$ sqlplus sys/oracle@primary as sysdba

$ sqlplus sys/oracle@standby as sysdba

 

7. 启动备库到nomount状态

$ sqlplus / as sysdba

SQL> create spfile from pfile;

SQL> startup nomount;

SQL> alter database mount standby database;

 

8. 备库做RMAN恢复

$ rman target /

RMAN> restore database;

#RMAN> restore archivelog all;

介质恢复后,rman 自动将standby 数据库打开到mount 状态。

9. 配置standby redolog
SQL> alter database add standby logfile
group 4 '/app/oracle/oradata/fxopt/standby_redo04.log' size 50M,
group 5 '/app/oracle/oradata/fxopt/standby_redo05.log' size 50M,
group 6 '/app/oracle/oradata/fxopt/standby_redo06.log' size 50M,
group 7 '/app/oracle/oradata/fxopt/standby_redo07.log' size 50M;

 

10. 在备库上,启动redo apply

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

到此物理备库创建完毕!

 

备库验证

1. 查看备库状态

SQL> select open_mode,database_role,db_unique_name from v$database;

2. 将备库置与应用日志模式状态

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

3. 取消备库的自动恢复

SQL> alter database recover managed standby database cancel;


4. OPEN
备库为只读模式

SQL> alter database open;

 

5. 打开实时应用状态模式

SQL> alter database recover managed standby database using current logfile disconnect;

6. 更改保护模式

从Data Guard的保护模式分,可以分为三种不同的保护模式:

最大性能(Maximize Performance):这是Data Guard默认的保护模式。Primary上的事务Commit前不需要从Standby上收到反馈信息,该模式在Primary故障时可能丢失数据,但Standby对Primary的性能影响最小。

最大可用(Maximize Availability):在正常情况下,最大可用模式和最大保护模式一样;在Standby不可用时,最大可用模式会自动降低成最大性能模式,所以Standby故障不会导致Primary不可用。只要至少有一个Standby可用的情况下,即使Primary Down机,也能保证不丢失数据。

最大保护(Maximize Protection):最高级别的保护模式。Primary上的事务在Commit前必须确认Redo已经传递到至少一个Standby上,如果所有Standby不可用,则Primary会挂起。该模式能保证零数据丢失。

SQL> select DB_UNIQUE_NAME,PROTECTION_MODE from v$database;

切换Data Guard的保护模式的语法如下:

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}

SQL> alter database set standby to maximize availability;

更改成Maximum Availability之后,主库的状态会变成“RESYNCHRONIZATION”
SQL> select DB_UNIQUE_NAME,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DB_UNIQUE_NAME                                      PROTECTION_MODE                PROTECTION_LEVEL
------------------------------------------------------------    ----------------------------------------     ----------------------------------------
futures8                                                     MAXIMUM AVAILABILITY          RESYNCHRONIZATION

但是数据还是会正常同步到备库的。
如果也要显示成“MAXIMUM AVAILABILITY”,就需要把LOG_ARCHIVE_DEST_2参数里面的async改成sync,当然这样肯定会对主数据库的性能有一些影响啦!
具体怎么设置,自己取舍!

DG Protection Mode知识点
Minimum Requirements for Maximum Protection Mode
Redo Archival Process        LGWR
Network Transmission Mode    SYNC
Disk Write Option            AFFIRM
Standby Redo Logs?           Yes
Standby Database Type        Physical Only

Minimum Requirements for Maximum Availability Mode
Redo Archival Process        LGWR
Network Transmission Mode    SYNC
Disk Write Option            AFFIRM
Standby Redo Logs?           Required for physical standby databases only. Standby redo logs are not supported for logical standby databases.
Standby Database Type        Physical or Logical

Minimum Requirements for Maximum Performance Mode
Redo Archival Process        LGWR or ARCH
Network Transmission Mode    ASYNC when using LGWR process. Not applicable when using the ARCH process.
Disk Write Option            NOAFFIRM
Standby Redo Logs?           Required for physical standby databases using the LGWR process.
Standby Database Type        Physical or Logical

附录 - DataGuard常用维护命令

1. 主备切换

1) 主库切换为备库

SQL> alter database commit to switchover to physical standby;

SQL> alter database commit to switchover to physical standby with session shutdown;-- 主库有会话连接的时候

SQL> shutdown immediate

SQL> startup nomount;

SQL> alter database mount standby database;

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

2) 从库切换为主库

SQL> alter database commit to switchover to primary;

SQL> shutdown immediate;

SQL> startup

SQL> alter system switch logfile;

3) 从库打开只读实时应用模式

SQL> alter database recover managed standby database cancel;

SQL> alter database open;

SQL> alter database recover managed standby database using current logfile disconnect;

4) 检查切换状态

SQL> select open_mode,database_role,db_unique_name from v$database;

 

2. 基本查询

--查看数据库级别日志的归档模式、记录模式

SQL> select log_mode,force_logging,flashback_on from v$database;

--查看表空间级别的日志记录模式

SQL> select tablespace_name,logging,force_logging from dba_tablespaces;

--查看数据库的现行日志和自动归档模式的设置

SQL> archive log list;

--查看备库状态

SQL> select open_mode,database_role,db_unique_name from v$database;

--查看备库是否在应用日志进行恢复

SQL> select process, status from v$managed_standby;

--查询Switchover状态

SQL> select open_mode,database_role,switchover_status from v$database;

--查看保护模式

SQL> select DB_UNIQUE_NAME, PROTECTION_MODE, PROTECTION_LEVEL from v$database;

--查看归档日志应用

SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;

 

3. 日志应用

--将备库置与应用日志模式状态

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

--取消备库的自动恢复

SQL> alter database recover managed standby database cancel;

--Open只读模式(Dataguard只能启动到readonly模式)

SQL> alter database open;

--打开实时应用状态模式

SQL> alter database recover managed standby database using current logfile disconnect;

参考:
Oracle 11g Dataguard 物理备库配置系列文档
http://koumm.blog.51cto.com/703525/1275237

DataGuard参数配置详解 
http://czmmiao.iteye.com/blog/1311070

DataGuard最大性能模式下开启REDO LOG 实时APPLY
http://wangwei.cao.blog.163.com/blog/static/10236252620115305456648/

DataGuard相同SID物理Standby搭建的更多相关文章

  1. Oracle DataGuard 物理Standby 搭建(上)

    物理standby database 环境搭建 Arch asysnc Oracle Dataguard host IP Oracle_sid DB_unique_name FAL_server FA ...

  2. Oracle DataGuard 物理Standby 搭建(下)

    主备库切换 Switchover 一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUAR ...

  3. (摘)DataGuard物理standby管理 - 主备切换

    DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...

  4. ORACLE11g Dataguard物理Standby 日常巡检操作手册

    ORACLE11g Dataguard物理Standby日常巡检操作手册 编写:_____________校对:_____________日期:_____________ 目录1.DG环境的日常巡检 ...

  5. (摘自ItPub)物理standby中switchover时switchover pending的解决办法

    http://www.itpub.net/thread-1782245-1-1.html DataGuard一主一物理备,sid为primary和standby,现在要把primary切换成备库,st ...

  6. Duplicate复制数据库并创建物理StandBy(spfile+不同实例名+不同路径)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

  7. Oracle 12C 物理Standby 主备切换switchover

    Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...

  8. 11g使用非duplicate方式创建物理standby要注意的问题总结

    在上篇博文中,使用了duplicate方式来创建物理standby http://blog.csdn.net/aaron8219/article/details/38434579 今天来说说在11g中 ...

  9. Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

随机推荐

  1. [转载]淘宝API调用 申请 获取session key

    http://www.cnblogs.com/zknu/archive/2013/06/14/3135527.html 在调用淘宝的API时,我们都会用到appkey,appsecret,appses ...

  2. 【锋利的JQuery-学习笔记】添加提示图片

    效果图: hot图片: (注意:这个图标本身就有抖动效果的,并不是由于标签<del>而具有抖动效果) 周期性抖动,起到提示的作用 html: <div class="jnC ...

  3. yum源万能

    sed -i ‘s|^#baseurl|baseurl| ; s|^mirrorlist|#mirrorlist|’ /etc/yum.repos.d/*

  4. HDU 1087 Super Jumping! Jumping! Jumping!(最长上升子序列,dp)

    以下引用自:http://www.cnblogs.com/Lyush/archive/2011/08/31/2161314.html沐阳 该题可以算是一道经典的DP题了,题中数据是这样的.以 3 1 ...

  5. 《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书

    这书适合我. 哈哈,结合 以前的知识点,勉强能看懂. 讲得细,还可以参照着弄出来. 希望能坚持 完成啦... 原来,JSTL就类似于DJANGO中的模板. 而servlet类中的res,req,玩了D ...

  6. Bash 小知识点

    变量定义的时候=两边不能有空格,例如: a='Hello World' 如果变量和其它字符相连,可以用{}把变量引起来,这样就可以和相连的字符隔离 除了在变量赋值和在FOR循环语句头中,BASH中的变 ...

  7. Intellij 导入play framework 项目

    新建一个项目 play new helloworld IshallbeThatIshallbe:~ iamthat$ mkdir temp IshallbeThatIshallbe:~ iamthat ...

  8. Hadoop基础教程之搭建开发环境及编写Hello World

    整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclipse方便. 1.下载 进入官网:http://eclipse.org/do ...

  9. Swift 版本很好的卡片切换效果基于ZLSwipeableView

    前言:在这篇文章你可以学到,一些基本的Swift语法, 基本UI控件闭包等. 实际的效果,比gif图的效果好很多. 卡片切换.gif 首先需要导入ZLSwipeableView pod 'ZLSwip ...

  10. QTP之delphi试用感想一(自动化测试)

    这两天一直在琢磨自动化测试,自动化测试,其实与单元测试有一些相同之处,单元测试的目的也是可以一次写,多次运行,对于测试驱动及后期维护真是有非常多的好处,用自动化测试工具也是如何,主要目的是为了回归测试 ...