NOLOGGINGFORCE LOGGING
=======================NOLOGGING&&FORCE LOGGING=================================
關于nologging:
You can create tables and indexes with the CREATE TABLE AS SELECT statement. You can also specify that the database create them with the NOLOGGING option. When you create a table or index as NOLOGGING, the database does not generate redo log records for the operation. Thus, you cannot recover objects created with NOLOGGING, even if you are running in ARCHIVELOG mode.
Be aware that when you perform media recovery, and some tables or indexes are created normally whereas others are created with the NOLOGGING option, the NOLOGGING objects are marked logically corrupt by the RECOVER operation.?
Any attempt to access the unrecoverable objects returns an ORA-01578 error message. Drop the NOLOGGING objects and re-create them if needed.
關于Force logging
Specifying FORCE LOGGING Mode
Some data definition language statements (such as CREATE TABLE) allow the NOLOGGING clause, which causes some database operations not to generate redo records in the database redo log. The NOLOGGING setting can speed up operations that can be easily recovered outside of the database recovery mechanisms, but it can negatively affect media recovery and standby databases.
Oracle Database lets you force the writing of redo records even when NOLOGGING has been specified in DDL statements. The database never generates redo records for temporary tablespaces and temporary segments, so forced logging has no affect for objects.
nologging,logging,force logging分為對象級(DDL創建表或索引的時候使用了nologging或其他),表空間級,數據庫級。force logging會比nologging“權利" 更大
force logging就是忽略nologging
Oracle數據庫中有多種創建表的方式。如可以通過復制其他表的方式來建立數據庫表;而可以利用Select查詢語句從其他數據庫對象中查詢數據并生成新的數據庫表。但是如果利用這些形式來建立表的話(即在建立表的時候同時在新表中插入數據),如果數據比較多,則這個建表的速度會比較慢。這主要是因為默認情況下,建立表、插入數據等動作都會先寫入到重做日志文件中,然后再建立相關的表并插入記錄。也就是說,相當于數據庫系統這個動作要操作兩遍。這就降低了數據庫建表的速度。當記錄越多,這速度就會越慢。
Nologging選項就是讓數據庫在插入大量數據或者進行其他復雜操作時不寫重新操作,而是直接建立表或者插入數據。但是Nologging參數的使用也會受到一定的限制。
一、 Nologging使用的限制。
Nologging選項使用的限制主要體現在兩個方面,一是并不是所有的語句都支持這個選項;二是其生效的時間跟數據庫的歸檔模式相關。如數據庫管理員可能需要一次性更新某個表中上百萬條的紀錄。此時管理員可以通過Update語句來更新。但是因為這個更新動作會同時寫入到重做日志當中。所以當記錄比較多(或者表之間關聯更新)的時候,執行Update更新語句會花費比較長的時間。此時能否可以采用Nologging語句來提高更新性能呢?答案是否定的,因為Update更新語句不支持Nologging這個選項。故數據庫管理員在采用這個參數時,需要知道那些語句支持這個語句,哪些語句不支持。
另外Nologging參數的生效還跟數據庫的運作模式相關。通常情況下數據庫運作模式有歸檔日至模式與非歸檔日志模式的差異。在非歸檔日志模式下,數據庫將不會對重做日志文件進行歸檔操作。而在歸檔模式下,數據庫系統將對重做日志文件進行歸檔操作。即在日志發生切換時,系統進程先要等待歸檔進程將下一個重做日志文件歸檔完畢后才寫入重做日志文件,覆蓋其中的重做日志文件。Nologging選項是否生效,還直接跟這兩個操作模式有關。根據筆者的了解,同樣是采用了Nologging選項,相對來說在非歸檔模式下要比在歸檔模式下效果明顯一點。
再者數據庫工程師要明白一個問題,就是direct insert也可以成批插入數據。不過這個插入跟insert插入有區別。前者在插入數據的時候,不會寫重做日志。而后者常規插入的話,則會寫入重做日志中。此時,nologgin選項對于他們來說是不起作用的。故如果數據庫工程師需要插入大量的數據并且要提高插入的速度,則要注意此時nologging選項對于insert語句不起作用。此時數據庫工程師只能夠通過direct insert語句來提高插入效率。因為這條語句默認情況下是不會寫入重做日志的。
二、 Nologging的典型應用。
雖然Nologging選賢在使用時受到不少的限制,但是在實際工作中其仍然是一個很有用的工具,特別是數據庫在初始化的時候其特別有效。具體的來說在如下幾種情況中利用這個參數可以提高操作效率。
一是當數據庫管理員通過CREATE TABLE AS SELECT(即數據庫管理員可以通過查詢語句來創建表)語句創建表時,筆者建立在語句中加入Nologging選項。特別是當記錄比較多的時候。此時加入這個參數,可以避免在創建表的過程中產生過多的重做記錄。如此的話,不僅可以節省重做日志文件的存儲空間,而且還能夠加快表的創建速度。一舉多得,值得數據庫管理員去嘗試。
二是在創建大表的時候也適宜采用這個參數。通常情況下,Nologging參數更加適合于創建大表時采用。在創建大表(同時需要插入大量數據)時加上這個參數,相對于創建小表來說,能夠獲得更加明顯的速度提升。
同時數據庫工程師需要注意,執行Update更新語句時,這個參數會失效。故有時候數據庫管理員會發現一個奇怪的問題,更新一百萬條記錄比插入同樣的一百萬條記錄速度還慢。這很可能是因為在插入數據的時候采用了Nologging參數或者是采用direct insert語句。他們不會在插入數據的同時寫入重做日志。那么如何才能夠提高update語句的執行效率呢?這是一個很復雜的問題,三言兩語也說不清楚。簡單的來說,在update更新語句中,是不能夠通過這個參數來限制其重做日志的操作。不過可以通過其他方式來提高其執行效率。如可以把所需要修改數據的數據表中索引等先暫時停用掉,等到數據更新完成后再啟用。這就可以比較明顯的提高數據更新效率。
總結
以上是生活随笔為你收集整理的NOLOGGINGFORCE LOGGING的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OCM备考 三. Managing Da
- 下一篇: purge table table_na