日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
一、日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
1.三者的含義
LOGGING:當建立一個資料庫物件時將記錄日誌資訊到聯機重做日誌檔案。LOGGING實際上是物件的一個屬性,用來表示在建立物件時是否記錄REDO日誌,包括在做DML時是否記錄REDO日誌。一般表上不建議使用NOLOGGING,在建立索引或做大量資料匯入時,可以使用NOLOGGING 。
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。
當資料庫或表空間使用非強制日誌模式時,則日記記錄優先順序別由低到高為:資料庫、表空間、資料物件
二、三者的使用情況
1.LOGGING模式
這是日誌記錄的預設模式,無論資料庫是否處於歸檔模式,這並不改變表空間與物件級別上的預設的日誌記錄模式。
對於臨時表空間將不記錄日誌到聯機重做日誌檔案。
2.NOLOGGING模式
此模式不是不記錄日誌,而是最小化日誌產生的數量,通常在下列情況下使用NOLOGGING
SQL*Loader in direct mode
INSERT /*+APPEND*/ ...
CTAS
ALTER TABLE statements (move/add/split/merge partitions)
CREATE INDEX
ALTER INDEX statements (move/add/split/merge partitions)
NOLOGGING與表模式,插入模式,資料庫執行模式(archived/unarchived)的關係:
下面僅說明使用append方式插入資料時日誌產生的情況,如使用下面的方式進行插入
insert /*+append+*/ into tb_name select colnam1,colname2 from table_name;
資料庫處於歸檔模式
當表模式為logging狀態時,無論是否使用append模式,都會生成redo.當表模式為nologging狀態時,只有append模式,不會生成redo。
資料庫處於非歸檔模式
無論是在logging還是nologing的模式下,append的模式都不會生成redo,而no append模式下都會生成redo。
2.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.資料庫從非強制日子模式切換到強制日誌模式
sys@ORCL> alter database force logging;
b.資料庫從強制日誌模式切換到非強制日誌模式
sys@ORCL> alter database no force logging;
c.表空間級別從強制日誌模式切換到非強制日誌模式
sys@ORCL> alter tablespace no force logging;
d.表空間級別從非強制日誌模式切換到強制日誌模式
sys@ORCL> alter tablespace no force logging;
e.物件級別日誌記錄模式
sys@ORCL> alter table tb_a nologging; --不記錄日誌模式
sys@ORCL> alter table tb_a logging; --採用日誌記錄模式
三、LOB段上有關NOLOGGING與LOGGING的情況
計算所有LOB的大小:
SELECT SUM(BYTES)/1024/1024/1024 as LOB_Size
FROM user_segments
WHERE segment_type='LOBSEGMENT';
計算所有nologging的大小
SELECT SUM(s.BYTES)/1024/1024/1024 as Nologging_size
FROM user_segments s,user_lobs l
WHERE s.segment_type='LOBSEGMENT'
AND l.LOGGING='NO' AND l.SEGMENT_NAME=s.SEGMENT_NAME;
計算LOB段上nologging/logging的數量
SELECT COUNT(*) FROM user_lobs WHERE logging='NO';
SELECT COUNT(*) FROM user_lobs WHERE logging='YES';
四、IMPDP時不寫redo
1.關閉force logging
alter database no force logging;
2.關閉表logging屬性
alter table scott.t_test nologging;
3.nologfile=Y匯入
impdp '\/ as sysdba\' dumpfile=xxx.dmp tables=scott.t_test NOLOGFILE=Y
---------------------
作者:Leshami
來源:CSDN
原文:https://blog.csdn.net/leshami/article/details/6130866
版權宣告:本文為博主原創文章,轉載請附上博文連結!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31544156/viewspace-2285315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nologging、force logging、supplemental log的理解
- 日誌記錄模組logging
- 2.5.11 指定 FORCE LOGGING 模式模式
- Python:使用logging模組記錄日誌Python
- 2.5.11.1 使用 FORCE LOGGING 子句
- python logging日誌的禁用Python
- logging 重複打日誌
- Python 封裝日誌模型loggingPython封裝模型
- 2.5.11.2 FORCE LOGGING 模式需要考慮的效能問題模式
- 理解ASP.NET Core - 日誌(Logging)ASP.NET
- PyCon 2018: 利用logging模組輕鬆地進行Python日誌記錄Python
- python之logging日誌模組詳解Python
- NETCORE - 日誌外掛 Microsoft.Extensions.LoggingNetCoreROS
- Python中logging日誌等級有哪些Python
- Python強大的日誌模組loggingPython
- 今天講講Java中的日誌—logging、logbackJava
- web server apache tomcat11-22-logging 日誌WebServerApacheTomcat
- 【python介面自動化】- logging日誌模組Python
- 今天講講Java中的日誌---logging、logbackJava
- Python 日誌列印之logging.getLogger原始碼分析Python原始碼
- 『無為則無心』Python日誌 — 65、日誌模組logging的使用Python
- .net core中的那些常用的日誌框架(Logging篇)框架
- Python 日誌庫 logging 的理解和實踐經驗Python
- Python 日誌列印之logging.config.dictConfig使用總結Python
- 『無為則無心』Python日誌 — 67、logging日誌模組處理流程Python
- 『無為則無心』Python日誌 — 64、Python日誌模組logging介紹Python
- logging
- logging模組配置筆記筆記
- go - LoggingGo
- Python日誌庫logging總結-可能是目前為止將logging庫總結的最好的一篇文章Python
- Oracle 12c後enable_ddl_logging的日誌位置變化Oracle
- Python Logging 指南Python
- Docker logging driversDocker
- logging.basicConfig()
- 案例:DG主庫未設定force logging導致備庫壞塊
- Laravel7 logging 使用 daily日誌保留 7 天是怎麼實現的LaravelAI
- python 中封裝日誌 logging,為何列印行號固定在同一行?Python封裝
- 常見日誌輸出目標(Logback | Log4j2 | Java Util Logging)Java