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. [CF]codeforces round#366(div2)滚粗记

    开场心理活动:啊打完这场大概有1700了吧 中途心理活动:啊这个ABC看起来都随便做啊 死亡原因:欸怎么没网了 -75 .. A [题意]Hulk说完一句I hate会说that I love 然后是 ...

  2. sv_target_output dx11

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx

  3. SQLServer 触发器 同时插入多条记录有关问题

    由于 SQL Server 的触发器, 没有 FOR EACH ROW (ORACL中有)的选项, 有时候不正确的使用 inserted 与deleted 可能会有点麻烦. 下面来一个简单的例子 -- ...

  4. [设计模式] 8 组合模式 Composite

    DP书上给出的定义:将对象组合成树形结构以表示“部分-整体”的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字“树形”.这种树形结构在现实生活中随处可见,比如一个集团公司,它有一 ...

  5. String 内在分配解析

    1.String类概念 (1)String是final的,不可被继承.public final class String.String是的本质是字符数组char[], 并且其值不可改变.private ...

  6. POJ 1663

    #include<iostream>//cheng da cai zi using namespace std; int main() { int time; cin>>tim ...

  7. hdu1102

    http://acm.hdu.edu.cn/showproblem.php?pid=1102 最小生成树(模板题) 3 0 990 692 990 0 179 692 179 0 1 1 2 一共3个 ...

  8. SaaS系列介绍之十五: SaaS知识重用

    1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...

  9. cv论文(SPARSE REPRESENTATION相关)

    上个博文我讲了一些CNN相关的论文,比较浅显都是入门知识,这节课来总结一些稀疏表示方面的文章.至于上个博文说到的要讲的sparse coding的知识,我将会放在Deep Learning的专题里面讲 ...

  10. 在mybatis执行SQL语句之前进行拦击处理

    转载自:http://blog.csdn.net/hfmbook/article/details/41985853 比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql ...