`
mikixiyou
  • 浏览: 1098701 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353058
社区版块
存档分类
最新评论

Data Guard物理备库的正常切换

阅读更多

 

Oracle 数据库的Data Guard是实现数据库级别的数据灾备机制。它的原理类似数据库备份恢复过程中应用重做日志部分,不停地在备用节点服务器上应用从主库传过来的归档日志文件。
data guard的备用节点又细分成logical standby和physical standby,分别应用在不同的场景中。
在Oracle 10g的Data Guard环境中,备用节点和主库节点可以互相切换。这个功能的用途包括数据库灾备的验证、数据库硬件维护的无缝切换、因数据库服务器更换导致的数据迁移等等。

在以前我处理的数据迁移工作中,一直数据库的备份和异地恢复来完成。这种方案非常可靠,新环境中数据库配置等都不需要做特别修改。但是,如果新环境出现其他故障(网络故障)时,要再将新环境的数据库迁移回去,就不可能了。新环境数据库启用后,会很快有新数据进来。又再用方式做一次数据迁移,时间上也不允许。如果使用Oracle Data Gauard 来完成这个数据迁移工作,即使后来发现新环境有故障,我们也可以利用data guard的角色互换工作再切换到老环境中。

(miki西游 @mikixiyou 文档,原文链接: http://mikixiyou.iteye.com/blog/1561621 )

这个迁移操作分成两个部分,其一是将老环境的数据库和新环境的数据库配置成data guard模式,备库采用physical standby。其二是将主库切换成备库角色,备库又切换成主库角色。



其一,data guard环境搭建

在主库上修改初始化参数,保护级别采用默认值即最大性能,重做日志传输方式采用ARCH  。这里是做数据迁移,如果是灾备需求,则需要设置成最大可用或最大保护,传输重做日志的方式为LGWR SYNC AFFIRM 。

alter system set log_archive_config='dg_config=(mikidb,mikidg)' scope=memory;
 
alter system set log_archive_dest_2='SERVICE=MIKIDB_STANDBY ARCH ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=MIKIDG' scope=memory;

 
主库的tnsnames.ora 文件中需要增加一个tnsname ,即log_archive_dest_2 中指定的mikidb_standby 。

mikidb_STANDBY =

   (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SID = mikidb)

     )

   )

 

 

在备库上修改初始化参数,设置db_unique_name ,fal_client 和fal_server 。

如下:

*.db_unique_name='mikidg'

*.fal_client='mikidb_standby'

*.fal_server='mikidb_primary'

fal 用于探测主库和备库之间归档日志文件的间隔,称之为fetch archive log 。

另外,归档路径也做一个简单设置,用于保存从主库上传输过来的归档日志文件。

*.log_archive_config='dg_config=(mikidb,mikidg)'

*.log_archive_dest_1='LOCATION=+VG1/ valid_for=(all_logfiles,all_roles) db_unique_name=mikidg'

备库的tnsnames.ora 文件中需要增加两个tnsname ,即fal_client 和fal_server 的值,分别是mikidb_standby 和mikidb_primary 。

mikidb_STANDBY =

   (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SID = mikidb)

     )

   )

mikidb_primary =

   (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SID = mikidb)

     )

   )

 

在主备库的初始化参数都设置好以后,我们在备库上恢复主库的备份,恢复使用控制文件需要主库特别生成,专门用于data guard 的备库应用。

在rman 下执行backup current controlfile for standby ‘/tmp/ctl.standby’; 就可以。

恢复的数据文件备份集就使用已有的最新的备份集。

登录RMAN 管理工具界面,执行恢复操作。

rman target /

 

restore controlfile from '/tmp/ctl.standby';

sql ‘alter database mount’;

catalog start with ‘/backup/’;

restore database;

recover database;

 

恢复到出错后,退出。

再登录sqlplus  界面,启用备库重做日志不间断应用模式。

alter database recover managed standby database disconnect from session;

通常,主库新生成的数据就会源源不断地通过归档日志文件传输过来,达到了数据迁移的目的。


其二,主库和备库的角色互换

1 、关闭所有主库上的客户端连接,准备主库角色切换

2 、在主库上,将其切换成备库角色

SQL> alter database commit to switchover to physical standby;

Database altered.

SQL> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down.

以备用模式启用原主库

 

SQL> startup nomount;

ORACLE instance started.

SQL> alter database mount standby database;

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

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

 

3 、在备库上,切换成主库模式。

SQL> alter database commit to switchover to primary;

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup

SQL> alter system switch logfile;

System altered.

 

再将初始化参数按照第一部分做一些修改,就实现了新环境和老环境的对调。如果新环境出现了问题,咱们再切换一次,就让应用再次使用老环境了。即使新环境又新生成了数据,那么老环境也因为是data guard 的物理备库模式,也同步过去了新数据。

总而言之,这将是一个更加靠谱的数据库迁移方案。

但,我想,它还有是有缺陷的。有哪些缺陷呢?

 

 

附参考命令

 

 

-- Make sure that nobody accesses the primary database anymore
sqlplus@master> SHUTDOWN IMMEDIATE
sqlplus@master> STARTUP [RESTRICT]

-- Prepare the SwitchOver
sqlplus@master> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;
sqlplus@standby> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

-- Do it
sqlplus@master> SHUTDOWN IMMEDIATE
sqlplus@master> STARTUP MOUNT
sqlplus@master> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
sqlplus@standby> ALTER DATABASE OPEN

 

 

sqlplus@standby> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
sqlplus@standby> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

 

 

failover操作过程

备库端:
  如果是最大保护和最大可用性模式,则可以直接在备库端执行failover切换。如果是最大性能模式,为了尽可能减少数据丢失,需要检查主库是否有日志没有传输到备库,手动传输备库进行注册和恢复。注意RAC环境下,归档日志是分线程的。

SYS@dev01dg>select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

   THREAD#          A
---------- ----------
         1        457

SYS@dev01dg>

[oracle@testdb dev01]$ scp * oracle@192.168.0.8:/u01/archive/dev01dg

  注册归档日志有如下两种方法,较为简单当然是用rman 了,一次注册多个。
RMAN>catalog start with '/u01/archive/dev01';

SYS@dev01dg>alter database register logfile '/u01/archive/dev01dg/arch_e8fe6364_1_712757927_460.dbf';

  apply归档日志也有两种方法。

SYS@dev01dg>alter database recover managed standby database disconnect from session;

Database altered.

SYS@dev01dg>

SYS@dev01dg>recover standby database;
ORA-00279: change 2863819 generated at 03/20/2010 21:58:17 needed for thread 1
ORA-00289: suggestion : /u01/archive/dev01dg/arch_e8fe6364_1_712757927_461.dbf
ORA-00280: change 2863819 for thread 1 is in sequence #461

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SYS@dev01dg>

  当手动apply完所有日志后,就可以failover切换到primary了。但是要注意的时,由于备库没有收到主库End-Of-REDO的信号,所以直接转换会报错,要求介质恢复。此时需要提交命令告诉备库,日志恢复已经finish 了,需要进行failover切换。注意switchover时千万不要带有finish选项,否则就会变成failover了

SYS@dev01dg> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY NOT ALLOWED

SYS@dev01dg>alter database recover managed standby database finish [force];

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

SYS@dev01dg>alter database commit to switchover to primary with session shutdown;

Database altered.

SYS@dev01dg>alter database open;

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PRIMARY           SESSIONS ACTIVE

SYS@dev01dg>

  failover完成后,数据库其实是以resetlogs方式打开的,如果log_archive_format='arch_%d_%t_%r_%s.dbf',可以看到归档日志的文件名会有新的resetlogs ID和sequence number,以此与原有的归档日志进行区分。


 

1
0
分享到:
评论

相关推荐

    oracle数据库datagard搭建物理备库(主动切换)-详细笔记文档总结

    总的来说,Oracle Data Guard 的物理备库搭建涉及网络配置、数据库参数调整、归档日志模式、数据文件的复制以及备库的初始化和角色切换。这个过程需要谨慎操作,确保数据的安全性和系统的高可用性。在实际环境中,还...

    一点一滴讲解Data Guard前世今生

    实现Data Guard的配置流程通常包括搭建物理备库和配置逻辑备库。物理备库即通过二进制日志文件将主数据库的变更实时复制到备用数据库,而逻辑备库则是通过数据库的逻辑备份和恢复来实现数据的同步。搭建物理备库主要...

    Linux虚拟机下 配置ORACLE Data Guard (phycial-backup)

    3. **redo transport服务**:Data Guard通过传输主库的redo日志到备库,使备库能够应用这些日志并保持同步。配置redo transport服务是Data Guard的核心部分,需要在主库和备库上分别设置相应的参数,如`LOG_ARCHIVE_...

    data guard原理与配置

    在Oracle不同版本中,Data Guard的实现方式和功能有所区别,例如9i开始支持逻辑备库,11g实现了物理备库在open readonly下同步。 4. 物理Data Guard的调整:物理备库实际上是基于备份和恢复原理实现的,区别在于...

    oracle10gr2_data_guard.rar_data guard_oracle_oracle data guard

    4. 故障检测与切换:利用Data Guard Broker进行自动或手动故障检测,快速将应用切换到备库。 三、Data Guard特性 1. Fast Start Failover(FSFO):自动检测主库故障并启动备库,实现快速恢复。 2. Active Data ...

    oracle数据库datagard搭建物理备库(故障切换)详细笔记文档总结

    总之,Oracle Data Guard的物理备库搭建涉及网络配置、数据库参数调整、归档日志管理等多个方面。通过合理的规划和实施,可以构建一个可靠的灾难恢复策略,保护企业的关键数据不受损失,确保业务连续性。在实际操作...

    Oracle在物理+DataGuard+中对异构操作系统的支持.pdf

    Data Guard确保生产数据库的数据可以同步到一个或多个备数据库上,以便在主数据库出现故障时,能够迅速切换到备数据库,保证数据的持续可用性和完整性。 在Data Guard中,主数据库与物理备数据库之间的配置可以是...

    oracle data guard文档

    而RAC提供在同一物理服务器集群内的高可用性,Data Guard则提供跨地域的冗余。此外,Data Guard还可以与RAC结合使用,形成更强大的HA和DR解决方案。 六、最佳实践与注意事项 1. 定期测试Failover和Switchover,...

    Oracle 11.2.0.3 RAC 与 RAC 之间搭建Data Guard 案例 -- Aative Data Guard 案例

    RAC允许多台服务器共享同一个数据库实例,提供高可用性和负载均衡,而Data Guard则是一种灾难恢复解决方案,通过创建物理或逻辑备用数据库来保护主数据库免受数据丢失或系统故障的影响。本案例将探讨如何在两个RAC...

    很全的Data Guard文档

    灾难恢复是Data Guard的另一大优势,它可以在主数据库遭受破坏时,迅速切换到备用数据库,确保业务连续性。 Data Guard的工作示例通常包含一个主数据库,这是生产数据库,大多数应用程序都会连接到它,可以是单实例...

    12c Data Guard配置手册-01

    CDB03作为物理备用数据库(Physical Standby Database),是Data Guard配置中需要配置的第二个节点。配置步骤包括: - 复制主数据库CDB01的密码文件和tnsnames.ora文件到CDB03,这确保了网络安全认证和网络服务命名...

    【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

    Fast-Start Failover 是一种自动化故障转移机制,可以在主库出现故障时自动将备库提升为主库,从而实现无缝切换。为了启用此功能,需要进行以下步骤: 1. **启用 Fast-Start Failover**: - 在主库上运行命令以启用...

    Oracle 11gR2 使用copy 数据文件搭建物理 Data Guard

    这通常在主数据库发生故障时进行,但在测试环境中也可以定期进行切换以验证备库的可用性。 4. **维护Data Guard**:在 Data Guard 模式下,定期检查 redo 日志传输状态,确保数据的一致性和完整性。同时,监控...

    Oracle10g Data Guard学习笔记

    Oracle Data Guard的主要目的是提供数据库的冗余和保护,通过创建和维护一个或多个备用数据库(Standby Databases),来保障在主数据库出现故障时能够迅速切换到备用数据库,从而确保业务连续性。Data Guard不仅提供...

    oracle data guard 完全参考手册

    - **主数据库与备用数据库**:Data Guard通过创建和维护与主数据库同步的备用数据库,以提供备份和故障切换的能力。 - **保护模式**:包括最大保护模式、最大性能模式和最大可用性模式,分别对应不同的数据丢失...

    Oracle 10G Data Guard 资料--全面详细,绝对值得学习!!!

    在"10G Data Guard Manager"这个文件中,你可能能找到关于如何设置和管理Data Guard环境的具体步骤,包括配置Data Guard Broker、创建和维护备用数据库、设置保护模式,以及进行故障切换演练。此外,还可能包含性能...

    oracle10gRAC+Data Guard环境配置以及原理说明(非常详细)

    而 Data Guard 利用Redo Transport Services和Redo Apply实现主备同步,确保数据一致性。 在实际应用中,Oracle 10g RAC 和 Data Guard 结合使用,可以提供极高的数据可用性和灾难恢复能力。企业可以根据自身需求...

    oracle.Data.Guard.11g完全参考手册

    2. 创建Data Guard配置:具体指导如何在Oracle 11g环境下建立Data Guard配置,包括物理备库和逻辑备库的搭建。 3. 数据保护模式:介绍Data Guard提供的不同数据保护模式,如最大保护(Maximum Protection)、最大...

    网盘资料\oracle相关书籍\Oracle RAC系列之_10gR2 RAC(ASM) Data Guard容灾配置手册

    4. **Data Guard配置模式**:了解不同保护模式的特点和应用场景,以及如何在主备数据库间切换模式。 5. **故障切换和恢复**:如何在主数据库出现故障时执行故障切换到备用数据库,并在问题解决后恢复原主库功能。 ...

    部署Oracle 11g物理Active Data Guard

    - 定期监控 Data Guard 的状态,确保redo传输正常,数据保护级别符合业务需求。使用 `V$DATABASE`、`V$SESSION_LONGOPS` 和 `V$RECOVERY_FILE_DEST` 等视图进行检查。 在实际生产环境中,Active Data Guard 通常...

Global site tag (gtag.js) - Google Analytics