Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397751
  • 博文数量: 58
  • 博客积分: 2096
  • 博客等级: 大尉
  • 技术积分: 608
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-29 16:09
个人简介

专注于数据库技术研究和实践,目前就职于互联网金融企业,提供Oracle数据库技术支持和维护。 联系电话:18616803656

文章分类

全部博文(58)

文章存档

2020年(1)

2019年(4)

2018年(1)

2017年(3)

2015年(4)

2014年(7)

2012年(1)

2011年(27)

2010年(8)

2009年(2)

我的朋友

分类: Oracle

2014-03-06 13:34:58

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。
S
tandby 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  as sysdba

$ sqlplus  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/

阅读(5349) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~