對於logging的理解總是以為表的日誌設定為NO它就不會去產生日誌了,其實不是的下面是對於logging的一些解釋和實驗。
Logging介紹
可以採用nologging模式執行以下操作:
1.索引的建立和ALTER(重建)。
2.表的批量INSERT(通過/*+append */提示使用“直接路徑插入“。或採用SQL*Loader直接路徑載入)。表資料產生少量redo,但是所有索引修改會產生大量redo(儘管表不組建記錄檔,但這個表上的索引卻會產生redo!)。
3.Lob操作(對大對象的更新不必組建記錄檔)。
4.通過create table as select建立表。
5.各種alter table操作,如move和split。
在一個archivelog模式的資料庫上,如果nologging使用得當,可以加快許多操作的速度,因為它能顯著減少產生的重做日誌量。假設你有一個表,需要從一個資料表空間移到另一個資料表空間,原先需要N小時才能完成的操作可能只需要N/2小時。要想適當地使用這個特性,需要DBA的參與,或者必須與負責Database Backup和恢複(或任何備用資料庫)的人溝通。如果這個人不知道使用了這個特性,一旦出現介質失敗,就可能遺失資料,或者備用資料庫的完整性可能遭到破壞,對此一定要三思。
對象Logging狀態查詢
通過此查詢SQL語句查詢表的logging狀態
SELECT T.TABLE_NAME, T.LOGGING
FROM USER_TABLES T
WHERE T.TABLE_NAME LIKE '%TEST_FUTUFARES%';
Create和Insert的Logging測試
Create table …. as select ….及 insert into …..select ….測試
改變logging狀態值的方法:
ALTER TABLE table_name NOLOGGING/logging;
下面的例子是來源資料在1萬條左右,Create table …as select …測試發現相差2秒鐘左右,特別是在大資料量帶有nologging的Create速度上確實會快很多。
下面是INSERT語句的測試資料量在2百萬左右,TEST_FUTUFARES2的logging不管是在YES還是NO的狀態下其實插入都是一樣的速度