原文地址:LOGGING 、FORCE LOGGING 、NOLOGGING、歸檔模式、非歸檔模式作者:終結者
日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
1.三者的含義
LOGGING:當創建一個數據庫對象時將記錄日誌信息到聯機重做日誌文件。LOGGING實際上是對象的一個屬性,
用來表示在創建對象時是否記錄REDO日誌,包括在做DML時是否記錄REDO日誌。
FORCE
LOGGING:簡言之,強制記錄日誌,即對數據庫中的所有操作都產生日誌信息,並將該信息寫入到聯機重做日誌文件。
NOLOGGING:正好與LOGGING、FORCE LOGGING
相反,儘可能的記錄最少日誌信息到聯機日誌文件。
FORCE
LOGGING可以在數據庫級別、表空間級別進行設定、而LOGGING與NOLOGGING可以在數據對象級別設定。
在使用DATA GUARD
時,要求使用強制記錄日誌模式。注:FORCE LOGGING並不比一般的LOGGING記錄的日誌多,數據庫在FORCE
LOGGING狀態下,NOLOGGING選項將無效,因爲NOLOGGING將破壞DATAGUARD的可恢復.FORCE
LOGGING強制數據庫在任何狀態下必須記錄日誌。
2.與歸檔模式及非歸檔模式之間的關係
日誌記錄模式與歸檔模式之間並不能等同,歸檔模式是指對系統產生的日誌是否進行歸檔或不歸檔。
歸檔模式下,將日誌記錄到日誌文件,並進行歸檔。非歸檔模式下,同樣將日誌記錄到日誌文件,只不過不歸檔而已,容易丟失日誌。
日誌的記錄模式則不論是否處於歸檔或非歸檔,可以對日誌進行記錄,強制記錄,或少記錄日誌。
歸檔模式中的LOGGING或FORCE
LOGGING 支持介質恢復,而NOLOGGING
模式不支持介質恢復。
基於NOLOGGING模式操作所產生的日誌遠小於LOGGING模式產生的日誌,即NOLOGGING模式最小化日誌記錄。
3.優先級別:
當數據庫使用FORCE
LOGGING時,具有最高優先級別,其次是表空間級別的FORCE
LOGGING。即是當一個對象指定NOLOGGING時,而表空間或數據庫級別的日誌模式爲FORCE
LOGGING,則該選項不起作用,直到表空間或數據庫級別的FORCE
LOGGING解除。
一般建議將整個數據庫設置爲FORCE LOGGING或基於表空間級別設定FORCE
LOGGING,而不建議兩者都設置爲FORCE
LOGGING。
當數據庫或表空間使用非強制日誌模式時,則日記記錄優先級別由低到高爲:數據庫、表空間、數據對象
4.三者的使用情況
1.LOGGING模式
這是日誌記錄的缺省模式,無論數據庫是否處於歸檔模式,這並不改變表空間與對象級別上的缺省的日誌記錄模式。對於臨時表空間將不記錄日誌到聯機重做日誌文件。
2.NOLOGGING模式
此模式不是不記錄日誌,而是最小化日誌產生的數量,通常在下列情況下使用NOLOGGING
數據庫處於歸檔模式
當表模式爲logging狀態時,無論是否使用append模式,都會生成redo.當表模式爲nologging狀態時,只有append模式,不會生成redo。
數據庫處於非歸檔模式
無論是在logging還是nologing的模式下,append的模式都不會生成redo,而no
append模式下都會生成redo。
3.FORCE LOGGING模式
設定數據庫爲Force
Logging模式後,數據庫將會記錄除臨時表空間或臨時回滾段外所有的操作,而忽略類似NOLOGGING之類的指定參數。
通過下面的操作來修改
ALTER
DATABASE FORCE LOGGING;
ALTER TABLESPACE tablespace_name FORCE LOGGING;
取消FORCE LOGGING模式
ALTER DATABASE NO FORCE
LOGGING;
ALTER TABLESPACE tablespace_name NO FORCE LOGGING;
3.查看不同級別的日誌模式
查看數據庫級別日誌的歸檔模式、記錄模式
SQL> select log_mode,force_logging from v$database;
LOG_MODE FORCE_LOGGING
------------ -------------
ARCHIVELOG NO
查看錶空間級別的日誌記錄模式
SQL> select tablespace_name,logging,force_logging from dba_tablespaces;
TABLESPACE_NAME LOGGING FORCE_LOGGING
--------------- --------- -------------
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS LOGGING NO
查看對象級別的日誌記錄模式
scott@ORCL> select table_name,logging from
user_tables;
TABLE_NAME LOG
------------------------------ ---
TB_A YES
TB_B YES
4.日誌記錄模式的轉換
a.數據庫從非強制日子模式切換到強制日誌模式
SQL>alter
database force logging;
b.數據庫從強制日誌模式切換到非強制日誌模式
SQL>alter
database no force logging;
c.表空間級別從強制日誌模式切換到非強制日誌模式
SQL>alter
tablespace tablespace_name force logging;
d.表空間級別從非強制日誌模式切換到強制日誌模式
SQL>alter
tablespace tablespace_name no force logging;
e.對象級別日誌記錄模式
SQL>alter table tb_a
nologging; --不記錄日誌模式
SQL>alter
table tb_a logging; --採用日誌記錄模式