Oracle Data Guard搭建

目录

一、Data Guard介绍

二、Data Guard原理

三、Data Guard主库与备库

3.1 Data Gurad主库

3.2 Data Guard备库

四、物理备库的数据保护级别

4.1 保护模式和重做传输

4.2 最大保护模式

4.3 最大可用性模式

4.4 最高性能模式

五、Data Guard配置

5.1 准备

5.2 主库配置

5.3 备库设置

5.4 验证

5.5 Active DataGuard测试

5.6 DG switchover切换

5.7 DG failover切换

六、log_archive_dest_n参数解释

6.1 AFFIRM和NOAFFIRM

6.2 db_unique_name

6.3 delay

6.4 location和service

6.5 SYNC和ASYNC

6.6 valid_for


一、Data Guard介绍

         Data Guard是保证企业数据的高可用性(high availability)、数据保护(data protection)以及灾难恢复(disaster recovery)的集成化灾难恢复解决方案,该技术可以维护生产数据库一个或多个同步备份,有一个生产数据库和若干个备用数据库组成,并形成一个独立的、易于管理的数据保护方案。Data Guard备用数据库可以与生产系统位于相同的数据中心,也可以是在地理位置上分布较远的的远程灾难备份中心。

 

二、Data Guard原理

         Data Guard的基本原理是,当某次事务处理对生产数据库中的数据作出更改时,Oracle将在联机重做日志文件中记录此次更改。在Data Guard中,除了把日志记录到本地的联机日志文件和归档日志文件中外,还通过网络,把日志信息发送到远程的备用数据库服务器上。这个备用日志文件写入过程可以是实时、同步的,以实现零数据丢失(最大保护模式);也可以是异步的,以减少对网络带宽的压力(最大可用性模式);或者是通过归档日志文件的批量传输模式,以减少对生产系统的性能影响(最大性能模式)。

         当备份数据库接收到日志信息时,Data Guard可以自动利用日志信息实现数据的同步。当主数据库打开并处于活动状态时,备份数据库可以执行恢复操作;如果主数据出现了故障,备用数据库即可以被激活并接管生产数据库的工作。

 

三、Data Guard主库与备库

 

3.1 Data Gurad主库

   主库即生产数据库,主库可以是单一数据库实例,或者是RAC集群。

 

3.2 Data Guard备库

    Data Guard备库按照从生产数据库传输过来的日志处理方法的不同分为物理备库、逻辑备库和快照备库。

    物理备库,备份数据库处于mount状态下,直接利用数据恢复技术,把日志文件中记录的数据变更应用在备份数据库中,从而实现与生产数据库的数据同步,在进行数据同步的时候,物理备份数据库是不能打开的、也无法提供数据查询等服务;物理备用数据库也可以通过只读的方式打开,此时就只能接收日志文件,而无法进行数据的同步。

    逻辑备库,数据库是处于正常打开状态,当它接收到新的日志信息后,利用日志挖掘器的功能,把日志中记录的变更信息转换成具体的SQL语句,并在逻辑备用数据库上执行这些SQL语句,从而实现与生产数据库的数据同步。逻辑备份数据支持在数据同步时,进行数据的查询、报表等操作。Oracle从9i R2开始支持逻辑备份数据库。

    快照备库,可以暂时将物理备份数据库转换为可更新的数据库,快照备份数据不会立马应用接收到的日志文件,设一个时间点,一次性转换。

 

四、物理备库的数据保护级别

        Oracle Data Guard 支持多种级别的数据保护模式:最大性能模式,最大可用性模式,最大保护模式。分别对应于“重要信息系统灾难恢复指南”中的5级,5级6级自适应,6级的数据保护级别。其中对应6级的最大保护模式可以实现实时数据实时同步和0数据丢失。另外,Oracle Data Guard 可以设置延时应用时间窗口,从而防范错误操作、黑客攻击等人为错误导致的数据损坏。

4.1 保护模式和重做传输

       要确定适当的保护模式,企业需要根据用户对系统响应时间的要求来估量它们对数据保护的业务要求。下表从数据丢失风险的角度概述了各种模式的适用性。 

保护模式在灾难出现时数据丢失的风险重做传输机制
最大保护零数据丢失LGWR SYNC
最大可用零数据丢失LGWR SYNC
最高性能最小数据丢失LGWR SYNC或ARCH

4.2 最大保护模式

       最大保护模式为主数据库提供了最高水平的数据保护,从而确保一个全面的零数据丢失的灾难恢复解决方案。当在最大保护模式下运行时,重做记录由日志写入器 (LGWR) 进程从主数据库同步地传输到备用数据库,并且直到确认事务数据在至少一个备用服务器上的磁盘上可用时,才在主数据库上提交事务。

        强烈建议,这种模式应至少配置两个备用数据库。当最后参与的备用数据库不可用时,主数据库上的处理将停止。这就确保了当主数据库与其所有备用数据库失去联系时,不会丢失事务。

        由于重做传输的同步特性,这种最大保护模式可能潜在地影响主数据库响应时间。可以通过配置一个低延迟网络,并为它分配足够应付高峰事务负载的带宽来将这种影响减到最小。需要这种最大保护模式的企业有股票交易所、货币交易所、金融机构等。

4.3 最大可用性模式

        最高可用性模式拥有仅次于最高水平的主数据库数据可用性。如同最大保护模式一样,重做数据由 LGWR 从主数据库同步地传输到备用数据库,直到确认事务数据在备用服务器的磁盘上可用时,事务才在主数据库上完成。不过,在这种模式下(与最大保护模式不同),如果最后参与的备用数据库变为不可用,例如由于网络连接问题,处理将在主数据库上继续进行。备用数据库与主数据库相比,可能暂时落在后面,但当它再次变为可用时,备用数据库将使用主数据库上累积的归档日志自动同步,而不会丢失数据。

        由于同步重做传输,这种保护模式可潜在地影响响应时间和吞吐量。可以通过配置一个低延迟网络,并为它分配足够应付高峰事务负载的带宽来将这种影响减到最小。

        最高可用性模式适用于想要确保获得零数据丢失保护,但不想让生产数据库受网络/备用服务器故障影响的企业。如果又一个故障随后影响了生产数据库,然后最初的网络/备用服务器故障得到解决,那么这些企业将接受数据丢失的可能性。

4.4 最高性能模式

        最高性能模式是默认的保护模式。它与最高可用性模式相比,提供了稍微少一些的主数据库数据保护,但提供了更高的性能。在这种模式下,当主数据库处理事务时,重做数据由 LGWR 进程异步传输到备用数据库上。另外,也可以将主数据库上的归档器进程 (ARCH) 配置为在这种模式下传输重做数据。在任何情况下,均先完成主数据库上的写操作,主数据库的提交操作不等待备用数据库确认接收。如果任意备用目标数据库变为不可用,则处理将在主数据库上继续进行,这对性能只有很小的影响或没有影响。

        在主数据库出现故障的情况下,尚未被发送到备用数据库的重做数据会丢失。但是,如果网络有足够的吞吐量来跟上重做流量高峰,并且使用了 LGWR 进程来将重做流量传输到备用服务器,则丢失的事务将非常少或者为零。

        当主数据库上的可用性和性能比丢失少量数据的风险更重要时,应该使用最高性能模式。这种模式还适合于 WAN 上的 Data Guard 部署,在 WAN 中,网络的内在延迟可能限制同步重做传输的适用性。

 

五、Data Guard配置

5.1 准备

Primary Node:OA

OS:CentOS 6.2 DB:oracle 11.2.0.1

IP:172.29.41.90

 

Standby Node:OABAK

OS:CentOS 6.2 DB:oracle 11.2.0.1

IP:172.31.1.91 

注意把两个数据库的在线重做日志调整到200M 

注意:主从库的db_name是一样的

5.2 主库配置

5.2.1 确定主库处于归档模式

SQL> archive log list;
Database log mode        Archive Mode
Automatic archival        Enabled
Archive destination        /db/oracle/archive
Oldest online log sequence     1265
Next log sequence to archive   1267
Current log sequence            1267

如果没有启动归档模式,请使用以下方式启动归档

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> archive log list;
SQL> alter database open;

5.2.2 主库设置为force logging模式

SQL> select force_logging from v$database;
FOR
---
YES

如果没有启动force logging模式,使用以下方式启动

SQL> alter database force logging;

说明:为什么要改成Force Logging

        有一些DDL语句可以通过指定NOLOGGING子句的方式避免写REDO(目的是提高速度,某些时候确实有效)。指定数据库为Force Logging模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作,而忽略类似NOLOGGING之类的指定参数。如果在执行Force Logging时有NOLOGGING之类的语句在执行,那么Force Logging会等待,直到这类语句全部执行。

        Force Logging是作为固定参数保存在控制文件中,因此其不受重启之类操作的影响(只执行一次即可),如果想取消,可以通过ALTER DATABASE NO FORCE LOGGING语句关闭强制记录。

5.2.3 创建备用联机日志组

        备用联机日志创建是可选的,主要用于主库角色转换作为standby后接受主库的日志。不能与当前存在的联机日志组重复。

        查看当前联机日志信息

SQL> select group#,sequence#,members,archived,status from v$log;

   GROUP#   SEQUENCE#     MEMBERS ARC STATUS
---------- ---------- ---------- --- ----------------
       1    1267            2 NO   CURRENT
       2    1265            2 YES INACTIVE
       3    1266            2 YES INACTIVE

SQL> select group#,type,member from v$logfile;

   GROUP# TYPE   MEMBER
---------- ------- ----------------------------------------
       1 ONLINE   /db/oracle/oradata/OAPROD/redo01.log
       1 ONLINE   /db/oracle/oradata/OAPROD/redo11.log
       2 ONLINE   /db/oracle/oradata/OAPROD/redo02.log
       2 ONLINE   /db/oracle/oradata/OAPROD/redo12.log
       3 ONLINE   /db/oracle/oradata/OAPROD/redo03.log
       3 ONLINE   /db/oracle/oradata/OAPROD/redo13.log

创建备用联机日志组

SQL> alter database add standby logfile group 4 (‘/db/oracle/oradata/OAPROD/redo04.log’,’ /db/oracle/oradata/OAPROD/redo14.log’) size 200M;

SQL> alter database add standby logfile group 5(‘/db/oracle/oradata/OAPROD/redo05.log’,’ /db/oracle/oradata/OAPROD/redo15.log’) size 200M;

SQL> alter database add standby logfile group 6(‘/db/oracle/oradata/OAPROD/redo06.log’,’ /db/oracle/oradata/OAPROD/redo16.log’) size 200M;

SQL> alter database add standby logfile group 7(‘/db/oracle/oradata/OAPROD/redo07.log’,’ /db/oracle/oradata/OAPROD/redo17.log’) size 200M;

查看备用联机日志

SQL> select group#,thread#,sequence#,archived,status from v$standby_log;

   GROUP#     THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
       4       0            0 YES UNASSIGNED
       5       0            0 YES UNASSIGNED
       6       0            0 YES UNASSIGNED
       7       0            0 YES UNASSIGNED

注意:Data Guard在最大保护和最高可用性模式下,Standby数据库必须配置standby redo log

5.2.4 修改主库初始化参数文件

创建pfile

SQL> create pfile from spfile;

修改主库的初始化参数文件initOAPROD.ora

[oracle@oa OAPROD]$ cd $ORACLE_HOME/dbs
[oracle@oa dbs]$ cp initOAPROD.ora initOAPROD.ora.bak
[oracle@oa dbs]$ vim initOAPROD.ora
……
*.audit_file_dest='/db/oracle/admin/OAPROD/adump'
*.audit_trail='none'
……
*.db_name='OAPROD'
……
*.DB_UNIQUE_NAME='oaprod'
……
*.fal_client='oaprod'
*.fal_server='oabak'
*.log_archive_config='dg_config=(oaprod,oabak)'
*.log_archive_dest_1='location=/db/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=oaprod'
*.log_archive_dest_2='service=oabak LGWR async valid_for=(online_logfile,primary_role) db_unique_name=oabak'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.standby_file_management='auto'
  • Audit_trail=’none’ 表示不做审计,审计(Audit)用于监视用户所执行的数据库操作。

  • Db_name=’OAPROD’ 表示数据库名,DG中主从数据库的DB_name是相同的,虽然和RAC不一样,并不是同一个库。

  • Db_uniqe_name=’oabak’ 表示数据库唯一名,DG中的db_uniqe_name必须不同。正因有了DB_UNIQUE_NAME,REDO数据在传输过程中才能确认传输到希望被传输到的数据库上。

  • fal_client='oaprod' / fal_server='oabak' fal表示fetch archive log,fal_client用于发送日志,fal_server用于接受日志。也即无论是主库或备库,fal_server=对方,fal_client=自己

  • log_archive_config 表示列出主库和备库

  • log_archive_dest_1 表示主库联机日志位置,valid_for属性指定发送指定角色生成的指定类型的日志文件

  • log_archive_dest_2 表示备库及日志传输形式

  • standby_file_management 表示如果Primary数据库数据文件发生修改(如新建、重命名等)则按照本参数的设置在Standby数据库中作相应修改。设为AUTO表示自动管理。设为MANUAL表示需要手工管理

通过pfile创建spfile

SQL> startup pfile=’initOAPROD.ora’
SQL> create spfile from pfile;

5.2.5 配置监听及TNS

Listener.ora一般都之前已经配置好了,只需要配置tnsname.ora

[oracle@oa admin]$ vim tnsnames.ora
OAPROD =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oa.tp-link.net)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
    (SERVICE_NAME = OAPROD.tp-link.net)
   )    
)

OABAK =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oabak.tp-link.net)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = OAPROD.tp-link.net)
   )    
)

可以看到主库和备库的dbname是相同的。

启动主库的监听。

5.3 备库设置

5.3.1 数据恢复

需要将主从数据同步,可以有两种方式热备份(rman)或冷备份。Rman备份不需要停机,但操作时间长;冷备份操作简单,但主库需要停机。下面只说明通过RMAN恢复的步骤。

可以将当前的联机日志归档

SQL> alter system switch logfile;
System altered.

备份主库

RMAN> backup full format='/db/oracle/rman/FULL_%d_%T_%s' database include current controlfile for standby plus archivelog all delete input format='/db/oracle/rman/arch_%d_%T_%s';
Starting backup at 18-DEC-13
current log archived
……
Starting backup at 18-DEC-13
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=/db/oracle/oradata/OAPROD/apps_data01.dbf
input datafile file number=00005 name=/db/oracle/oradata/OAPROD/apps_idx01.dbf
input datafile file number=00006 name=/db/oracle/oradata/OAPROD/apps_data02.dbf
input datafile file number=00001 name=/db/oracle/oradata/OAPROD/system01.dbf
input datafile file number=00002 name=/db/oracle/oradata/OAPROD/sysaux01.dbf
input datafile file number=00003 name=/db/oracle/oradata/OAPROD/undo.dbf
…
Finished backup at 18-DEC-13

生成备库控制文件

SQL> alter database create standby controlfile as '/db/oracle/rman/standby.ctl';

Database altered.

将备份文件、备库控制文件、pfile、密码文件拷贝到备库

拷贝pfile和密码文件

[oracle@oa dbs]$ scp initOAPROD.ora orapwOAPROD oabak:/db/oracle/product/11.2.0/db_1/dbs

关于密码文件

Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID

                 即:ORACLE_HOME/dbs/orapw<sid>

Windows下的存放位置:$ORACLE_HOME/database/PWD%ORACLE_SID%.ora

 

注意remote_login_passwordfile参数设置,这里使用shared

none : 不使用密码文件认证

exclusive :要密码文件认证,自己独占使用(默认值)

shared :要密码文件认证,不同实例dba用户可以共享密码文件

 

拷贝备份文件和控制文件

[oracle@oa rman]$ ll
total 4925888
-rw-r-----. 1 oracle oinstall     545280 Dec 18 16:55 arch_OAPROD_20131218_102
-rw-r-----. 1 oracle oinstall 402464256 Dec 18 16:50 arch_OAPROD_20131218_99
-rw-r-----. 1 oracle oinstall 4608794624 Dec 18 16:54 FULL_OAPROD_20131218_100
-rw-r-----. 1 oracle oinstall   16187392 Dec 18 16:55 FULL_OAPROD_20131218_101
-rw-r-----. 1 oracle oinstall   16105472 Dec 18 16:58 standby.ctl
[oracle@oa rman]$ scp * oabak:/db/oracle/rman/

将控制文件拷贝到pfile指定位置

备库修改pfile

……
*.audit_trail='none'
……
*.control_files='/db/oracle/oradata/OAPROD/standby.ctl'
*.db_name='OAPROD'
……
*.db_unique_name='oabak'
*.log_archive_config='dg_config=(oaprod,oabak)'
*.log_archive_dest_1='location=/db/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=oabak'
*.log_archive_dest_2='service=oaprod LGWR async valid_for=(online_logfile,primary_role) db_unique_name=oaprod'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.standby_file_management='auto'
*.fal_client='oabak'
*.fal_server='oaprod
……

另外:

DB_FILE_NAME_CONVERT ----primarystandby的数据文件路径不一致时使用
LOG_FILE_NAME_CONVERT ----primarystandby的数据文件路径不一致时使用
LOCK_NAME_SPACE ----当主数据库和备用数据在同一台机上时设为备用数据库的

开始恢复,nomount启动数据库

[oracle@oabak dbs]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Dec 18 18:02:39 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.

SQL> conn /as sysdba
Connected to an idle instance.

SQL> startup nomount pfile=initOAPROD.ora
ORACLE instance started.

Total System Global Area 1603411968 bytes
Fixed Size                2213776 bytes
Variable Size          1040189552 bytes
Database Buffers    553648128 bytes
Redo Buffers            7360512 bytes

Mount数据库

SQL> alter database mount standby database;
Database altered.

查看备库

SQL> select open_mode,database_role from v$database;

OPEN_MODE              DATABASE_ROLE
-------------------- ----------------
MOUNTED      PHYSICAL STANDBY

配置备库监听及TNS

OAPROD =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oaprod.tp-link.net)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = OAPROD.tp-link.net)
   )    
)

OABAK =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oabak.tp-link.net)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = OAPROD.tp-link.net)
   )    
)

启动备库监听

[oracle@oabak admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-DEC-2013 19:28:55
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Starting /db/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /db/oracle/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /db/oracle/diag/tnslsnr/oabak/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oabak.tp-link.net)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
-----------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date               18-DEC-2013 19:28:57
Uptime                   0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File     /db/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File           /db/oracle/diag/tnslsnr/oabak/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oabak.tp-link.net)(PORT=1521)))
Services Summary...
Service "OAPROD.tp-link.net" has 1 instance(s).
Instance "OAPROD", status READY, has 1 handler(s) for this service...
Service "oabak.tp-link.net" has 1 instance(s).
Instance "OAPROD", status READY, has 1 handler(s) for this service...
The command completed successfullyThe command completed successfully

通过tnsping相互ping没问题,说明网络连接及监听都正常。

同时测试sqlplus是否能连接对方

$ sqlplus sys/oracle@orcl as sysdba;
$ sqlplus sys/oracle@slave as sysdba;

 

还原主库的数据有两种方法:第一种就是通过rman直接还原;第二种使用duplicate命令进行还原

通过rman直接还原

RMAN> restore database;
Starting restore at 18-DEC-13
……
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /db/oracle/oradata/OAPROD/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /db/oracle/oradata/OAPROD/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /db/oracle/oradata/OAPROD/undo.dbf
channel ORA_DISK_1: restoring datafile 00004 to /db/oracle/oradata/OAPROD/apps_data01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /db/oracle/oradata/OAPROD/apps_idx01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /db/oracle/oradata/OAPROD/apps_data02.dbf
channel ORA_DISK_1: reading from backup piece /db/oracle/rman/FULL_OAPROD_20131218_100
channel ORA_DISK_1: piece handle=/db/oracle/rman/FULL_OAPROD_20131218_100 tag=TAG20131218T165116
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:03:26
Finished restore at 18-DEC-13

直接通过duplicate还原数据(推荐这种方法,更快更方便。如果采用这种方法就不需要之前的备份操作)

备库的启动状态必须是nomount状态。

同时修改主库的tnsname.ora

OABAK =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oabak.tp-link.net)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = OAPROD.tp-link.net)
     (UR = A)
   )    
)

开始同步数据

rman target sys/sa@mesdb auxiliary sys/sa@mesdbbak

RMAN> duplicate target database for standby nofilenamecheck from active database;​

如果不加nofilenamecheck会报错辅助文件名与目标数据库使用文件名冲突

 

问题 1:RMAN-05500: the auxiliary database must be not mounted when using DUPLICATE

when you duplicate a database, 
pri db: open or mount
std db: startup nomount;

 

问题 2:

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/28/2010 21:42:08

ORA-17629: Cannot connect to the remote database server

ORA-17627: ORA-01017: invalid username/password; logon denied

ORA-17629: Cannot connect to the remote database server

解决:

重建密码文件,拷贝到备库。

orapwd file=$ORACLE_HOME/dbs/orapwclonedb password='test'

同时参照RMAN active database duplicate fails with ORA-17627 ORA-17629 (文档 ID 1268962.1)

 

5.3.2 启用备库

备库启动redo

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

Database altered.

DISCONNECT FROM SESSION子句的作用是启动完后自动退出session,并无特殊。

查看备库

SQL> select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

NAME      OPEN_MODE          PROTECTION_MODE      DATABASE_ROLE
--------- -------------------- -------------------- ----------------
OAPROD      MOUNTED                MAXIMUM PERFORMANCE PHYSICAL STANDBY

5.4 验证

查看同步情况

OAPROD主库

SQL> select switchover_status,database_role from v$database;

SWITCHOVER_STATUS   DATABASE_ROLE
-------------------- ----------------
TO STANDBY            PRIMARY
 
SQL> alter system switch logfile;
System altered.

SQL> column name format a40;
SQL> column first_time format a10;
SQL> column next_time format a10;
SQL> column applied format a5;
SQL> SELECT SEQUENCE#, name,FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
……
SEQUENCE# NAME                           FIRST_TIME NEXT_TIME APPLI
---------- ---------------------------------------- ---------- ---------- -----
     1276 /db/oracle/archive/1_1276_812316846.dbf   18-DEC-13 18-DEC-13 NO
     1276 oabak                          18-DEC-13 18-DEC-13 YES
     1277 /db/oracle/archive/1_1277_812316846.dbf   18-DEC-13 18-DEC-13 NO
     1277 oabak                          18-DEC-13 18-DEC-13 YES

OABAK备库

SQL> select switchover_status,database_role from v$database;

SWITCHOVER_STATUS   DATABASE_ROLE
-------------------- ----------------
SESSIONS ACTIVE     PHYSICAL STANDBY

SQL> SELECT SEQUENCE#, name,FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# NAME                                FIRST_TIME NEXT_TIME APPLI
---------- ---------------------------------------- ---------- ---------- -----
     1276 /db/oracle/archive/1_1276_812316846.dbf   18-DEC-13 18-DEC-13 YES
     1277 /db/oracle/archive/1_1277_812316846.dbf   18-DEC-13 18-DEC-13 YES
# 主库
SQL> archive log list;
数据库日志模式           存档模式
自动存档            启用
存档终点           D:\app\oracle\archivelog
最早的联机日志序列     1167
下一个存档日志序列   1169
当前日志序列           1169
 
#备库
SQL> archive log list;
数据库日志模式           存档模式
自动存档             启用
存档终点           D:\app\oracle\archivelog
最早的联机日志序列     1167
下一个存档日志序列   0
当前日志序列           1169

测试OK。

5.5 Active DataGuard测试

        Oracle 11g之前,物理备库(physical Standby)在应用redo的时候,是不可以打开的,只可以mount。从11g开始,在应用redo的时候,物理备库可以处于read-only模式,这就称为Active Data Guard 。通过Active Data Guard,可以在物理备库进行查询或者导出数据,从而减少对主库的访问和压力。
       Active Data Guard适用于一些只读性的应用,比如,有的应用程序只是查询数据,进行一些报表业务,不会产生redo数据,这些应用可以转移到备库上,避免对主库资源的争用。

      Oracle版本11.0以上的才具有oracle active data guard新特性

暂停DG同步

SQL> conn /as sysdba
--取消备库的自动恢复

SQL> alter database recover managed standby database cancel;

Database altered.

此时只是暂停redo应用,并未停止备库,备库仍会接收只不过不会应用接收到的归档,直到再次启动redo应用。

启用备库只读模式

SQL> alter database open read only;
Database altered.

SQL> select open_mode,database_role from v$database;
OPEN_MODE                               DATABASE_ROLE
---------------------------------------- ----------------
READ ONLY                                 PHYSICAL STANDBY

--备库查询测试

SQL> conn apps/gT9YTK$c

SQL> select * from bom_file;
……

--切换回redo应用

SQL> conn /as sysdba

--打开实时应用状态

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

SQL> select open_mode,database_role from v$database;

OPEN_MODE                               DATABASE_ROLE
---------------------------------------- -----------------
READ ONLY WITH APPLY                    PHYSICAL STANDBY

Active DG测试

主库

SQL> create table t (i number,name varchar2(10));
--表已创建。
SQL> select * from t;
--未选定行
SQL> insert into t values(0,'abc');
--已创建 1 行。
SQL> insert into t values(1,'df');
--已创建 1 行。
SQL> commit;
--提交完成。
SQL> alter system switch logfile;​

备库

SQL> select * from t;
         I NAME
---------- --------------------
         0 abc
         1 df
 
--备库插入数据会报错
SQL> insert into t values(3,'df');
insert into t values(3,'df')
           *
第 1 行出现错误:
ORA-16000: 数据库或可插入数据库是以只读访问方式打开的​

5.6 DG switchover切换

1 查看主库状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
----------------------------------------
TO STANDBY

2 将主库切换到备库(数据库自动关闭呢?)

SQL> alter database commit to switchover to physical standby with session shutdown;
数据库已更改。

3 查看备库switchover状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
----------------------------------------
TO PRIMARY

4 将备库切换成主库,然后关闭

SQL> alter database commit to switchover to primary;
数据库已更改。

SQL> select open_mode,database_role from v$database;

OPEN_MODE                               DATABASE_ROLE
---------------------------------------- ----------------
MOUNTED                                 PRIMARY

SQL> shutdown immediate; 

5 启动备库。启动顺序不能错,先启动备库,在启动主库,不然主库识别不了备库。

SQL> conn /as sysdba
已连接到空闲例程。

SQL> startup nomount;
SQL> alter database mount standby database;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SQL> select open_mode,database_role from v$database;

OPEN_MODE                              DATABASE_ROLE
---------------------------------------- -------------------
MOUNTED                                 PHYSICAL STANDBY

6 再启主库

SQL> startup
SQL> alter system switch logfile;
SQL> archive log list;
数据库日志模式           存档模式
自动存档            启用
存档终点           D:\app\oracle\archivelog
最早的联机日志序列     1172
下一个存档日志序列   1173
当前日志序列           1174​

检查

SQL>select status,database_mode from v$archive_dest_status; 

SQL> select group#,thread#,sequence#,archived,status from v$standby_log;

SQL> select group# ,type,member from v$logfile;

5.7 DG failover切换

备库

1)检查备库是有GAP,如果存在则将相关归档日志拷贝到备库并注册应用

SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

no rows selected

2)将备库切换成主库

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
Database altered. 

SQL> SELECT DATABASE_ROLE FROM V$DATABASE; 
DATABASE_ROLE
 ---------------- 
PHYSICAL STANDBY 

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered. 
 
SQL> ALTER DATABASE OPEN; Database altered.​

六、log_archive_dest_n参数解释

6.1 AFFIRM和NOAFFIRM

    AFFIRM明确指定redo传输目的地在写redo数据到standby redo日志之后告知传送者接收到了redo数据;

    NOAFFIRM明确指定redo传输目的地在写redo数据到standby redo日志之前告知传送者接收到了redo数据;

    如果没有明确指定,当sync属性被指定时,默认是AFFIRM,当async属性被指定,默认是NOAFFIRM。

6.2 db_unique_name

     这个参数在目的地指定数据库唯一的名字,如果在DG中有多个standby数据库,这个属性有用,使用db_unique_name属性能明确标识主数据库和standby数据库之间的关系。db_unique_name指定的名字必须匹配在DG_CONFIG列表中db_unique_name的其中一个值,db_unique_name属性指定的名字还必须匹配指定目的地数据库初始化参数db_unique_name的值,如果不指定,连接会被拒绝。

6.3 delay

    delay参数明确指定一个standby位置应用接收到的归档redo数据延迟的时间,delay是可选的,默认是没有任何延迟,delay属性的设置表明在standby目的地应用归档redo日志是不活动的,直到指定的时间间隔过期才会应用日志,在standby数据库上,当redo数据库成功传输和归档后开始计算时间,delay的时间间隔以分钟为单位,可以用于保护standby数据库免遭、来自主数据库的用户错误或者损坏带来的影响,是一种折中方案,在failover过程中必然需要更多的时间来应用日志。Delay不影响redo时间传送到standby目的地,如果启动实时应用,设置的任何延迟都将被忽略。改变delay属性设置会在下一次redo时间呗归档时起作用,正在归档的日志不受影响

6.4 location和service

    每个目的地必须制定location或者service属性,用来制定redo传输服务栓出redo数据到本地磁盘目录或者远程数据库目的地。

    log_archive_dest_1―log_archive_dest_10目的地能包括 location属性或者 service属性

    log_archive_dest_11―log_archive_dest_31目的地只能包括 service属性。

    如果要为log_archive_dest_n初始化参数指定多个属性,在属性列表中首先指定location或者service属性。确保数据库本地归档redo日志目录是可访问的使用location属性至少指定一个本地磁盘目录。通过指定location='use_db_recovery_file_dest'

    可以指定文件传输位置为闪回恢复区。对应数据库初始化参数db_recovery_file_dest指定的目录,oracle通过omf自动管理存储在闪回恢复区中的文件,在service属性中必须使用Oracle net服务名

6.5 SYNC和ASYNC

     指定使用同步sync传输或者异步async传输模式,如果没有指定,默认值是async

6.6 valid_for

    在DG中,Oracle基于数据库角色和redo日志类型判断log_archive_dest_n指定的目录是否产生相应的归档redo日志,vaild_for属性可选,Oracle推荐在DG配置中的每个数据库为日志传输目的地指定vaild_for属性,以至于主数据库角色转换到配置中的任何standby数据库之后,redo传输都能继续工作。

    为每个log_archive_dest_n目的地配置valid_for参数

 

    VALID_FOR=(redo_log_type,database_role)

    redo_log_type关键字表明该目的地产生归档的redo日志类型

    online_logfile:目的地只归档联机redo日志

    standby_logfile:目的地只归档standbyredo日志

    all_logfiles:目的地既归档联机redo日志,也归档standby redo日志

 

    database_role表明该目的地产生归档的数据库角色

    primary_role:只有数据库是主,该目的地才会产生归档

    standby_role:只有数据库是备,该目的地才会产生归档

    all_role:当数据库不论是主还是备,该目的地都会产生归档

    如果目的地没有指定valid_for属性,默认情况下,不管数据库是主还是备,目的地都会归档联机redo和standby redo,默认的行为等于设置valid_for=(all_logfiles,all_roles)属性值,在主数据库和standby数据库中可以使用相同的初始化参数设置启用valid_for属性。     

    例子:

    log_archive_dest_1的vaild_for属性设置为(online_logfile,all_roles),log_archive_dest_3的vaild_for属性设置为(standby_logfile,standby_role),那当该数据库是主时,只会归档联机日志到log_archive_dest_1指定的目录,如果该数据库被转换为备,那standbyredo日志被归档到log_archive_dest_3指定的目录,log_archive_dest_1不会归档standby redo日志。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值