Oracle直接路徑載入

2021-06-22 22:16:12 字數 1214 閱讀 1905

**:

oracle提供兩種型別的插入語句:常規插入(conventional insert)和直接路徑插入(direct-path insert),直接路徑插入的目的是為了高效地載入大量的資料,它以犧牲部分功能為代價,因此受到很多的限制。

1. 直接路徑載入的效能

直接路徑載入把資料直接插入到要修改的段的高水位(hwm)以上,從而生成了最少量的undo(只生成資料字典的undo,不生成塊中資料的undo),且不通過快取記憶體,因此它的效能比常規插入要好。如果效能是首要目標,還可以考慮配合使用最小日誌模式(nologging)。

2. 直接路徑載入的限制

1)一張表同時只能有乙個直接路徑插入,因此不適合小資料量的插入,只適合大批量的資料載入;

2)在hwm下的空閒空間不會被利用;

3)一張表在做直接路徑插入的同時,同一會話不能對其做任何操作(select都不可以);

4)只有insert inot ... select ... 語句、merge語句和使用oci直接路徑介面的應用程式才可以使用。

3. 直接路徑載入的使用方法

2)並行地執行sql語句。

4. ora-12938錯誤

如果直接路徑載入的事務未提交或回滾,則同乙個會話無法訪問被修改的表(報ora-12838: cannot read/modify an object after modifying it in parallel),非同乙個會話可以訪問。

實驗如下:

24872 rows created.

sql>select count(*) from test;

select count(*) from test

*error at line 1:

ora-12838: cannot read/modify an object after modifying it in parallel

sql>commit;

commit complete.

sql>select count(*) from test;

count(*)

----------

49744

--參考:

1)oracle效能診斷藝術 11.4節

2)ask tom "disable/enable indexes every day"  --

ORACLE直接路徑操作

總結 直接路徑插入直接在高水位線以外分配空間,繞過了資料緩衝區,直接將資料插入進表所在資料檔案中。直接路徑插入不產生redo 資料庫處於noarchivelog模式下插入或者nologging屬性的 上插入 和undo log,依賴高水點實現回滾。資料庫日誌模式 直接路徑插入結束的時候oracle會...

Oracle 直接路徑讀

sql view plain copy print?在11g中,全表掃瞄可能使用direct path read方式,繞過buffer cache,這樣的全表掃瞄就是物理讀了。在10g中,都是通過gc buffer來讀的,所以不存在direct path read的問題。direct path re...

ORACLE直接路徑操作

總結 直接路徑插入直接在高水位線以外分配空間,繞過了資料緩衝區,直接將資料插入進表所在資料檔案中。直接路徑插入不產生redo 資料庫處於noarchivelog模式下插入或者nologging屬性的 上插入 和undo log,依賴高水點實現回滾。資料庫日誌模式 直接路徑插入結束的時候oracle會...