- 浏览: 1098701 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353058
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
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,以此与原有的归档日志进行区分。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14808有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33295在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12987UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3806在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8705这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15313我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10792在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4579查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4079这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4952Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10638很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29307(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1922Oracle的data guard创建完成 ...
相关推荐
总的来说,Oracle Data Guard 的物理备库搭建涉及网络配置、数据库参数调整、归档日志模式、数据文件的复制以及备库的初始化和角色切换。这个过程需要谨慎操作,确保数据的安全性和系统的高可用性。在实际环境中,还...
实现Data Guard的配置流程通常包括搭建物理备库和配置逻辑备库。物理备库即通过二进制日志文件将主数据库的变更实时复制到备用数据库,而逻辑备库则是通过数据库的逻辑备份和恢复来实现数据的同步。搭建物理备库主要...
3. **redo transport服务**:Data Guard通过传输主库的redo日志到备库,使备库能够应用这些日志并保持同步。配置redo transport服务是Data Guard的核心部分,需要在主库和备库上分别设置相应的参数,如`LOG_ARCHIVE_...
在Oracle不同版本中,Data Guard的实现方式和功能有所区别,例如9i开始支持逻辑备库,11g实现了物理备库在open readonly下同步。 4. 物理Data Guard的调整:物理备库实际上是基于备份和恢复原理实现的,区别在于...
4. 故障检测与切换:利用Data Guard Broker进行自动或手动故障检测,快速将应用切换到备库。 三、Data Guard特性 1. Fast Start Failover(FSFO):自动检测主库故障并启动备库,实现快速恢复。 2. Active Data ...
总之,Oracle Data Guard的物理备库搭建涉及网络配置、数据库参数调整、归档日志管理等多个方面。通过合理的规划和实施,可以构建一个可靠的灾难恢复策略,保护企业的关键数据不受损失,确保业务连续性。在实际操作...
Data Guard确保生产数据库的数据可以同步到一个或多个备数据库上,以便在主数据库出现故障时,能够迅速切换到备数据库,保证数据的持续可用性和完整性。 在Data Guard中,主数据库与物理备数据库之间的配置可以是...
而RAC提供在同一物理服务器集群内的高可用性,Data Guard则提供跨地域的冗余。此外,Data Guard还可以与RAC结合使用,形成更强大的HA和DR解决方案。 六、最佳实践与注意事项 1. 定期测试Failover和Switchover,...
RAC允许多台服务器共享同一个数据库实例,提供高可用性和负载均衡,而Data Guard则是一种灾难恢复解决方案,通过创建物理或逻辑备用数据库来保护主数据库免受数据丢失或系统故障的影响。本案例将探讨如何在两个RAC...
灾难恢复是Data Guard的另一大优势,它可以在主数据库遭受破坏时,迅速切换到备用数据库,确保业务连续性。 Data Guard的工作示例通常包含一个主数据库,这是生产数据库,大多数应用程序都会连接到它,可以是单实例...
CDB03作为物理备用数据库(Physical Standby Database),是Data Guard配置中需要配置的第二个节点。配置步骤包括: - 复制主数据库CDB01的密码文件和tnsnames.ora文件到CDB03,这确保了网络安全认证和网络服务命名...
Fast-Start Failover 是一种自动化故障转移机制,可以在主库出现故障时自动将备库提升为主库,从而实现无缝切换。为了启用此功能,需要进行以下步骤: 1. **启用 Fast-Start Failover**: - 在主库上运行命令以启用...
这通常在主数据库发生故障时进行,但在测试环境中也可以定期进行切换以验证备库的可用性。 4. **维护Data Guard**:在 Data Guard 模式下,定期检查 redo 日志传输状态,确保数据的一致性和完整性。同时,监控...
Oracle Data Guard的主要目的是提供数据库的冗余和保护,通过创建和维护一个或多个备用数据库(Standby Databases),来保障在主数据库出现故障时能够迅速切换到备用数据库,从而确保业务连续性。Data Guard不仅提供...
- **主数据库与备用数据库**:Data Guard通过创建和维护与主数据库同步的备用数据库,以提供备份和故障切换的能力。 - **保护模式**:包括最大保护模式、最大性能模式和最大可用性模式,分别对应不同的数据丢失...
在"10G Data Guard Manager"这个文件中,你可能能找到关于如何设置和管理Data Guard环境的具体步骤,包括配置Data Guard Broker、创建和维护备用数据库、设置保护模式,以及进行故障切换演练。此外,还可能包含性能...
而 Data Guard 利用Redo Transport Services和Redo Apply实现主备同步,确保数据一致性。 在实际应用中,Oracle 10g RAC 和 Data Guard 结合使用,可以提供极高的数据可用性和灾难恢复能力。企业可以根据自身需求...
2. 创建Data Guard配置:具体指导如何在Oracle 11g环境下建立Data Guard配置,包括物理备库和逻辑备库的搭建。 3. 数据保护模式:介绍Data Guard提供的不同数据保护模式,如最大保护(Maximum Protection)、最大...
4. **Data Guard配置模式**:了解不同保护模式的特点和应用场景,以及如何在主备数据库间切换模式。 5. **故障切换和恢复**:如何在主数据库出现故障时执行故障切换到备用数据库,并在问题解决后恢复原主库功能。 ...
- 定期监控 Data Guard 的状态,确保redo传输正常,数据保护级别符合业务需求。使用 `V$DATABASE`、`V$SESSION_LONGOPS` 和 `V$RECOVERY_FILE_DEST` 等视图进行检查。 在实际生产环境中,Active Data Guard 通常...