1、首先是加快主库的更新操作,那么首先关闭主库对STANDBY的归档,减少主库写STANDBY库日志对主库产生的压力 ,这需要在更新开始前在主库设置log_archive_dest_state_N参数为DEFER ,然后主库切换日志来激活这个新的参数设置。注意:如果是RAC的主库,则每个库都需要设置此参数,并且每个库都进行一次日志切换操作。
2、主库更新完成后,可以在备用库做一些设置来加速日志应用的更新
,参数如下:
APPLY_SERVERS=16--可以设置更多的并行应用的进行来提高应用的速度
PREPARE_SERVERS=8--可以设置更多的准备进程来提高应用速度
MAX_SERVERS=40--设置最大可使用的进程数,要大于所有的APPLY、PREPARE、ANALYZE等进程之和
----设置以上并行参数的时候,要注意PARAMETER中的PARALLEL参数相关的设置也要能支持上面的调整。
_EAGER_SIZE=4001--这个是一个隐含的参数,用来设置大事务和小事务时间的分界线,更新记录行数大于此值的被认为是大事务,提高这个参数
的设置对大事务的应用有提高。查询 v$logstdby_stats视图,如果没有很多的bytes paged
out的话,说明这个参数还可以设置的更大。
MAX_SGA=2048--LCR可使用的SGA大小,如果过小则会产生很多的PAGE OUT,可以调整此SGA的大小,此SGA是数据SHARED POOL中的一部分的,所以要保证SHARED POOL也足够大
PRESERVE_COMMIT_ORDER = FALSE--设置事务不按照严格的主库上事务发生的顺序来进行应用,也可以提高应用的速度。
3、如果以上招数都不能解决问题,那可能就是碰到了ORACLE的BUG了,参考5327658.8,上面说到如果更新百万级大表的话,可能造成STANDBY的应用非常慢,可以通过升级来解决问题,需要升级到10.2.0.4或者11.1.0.6 。
4、我这次千万级的更新使用了2的方法后,还是应用很慢,整整一天应用都没有同步过来,后来发现可以把一个表的DML操作SKIP掉,然后重新同步这个表来实现 。 于是先使用dbms_logstdby.skip把这个表所有的DML操作全部忽略,加速应用,等到积累的日志全部应用完成后,使用 dbms_logstdby.instantiate_table进行表的同步,结果发现这个同步操作也是很慢,半个多小时了还是在进行中,于是取消操 作。后来发现dbms_logstdby.instantiate_table基本上就是在STANDBY库先把表删除,然后再使用IMPDP把这个表的 数据通过DBLINK导过来。既然这样可以,那就手工做吧。
5、把STANDBY的APPLY停下来,然后查询STANDBY的 V$LOGSTDBY_PROGRESS , 得到当前的APPLY_SCN,那么利用主库的FLASHBACK特性,先把STANDBY的表 TRUNCATE掉,然后使用INSERT /*+ APPEND*/ INTO TABLE SELECT * FROM TABLE@DBLINK AS SCN OF XX把数据导过来,其中的XX就是上面查到的APPLY_SCN。这当中其实就是大家很熟悉的导数据操作了,可以使用先删除索引,导入完了再重建,使用 APPEND提示等等多种手段来提高导入的速度。
6、经过10多分钟,数据导完,建完索引,整个过程不到半个小时,比dbms_logstdby.instantiate_table还快一些,虽然繁琐,但是过程比较透明,出现问题也容易处理的多。
建议和总结
:
1、方法2中的很多参数在平时的日志应用中就可是设置好来加速日志应用速度。
2、对于大批量的数据更新,尽量使用分批提交的方式,把大事务拆分成小的事务,而且进行要比_EAGER_SIZE参数设置的要小一些
3、PRESERVE_COMMIT_ORDER参数在日志同步完成后,为了保证事务和生产上的顺序一致,最好把这个参数使用DBMS_LOGSTDBY.APPLY_UNSEGT取消。
4、因为主库的一个DML的操作在STANDBY库会被分解成一个个单独的更新的sql,所以可以合理利用规则来SKIP这些DML,然后再手工同步的方式来进行
5、有可能的话,升级数据库系统
参考至:http://www.eygle.com/digest/2009/02/logical_standby_slowly_hang.html
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
Logical Standby 是 Oracle Data Guard 功能的一部分,它提供了一种实时复制主库数据到备库的方法,同时保持备库处于逻辑一致的状态,适合于读多写少的应用场景。备库不仅接收主库的归档日志,还解析并应用这些日志...
Oracle DataGuard 是Oracle数据库系统提供的一种高可用性和灾难恢复解决方案,它通过创建和维护一个或多个备用数据库(Standby Database)来确保数据的安全性。在本篇Oracle Standby Database的培训内容中,我们将...
- Logical Standby Database:逻辑备用数据库则对归档重做日志进行解析,根据解析结果执行SQL语句来更新数据。这允许逻辑备用数据库在不同的数据库结构或模式下运行。 3. Standby Database的建立过程: - 创建...
- **启用补充日志**:如果未启用,则执行 `ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;`。 2. **设置角色转换参数**:调整 LOG_ARCHIVE_DEST_n 参数以支持角色转换。 3. **...
在某些情况下,可能需要 standby 库延迟应用已经归档的日志,即虽然 standby 库已经接收到 primary 发送的 redo 日志并完成了归档,但暂时不进行应用。通过设定具体的延迟时间(以分钟为单位),可以有效避免因 ...
- **物理Standby数据库(Physical Standby Database)**:与主数据库结构完全相同的数据库,实时接收并应用主数据库的redo日志,保持与主库一致。 - **Redo日志(Redo Log)**:记录对数据库的所有更改,用于在...
- 在Standby数据库上设置恢复进程,持续应用归档日志。 - 定期验证Standby数据库的完整性和一致性。 4. Oracle相关产品支持高可用性: Oracle提供了多种高可用性解决方案,如Oracle Fail Safe、Oracle Parallel ...
与最大保护模式类似,事务提交需日志同时写入,但当目标日志写入失败时,源数据库会切换到最大性能模式,直到问题解决并应用延迟日志。 DataGuard 还有两种日志应用方式: 1. Physical Standby:目标数据库通过...
主要角色包括Primary Database(主数据库)和Standby Database(备用数据库),可能还包括一个或多个Physical Standby(物理备用)或Logical Standby(逻辑备用)数据库。 在Oracle 10g中,配置Data Guard的步骤...
2. Physical Standby 在执行查询时需暂停日志应用,可能导致同步延迟。 3. Logical Standby 不支持某些特殊数据对象和类型。 4. 不支持一对多或多对一复制,不适合信息集成场景。 5. 不能选择特定的 schema 或表空间...
大多数人都知道Streaming Replication已经成为PostgreSQL的一部分,并且通常用于高可用性和读写分离,流复制是基于WAL日志的物理复制,适用于整个数据库实例的复制,并且备库是只读的。 Logical Replication属于...
如果输出显示所有归档日志均已完成应用,则表明同步正常。 **步骤3: 取消待转换物理Standby的Redo应用** 执行以下命令取消物理Standby数据库上的Redo应用: ``` ALTER DATABASE RECOVER MANAGED STANDBY DATABASE ...
false true]`,`logical2cellstr`将生成一个2x2的单元格数组,其中每个元素对应相应的字符串。这种转换对于将逻辑数据呈现给用户或者在字符串操作中使用逻辑值很有帮助。 接下来是`cellstr2logical`函数。这个函数...
Informix 系统中有两种非常重要的磁盘构件:物理日志(physical log)和逻辑日志(logical log)。这两种日志都是 Informix 系统中的关键组件,它们 Plays a crucial role in ensuring the integrity and ...
3. **Redo Apply**:在Physical Standby模式下,主数据库的重做日志被传输到备用数据库,然后在备用数据库上应用,使备用数据库保持最新状态。这个过程称为Redo Apply。 4. **Fast Start Failover**:Oracle Data ...
公司使用纸质流程(例如打印,邮寄和手动归档纸质文档)的日子已经一去不复返了。我们的文档管理系统用电子程序替代了所有这些方法,从而使您的组织可以显着降低成本。 查看https://www.logicaldoc.com了解更多...
Oracle Data Guard提供了多种角色和配置,包括Physical Standby、Logical Standby和Snapshot Standby等,其中Physical Standby是最常见的,它通过redo应用实现与Primary的实时同步。 **2.2 Data Guard原理** Data ...
2. **逻辑备用数据库(Logical Standby Database)**:逻辑备用数据库则通过SQL重放功能来更新,允许在不同结构的数据库之间进行数据同步,提供了更灵活的恢复选项,但不保证数据的实时同步。 3. **Data Guard**:...
标题“UBS Logical”指的是一个逻辑测试,通常涉及一系列图形或符号的规律性变化,以及对于这些变化的推理分析。这类测试在求职过程中,尤其是像UBS这样的大型国际金融公司,是评估应聘者逻辑思维和问题解决能力的一...