oracle啟用nologging
Oracle啟用nologging
以下操作可以啟用nologging
1.建立索引或重建索引。
2.透過/*+APPEND*/提示,使用直接路徑(Direct Path)批次INSERT操作或3.SQL*Loader 直接路徑載入資料。
4.CTAS方式建立資料表。
5.大物件(LOB)的操作。
6.一些ALTER TABLE操作,如MOVE SPLIT等。
NOLOGGING和表模式(LOGGING/NOLOGGING),插入模式(APPEND/NOAPPEND)及資料庫執行模式(歸檔/非歸檔)都有關係。
3種模式和Redo的關係
資料庫模式 |
表模式 |
插入模式 |
REDO生成 |
ARCHIVELOG |
LOGGING |
APPEND |
有REDO |
NO APPEND |
有REDO | ||
NOLOGGING |
APPEND |
無REDO | |
NO APPEND |
有REDO | ||
NOARCHIVELOG |
LOGGING |
APPEND |
無REDO |
NO APPEND |
有REDO | ||
NOLOGGING |
APPEND |
無REDO | |
NO APPEND |
有REDO |
可以採用NOLOGGING模式執行以下操作:
1 索引的建立和ALTER(重建)。
2 表的批次INSERT(透過/*+APPEND */提示使用“直接路徑插入“。或採用SQL*Loader直接路徑載入)。表資料不生成redo,但是
所有索引修改會生成redo,但是所有索引修改會生成redo(儘管表不生成日誌,但這個表上的索引卻會生成redo!)。
3 LOB操作(對大物件的更新不必生成日誌)。
4 透過CREATE TABLE AS SELECT建立表。
5 各種ALTER TABLE操作,如MOVE和SPLIT。
在一個ARCHIVELOG模式的資料庫上,如果NOLOGGING使用得當,可以加快許多操作的速度,因為它能顯著減少生成的重做日
志量。假設你有一個表,需要從一個表空間移到另一個表空間。可以適當地排程這個操作,讓它在備份之後緊接著發生,這樣就能把表
ALTER為NOLOGGING模式,移到表,建立索引(也不生成日誌),然後再把表ALTER回LOGGING模式。現在,原先需要X小時才能
完成的操作可能只需要X/2 小時(執行是會不會真的減少50%的時間,這一點我不敢打保票!)。要想適當地使用這個特性,需要DBA的
參與,或者必須與負責資料庫備份和恢復(或任何備用資料庫)的人溝通。如果這個人不知道使用了這個特性,一旦出現介質失敗,就可
能丟失資料,或者備用資料庫的完整性可能遭到破壞。對此一定要三思。
使用範例
create table t
NOLOGGING
as
select * from all_objects
關於NOLOGGING操作,需要注意以下幾點:
1 事實上,還是會生成一定數量的redo。這些redo的作用是保護資料字典。這是不可避免的。與以前(不使用NOLOGGING)相
比,儘管生成的redo量要少多了,但是確實會有一些redo。
2 NOLOGGING不能避免所有後續操作生成redo。在前面的例子中,我建立的並非不生成日誌的表。只是建立表(CREATE TABLE)
這一個操作沒有生成日誌。所有後續的“正常“操作(如INSERT、UPDATE和DELETE)還是會生成日誌。其他特殊的操作(如
使用SQL*Loader的直接路徑載入,或使用INSERT /*+ APPEND */語法的直接路徑插入)不生成日誌(除非你ALTER這個表,
再次啟用完全的日誌模式)。不過,一般來說,應用對這個表執行的操作都會生成日誌。
3 在一個ARCHIVELOG 模式的資料庫上執行NOLOGGING 操作後,必須儘快為受影響的資料檔案建立一個新的基準備份,從而
避免由於介質失敗而丟失對這些物件的後續修改。實際上,我們並不會丟失後來做出的修改,因為這些修改確實在重做日誌中;
我們真正丟失的只是要應用這些修改的資料(即最初的資料)。
有許多朋友誤已寫SQL或把表的屬性加NOLOGGING,就可以不採成日誌。這是一個誤解。
在資料遷移或大量的資料insert入庫時,由於大量資料的insert或修改,經常引起redo log sync的等待,造成資料庫效能緩慢。
因為許多朋友對NOLOGGING的誤解,所以許多人在insert資料時,在SQL後加nologging,想透過該用法使操作不採生日記錄。但無效果。
這裡討論nologging的具體用法:
資料庫操作,只有如下幾種情況下不產成redo記錄:
1.用sql*load的direct load方式時,不採用redo記錄
2.用insert的direct方式,即在append方式insert
3.create table .... as select
4.create index
5.alter table ... move partition
6.alter table ... split partition
7.alter index ... split partition
8.alter index ... rebuild
9.alter index ... rebuild partition
10.INSERT, UPDATE, and DELETE on LOBs in NOCACHE NOLOGGING mode stored out of line
參考文章:http://hi.baidu.com/bystander1983/blog/item/ceea53edd6409c2e62d09ff1.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-660708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle nologgingOracle
- Oracle DML NOLOGGINGOracle
- Oracle’s NOLOGGINGOracle
- oracle support nologging ddl dmlOracle
- oracle nologging和appendOracleAPP
- NOLOGGING 應用場景
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- Oracle中檢視哪些objects 是nologging 的OracleObject
- ORACLE RAC 啟用歸檔Oracle
- [Oracle] Create table as 速度測試nologging+parallelOracleParallel
- [Oracle] Insert into速度測試nologging+parallelOracleParallel
- [Oracle] Create index速度測試nologging+parallelOracleIndexParallel
- Oracle logging 和nologging 的區別Oracle
- 啟用oracle block change trackingOracleBloC
- 4.2.6 禁用和啟用元件的Oracle重啟管理元件Oracle
- ORACLE資料庫效能優化之表的NOLOGGINGOracle資料庫優化
- oracle 構建索引index_logging_nologgingOracle索引Index
- oracle測試資料庫啟用Oracle資料庫
- Oracle 12c啟用inmemory特性Oracle
- oracle 9i啟用Execution PlanOracle
- 啟用oracle table rowdependencies trace row modificationOracle
- Oracle 8i DataGuard 的啟用Oracle
- index與nologgingIndex
- Oracle啟用FRA和archivelog步驟OracleHive
- Linux上Oracle啟用非同步IOLinuxOracle非同步
- 檢視 Oracle 是用spfile 啟動還是 pfile 啟動Oracle
- Oracle database/Tablespace logging&nologging 優先關係OracleDatabase
- Oracle EBS基礎學習:Oracle EBS啟用診斷功能Oracle
- Nologging and append testAPP
- 4.1.7 快速應用程式通知與Oracle重啟Oracle
- 啟用oracle資料庫密碼函式Oracle資料庫密碼函式
- Oracle EBS併發請求啟用跟蹤Oracle
- 關於oracle後臺啟用的schedule jobOracle
- Oracle10g如何啟用isqlplusOracleSQL
- oracle 10g rac 啟用歸檔模式Oracle 10g模式
- Oracle NoLogging Append 方式減少批量insert的redo_sizeOracleAPP
- Oracle資料庫中NOLOGGING和FORCE LOGGING的理解Oracle資料庫
- nologging與append ztAPP