ORACLE NOLOGGING研究

來源:互聯網
上載者:User

標籤:style   blog   http   ar   io   os   使用   sp   for   

熟悉oracle的人都知道,通過設定oracle的nologging選項,可以使某些操作快速完成,風險是Database Backup可能失效。可以使用nologging的操作有很多,搜集資料整理如下:

1.索引的建立和ALTER(重建)。
2.表的批量INSERT(通過/*+append */提示使用“直接路徑插入“。或採用SQL*Loader直接路徑載入)。表資料產生少量redo,但是所有索引修改會產生大量redo(儘管表不組建記錄檔,但這個表上的索引卻會產生redo!)。
3.Lob操作(對大對象的更新不必組建記錄檔)。
4.通過create table as select建立表。
5.各種alter table操作,如move和split。

6. dml操作始終產生redo,對於lob欄位例外(與lob欄位的undo方式有關)


下面,我們來使用一下:

首先是歸檔模式下:

[sql] view plaincopyprint?
  1. SQL> show user  
  2. USER is "YUE"  
  3. SQL> @redo.sql  
  4.   
  5. STATISTIC# USERNAME                       NAME                      VALUE  
  6. ---------- ------------------------------ -------------------- ----------  
  7.        178 YUE                            redo size                   684  
  8.   
  9. SQL> create table t2 as select * from t1;  
  10.   
  11. Table created.  
  12.   
  13. SQL> @redo.sql  
  14.   
  15. STATISTIC# USERNAME                       NAME                      VALUE  
  16. ---------- ------------------------------ -------------------- ----------  
  17.        178 YUE                            redo size               8573344  
  18.   
  19. SQL> create table t3 nologging  as select * from t1;  
  20.   
  21. Table created.  
  22.   
  23. SQL> @redo.sql  
  24.   
  25. STATISTIC# USERNAME                       NAME                      VALUE  
  26. ---------- ------------------------------ -------------------- ----------  
  27.        178 YUE                            redo size               8725596  

再來看一下非歸檔模式下:

[sql] view plaincopyprint?
  1. SQL> @redo.sql  
  2.   
  3. STATISTIC# USERNAME                       NAME                      VALUE  
  4. ---------- ------------------------------ -------------------- ----------  
  5.        178 YUE                            redo size                  1392  
  6.   
  7. SQL> create table t4 as select * from t1;  
  8.   
  9. Table created.  
  10.   
  11. SQL> @redo.sql  
  12.   
  13. STATISTIC# USERNAME                       NAME                      VALUE  
  14. ---------- ------------------------------ -------------------- ----------  
  15.        178 YUE                            redo size                191000  
  16.   
  17. SQL> create table t5 nologging as select * from t1;  
  18.   
  19. Table created.  
  20.   
  21. SQL> @redo.sql  
  22.   
  23. STATISTIC# USERNAME                       NAME                      VALUE  
  24. ---------- ------------------------------ -------------------- ----------  
  25.        178 YUE                            redo size                297176  

由此可見,在非歸檔模式下,對於上述操作,oracle不管nologging是否指定,都盡量不產生redo。


那麼,上面所有的可以nologging的操作具有什麼共性那?

本人,認為,所有這些操作都是產生新的資料區塊或者直接覆蓋老資料區塊的所有內容,例如 insert append操作,是在高水位線上直接插入資料。這也就解釋了為什麼insert append操作對應的index會產生redo,因為對index的修改即不是建立塊也不是覆蓋老塊的所有內容。

DML操作在nologging模式下之所以組建記錄檔,是因為dml操作的不一定是新塊或者覆蓋老塊所有內容。而對lob的dml可以不產生redo,是因為lob的dml操作始終是在新塊上儲存編輯後資料。

ORACLE NOLOGGING研究

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.