天天看點

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 為例,

當設定為 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

繼續閱讀