Oracle資料庫中NOLOGGING和FORCE LOGGING的理解

tolywang發表於2008-07-16
其實nologging與表模式,插入模式,資料庫執行模式(archived/unarchived)都有很大的關係:

  總結如下:

  注意append是一種hint;

  一般我們可以這樣來使用

  insert /*+append+/ into mytable values(1,"alan");

  資料庫在歸檔模式下

  當表模式為logging狀態時,無論是append模式還是no append模式,redo都會生成。

  當表模式為nologging狀態時,只有append模式不會生成redo, 沒有append照樣會生成redo .

  資料庫在非歸檔模式下

  無論是在logging還是nologing的模式下,append的模式都不會生成redo,而noappend模式下都會生成redo。

  如果我想看一張表是否是logging狀態,可以這樣

  select table_name,logging from dba_tableswheretable_name="tablename";

  那麼在Oracle內部還存在一個內部引數:_disable_logging 預設是false

  透過更改為true可以讓Oracle在修改表中的記錄的時候完全不記錄redo,這個引數要甚用。平時,我們只作為效能測試用。

  force logging(強制日誌)模式:

  透過命令:

  alter database force logging來使得Oracle無論什麼操作都進行redo的寫入。

  透過select force_logging from v$database可以看到當前資料庫強制日誌模式的狀態。

 

---------------------------------------------------------------------------------------------------------

 

nologging 在什麼情況下生效
===========================================================
.

REDO 記錄發生在oracle資料庫中的一舉一動,當你往表裡插入資料時候,如果表上存在索引,oracle會自動幫你維護這些索引。但是這個看似簡單的維護索引的工作背後有許多動作要做的,redo 就會生成這些全過程。

對於 nologging 引數:也只是在特定的條件下才會大大減少redo 生成的數量.
例如:
以下摘自
ndex creations and ALTERs (rebuilds).

Bulk INSERTs using a 'direct path insert' via the /*+ APPEND */ hint.

LOB operations (updates to large objects do not have to be logged).

Table creations via the CREATE TABLE AS SELECT.

Various ALTER TABLE operations such as MOVE and SPLIT.


-----------------------------------------------------------------------------------------------------

恢復的時候是 直接針對 檔案的操作,不會象資料庫正在執行時候的 解析、產生redo、undo …… 沒有這些過程

日誌檔案中記錄了 對檔案變化的操作。 而索引的建立包含了一系列對檔案的修改。
nologging 只針對 create table ... as 和 direct insert 生效

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-402170/,如需轉載,請註明出處,否則將追究法律責任。

相關文章