Oracle数据库LOGGINGNOLOGGING模式概述
1.日志記錄模式(LOGGING?、FORCE LOGGING?、NOLOGGING)
1.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強制數據庫在任何狀態下必須記錄日志。
1.2與歸檔模式及非歸檔模式之間的關系
關于歸檔及非歸檔請參考一下鏈接:
http://www.55linux.com/oracle/DBA/473.html
日志記錄模式與歸檔模式之間并不能等同,歸檔模式是指對系統產生的日志是否進行歸檔或不歸檔。歸檔模式下,將日志記錄到日志文件,并進行歸檔。非歸檔模式下,同樣將日志記錄到日志文件,只不過不歸檔而已,容易丟失日志。日志的記錄模式則不論是否處于歸檔或非歸檔,可以對日志進行記錄,強制記錄,或少記錄日志。歸檔模式中的LOGGING或FORCE LOGGING?支持介質恢復,而NOLOGGING?模式不支持介質恢復。基于NOLOGGING模式操作所產生的日志遠小于LOGGING模式產生的日志,即NOLOGGING模式最小化日志記錄。
1.3優先級別
當數據庫使用FORCE LOGGING時,具有最高優先級別,其次是表空間級別的FORCE LOGGING。即是當一個對象指定NOLOGGING時,而表空間或數據庫級別的日志模式為FORCE LOGGING,則該選項不起作用,直到表空間或數據庫級別的FORCE LOGGING解除。
一般建議將整個數據庫設置為FORCE LOGGING或基于表空間級別設定FORCE LOGGING,而不建議兩者都設置為FORCE LOGGING。
當數據庫或表空間使用非強制日志模式時,則記錄優先級別由低到高為:數據庫、表空間、數據對象
2.三者的使用情況
2.1LOGGING模式
這是日志記錄的缺省模式,無論數據庫是否處于歸檔模式,這并不改變表空間與對象級別上的缺省的日志記錄模式。對于臨時表空間將不記錄日志到聯機重做日志文件。
2.2NOLOGGING模式
此模式不是不記錄日志,而是最小化日志產生的數量,通常在下列情況下使用NOLOGGING
| 1 2 3 4 5 6 | SQL*Loader indirect mode INSERT/*+APPEND*/... CTAS ALTERTABLEstatements (move/add/split/merge partitions) CREATEINDEX ALTERINDEXstatements (move/add/split/merge partitions) |
?
NOLOGGING與表模式,插入模式,數據庫運行模式(archived/unarchived)的關系:下面僅說明使用append方式插入數據時日志產生的情況,如使用下面的方式進行插入
| 1 | insert/*+append+*/intotb_name select colnam1,colname2from table_name; |
?
數據庫處于歸檔模式:
當表模式為logging狀態時,無論是否使用append模式,都會生成redo.當表模式為nologging狀態時,只有append模式,不會生成redo
2.3FORCE LOGGING模式
設定數據庫為Force Logging模式后,數據庫將會記錄除臨時表空間或臨時回滾段外所有的操作,而忽略類似NOLOGGING之類的指定參數。
通過下面的操作來修改
| 1 2 | ALTERDATABASEFORCE LOGGING; ALTERTABLESPACE tablespace_name FORCE LOGGING; |
?
取消FORCE LOGGING模式
| 1 2 | ALTERDATABASENOFORCE LOGGING; ALTERTABLESPACE tablespace_name NOFORCE LOGGING; |
?
2.4查看不同級別的日志模式
查看數據庫級別日志的歸檔模式、記錄模式
| 1 2 3 4 5 | sys@ORCL> select log_mode,force_logging from v$database; ???? LOG_MODE???? FOR ------------ --- NOARCHIVELOG NO |
?
查看表空間級別的日志記錄模式
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | sys@ORCL> select tablespace_name,logging,force_logging from dba_tablespaces; ???? TABLESPACE_NAME??????????????? LOGGING?? FOR ------------------------------ --------- --- SYSTEM???????????????????????? LOGGING?? NO UNDOTBS1?????????????????????? LOGGING?? NO SYSAUX???????????????????????? LOGGING?? NO TEMP?????????????????????????? NOLOGGING NO USERS????????????????????????? LOGGING?? NO LINUX????????????????????????? LOGGING?? NO ASK1?????????????????????????? LOGGING?? NO ASK2?????????????????????????? LOGGING?? NO ASK3?????????????????????????? LOGGING?? NO |
?
查看對象級別的日志記錄模式
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | scott@ORCL> select table_name,logging from user_tables; ???? TABLE_NAME???????????????????? LOG ------------------------------ --- DEPT?????????????????????????? YES EMP??????????????????????????? YES BONUS????????????????????????? YES SALGRADE?????????????????????? YES EMPLOYEE?????????????????????? YES EMP_HIST?????????????????????? YES DUMMY_EMP????????????????????? YES ASKORACLE_RANGE_LIST ASKORACLE_RANGE_HASH1 ASKORACLE_RANGE_HASH ASKORACLE_LIST ???? TABLE_NAME???????????????????? LOG ------------------------------ --- ASKORACLE_HASH ASKORACLE EMP_TEST?????????????????????? YES |
2.5日志模式記錄轉換
| 1 2 3 4 5 6 7 8 9 10 11 | a.數據庫從非強制日志模式切換到強制日志模式 sys@ORCL>alterdatabaseforce logging;? b.數據庫從強制日志模式切換到非強制日志模式 sys@ORCL>alterdatabasenoforce logging; c.表空間級別從強制日志模式切換到非強制日志模式 sys@ORCL>alterdatabasenoforce logging; d.表空間級別從非強制日志模式切換到強制日志模式 sys@ORCL>alterdatabasenoforce logging; e.對象級別日志記錄模式 sys@ORCL>altertabletb_a nologging;--不記錄日志模式 sys@ORCL>altertabletb_a logging;--采用日志記錄模式 |
?
3.LOB段上有關NOLOGGING與LOGGING的情況
3.1計算所有LOB的大小:
| 1 2 | SELECT SUM(BYTES)/1024/1024/1024 as LOB_Size FROM user_segments WHERE segment_type='LOBSEGMENT'; |
?
3.2計算所有nologging的大小
| 1 2 3 4 | 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; |
?
3.3列出所有nologging/logging?的lobs和對應的表空間及其大小:
| 1 2 3 4 5 6 7 8 9 | SELECT s.segment_name,s.bytes,s.TABLESPACE_NAME FROM user_segments s,user_lobs l WHERE s.segment_type='LOBSEGMENT' AND l.LOGGING='NO'AND l.SEGMENT_NAME=s.SEGMENT_NAME; ???? SELECT s.segment_name,s.bytes,s.TABLESPACE_NAME FROM user_segments s,user_lobs l WHERE s.segment_type='LOBSEGMENT' AND l.LOGGING='YES'AND l.SEGMENT_NAME=s.SEGMENT_NAME; |
?
3.4計算LOB段上nologging/logging的數量
| 1 2 | SELECT COUNT(*) FROM user_lobs WHERE logging='NO'; SELECT COUNT(*) FROM user_lobs WHERE logging='YES'; |
?
關于LOGGING在Oracle 10g考試中的題如下:
Which two statements regarding the LOGGING clause of the CREATE TABLESPACE. .. statement are
correct? (Choose two.)
A. This clause is not valid for a temporary or undo tablespace.
B. If the tablespace is in the NOLOGGING mode, no operation on the tablespace will generate redo.
C. The tablespace will be in the NOLOGGING mode by default, if not specified while creating a?tablespace.
D. The tablespacelevel?logging attribute can be overridden by logging specifications at the table, index,materialized view, materialized view log, and partition levels.
Answer: AD
本文鏈接:http://www.askoracle.org/oracle/DBA/655.html | Ask Oracle社區
總結
以上是生活随笔為你收集整理的Oracle数据库LOGGINGNOLOGGING模式概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop基础--HDFS/Yarn/
- 下一篇: B-Tree/B+-Tree/二叉树/红