GoldenGate 是否需要 force logging:Oracle Force logging 和 Nologging 模式详解

FORCE LOGGING 模式


在 Oracle 中,某些 DDL 语句(如 create database)允许指定 nologging 子句,这会导致某些数据库操作不会在
数据库 redo log 中产生 redo 记录。NOLOGGING 设置可以加快一些可以轻易地在数据库恢复机制之外进行恢复的操作,
但是该设置可能会对介质恢复和standby数据库产生不利影响。


Oracle 数据库支持即使在 DDL 语句中指定了 NOLOGGING 子句也会强制产生 redo 记录。对于临时表空间和临时段对象,
数据库永远不会产生redo记录,因此 force logging 模式对于这些对象不会产生任何影响。


Oracle 中允许指定 NOLOGGING 模式的操作如下:


CREATE TABLE 和 ALTER TABLE
CREATE INDEX 和 ALTER INDEX
CREATE MATERIALIZED VIEW 和 ALTER MATERIALIZED VIEW
CREATE TABLESPACE 和 ALTER TABLESPACE 
CREATE INDEX ... REBUILD
ALTER TABLE ... MOVE


注意:
对 LOB 列指定 logging 设置可能有别于在表级指定 logging 设置。如果在表级指定 logging 设置的同时对 LOB 列指定
NOLOGGING 设置,则对基表行记录的 DML 更改会记录 redo 记录,但是对 LOB 数据的 DML 更改则不会记录 redo 记录。


有关指定 logging 子句的详细信息,请参阅 《Oracle Database SQL Language Reference》


将数据库置于 FORCE LOGGING 模式,有两种方法:
1、在 CREATE DATABASE 语句中指定 FORCE LOGGING 子句
2、在 ALTER DATABASE 语句中指定 FORCE LOGGING 子句


数据库创建后可用 ALTER DATABASE 语句将数据库置于 FORCE LOGGING 模式,该语句可能需要相当长的时间才能执行完成
因为它会等待所有未记录redo的直接写入完成。


取消 FORCE LOGGING 模式:
ALTER DATABASE NO FORCE LOGGING;


除了可以对数据库指定 FORCE LOGGING 模式外,还可以在表空间级别指定 FORCE LOGGING 或 NO FORCE LOGGING。
但是如果在FORCE LOGGING模式在数据库级别生效,该设置将优先于表空间级别的设置。如果该设置未在数据库级别生效,
则各个表空间级别的设置就会生效。Oracle 推荐既可以将整个数据库置于 FORCE LOGGING 模式,也可以将各个表空间置
于 FORCE LOGGING 模式,但是不推荐将二者同时置于 FORCE LOGGING 模式;


FORCE LOGGING 模式是数据库的永久属性。也就是说,数据库在关闭重启后,仍旧会处于同样的 LOGGING 模式。但是在重
建控制文件后,数据库不会以 FORCE LOGGING 模式重启,除非在 CREATE CONTROL FILE 语句中指定 FORCE LOGGING 子句。


控制 redo 记录的产生


对于某些数据库操作,可以控制数据库是否产生 redo 记录。众所周知,没有 redo,则不能进行介质恢复。但是,减少redo
生成可以提高性能,对于那些能够轻松恢复的操作更是如此。例如 CREATE TABLE AS SELECT 语句,在数据库或实例产生故障
后该语句仍然可以重新执行。


如果在 CREATE TABLESPACE 语句中指定 NOLOGGING 子句,则针对该表空间中数据库对象执行的操作会抑制 REDO 的产生。
如果未指定 NOLOGGING 子句,或者指定的是 LOGGING 子句,则每当对表空间中的对象执行更改时数据库都会产生 REDO 记录。
无论指定哪种 LOGGING 属性,对于临时段或者临时表空间来说都不会产生 REDO 记录。


表空间级别指定的 logging 属性是在该表空间中创建的对象的默认属性。可以通过在 SCHEMA 对象级别(例如,CREATE TABLE)
指定 LOGGING 或 NOLOGGING 设置覆盖这种默认的 logging 属性。


如果配置了 standby 数据库,则NOLOGGING模式会给 standby 数据库的高可用性和准确性带来问题。为了客服该问题,可以指定
 FORCE LOGGING 模式。如果在 CREATE TABLESOACE 语句中指定 FORCE LOGGING 子句,则针对该表空间中对象所做的所有操作及
更改,都会强制产生 redo 记录。该设置将覆盖所有对象级别的设置。


如果将处于 FORCE LOGGING 模式的表空间传输至其他数据库,则新表空间将不会保持 FORCE LOGGING 模式。


GoldenGate 同步是否需要配置 FORCE LOGGING 模式


关于 GoldenGate 同步是否需要配置 FORCE LOGGING ,网上有许多人认为,GoldenGate 只是强制要求开启 supplemental log
并未强制要求开启 FORCE LOGGING,但是 xiangsir 认为开启 FORCE LOGGING 是必须的,理由如下:


首先我们先弄清除与 FORCE LOGGING 模式相对应的 NOLOGGING 模式的含义:


《Oracle Data Guard Concepts and Administration》 for information about the effect of NOLOGGING on a database


In some SQL statements, the user has the option of specifying the NOLOGGING clause, which indicates that the 
database operation is not logged in the online redo log file. Even though the user specifies the clause, a 
redo record is still written to the online redo log file. However, there is no data associated with this record.
 This can result in log application or data access errors at the standby site and manual recovery might be 
 required to resume applying log files.
 
数据库设置了 NOLLOGING 模式,并不意味着相关的操作不会产生 redo,只是会抑制该操作产生日志,最小化日志产生的数量。






To create a table most efficiently use the NOLOGGING clause in the CREATE TABLE...AS SELECT statement. The NOLOGGING 
clause causes minimal redo information to be generated during the table creation. This has the following benefits:


Space is saved in the redo log files.
 
The time it takes to create the table is decreased.
 
Performance improves for parallel creation of large tables.
 
The NOLOGGING clause also specifies that subsequent direct loads using SQL*Loader and direct load INSERT operations 
are not logged. Subsequent DML statements (UPDATE, DELETE, and conventional path insert) are unaffected by the NOLOGGING 
attribute of the table and generate redo.


摘自 《Administrator's Guide》


当在 direct load SQL*Loader 和 INSERT 操作,建立或重建大索引或者修改大表操作时,我们通常会指定 NOLLOGING 语句,这样会产生
较少的日志,加快操作执行速度,以 insert /*+append*/ 为例,
当设置为 logging 模式时:
      如果数据库处于归档模式,则无论是否使用 append ,都会生成 redo,当设置有表级的 nologging 模式时,只有设置 append,不会
产生 redo。
      如果数据库处于非归档模式,则无论是在 logging 还是 nologging 模式下,append 插入都不会生成 redo,而 no append 都会生成
redo。


FORCE LOGGING 配置的考虑因素






FORCE LOGGING mode results in some performance degradation. If the primary reason for specifying FORCE LOGGING is to ensure 
complete media recovery, and there is no standby database active, then consider the following:


How many media failures are likely to happen?
 
How serious is the damage if unlogged direct writes cannot be recovered?
 
Is the performance degradation caused by forced logging tolerable?
 


If the database is running in NOARCHIVELOG mode, then generally there is no benefit to placing the database in FORCE LOGGING 
mode. Media recovery is not possible in NOARCHIVELOG mode, so if you combine it with FORCE LOGGING, the result may be performance 
degradation with little benefit.




转载请注明出处及原文链接:

http://blog.csdn.net/xiangsir/article/details/8612366




  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值