posts - 4, comments - 5, trackbacks - 0, articles - 10

          Oracle Direct-Path Insert學習筆記

          Posted on 2006-11-14 09:22 勇敢的心 閱讀(2473) 評論(0)  編輯  收藏 所屬分類: Oracle
          (1)、Oracle插入數據有兩種方式:
          a、常規插入:重新使用table中的自由空間,在已有數據中插入新數據;維護引用完整性約束。
          b、Direct-Path插入:在表中已有數據之后插入新數據;數據直接插入數據文件,繞過buffer cache;已有數據中的自由空間沒有被重新利用;忽略了引用完整性約束。
          ?
          (2)、連續模式:一個進程執行sql語句;
          ?????? 并行模式:多個進程同時執行一個sql語句,即并行執行。
          ?
          (3)Direct-Path插入的優點:
          1、可以disable redo log和undo log;而常規插入卻不可以如此,并且重用自由空間和維護引用完整性。
          2、通過CREATE TABLE...AS SELECT 語句可以從現有表中創建新表,使用Direct-Path插入可以在插入時更新定義在目標表上的任意索引。
          3、Direct-Path插入能保證事務的原子性,即使在并行模式下。使用SQL*Loader在并行模式加載中不能保證原子性。
          4、當并行Direct-Path加載發生錯誤時,索引被標志成UNUSABLE。
          5、如果想使用表壓縮的壓縮格式存儲數據,必須使用Direct-Path插入。
          ?
          ?
          (4)使用Direct-Path插入:
          ?
          在連續模式中,在Insert語句中指定“APPEND”提示,在INSERT關鍵字之后,或者在INSERT子查詢中的SELECT關鍵字之后。
          在并行DML模式中,默認的就是DIRECT-PATH插入,為了運行并行DML模式,必須滿足以下條件:
          a、必須是Oracle企業版;
          b、必須在session中使并行DML生效,執行以下sql語句:
          ALTER SESSION { ENABLE | FORCE } PARALLEL DML;
          c、必須指定table的并行屬性,在創建的時候或者其他時候,或者在insert操作時使用“PARALLEL”提示。
          ?
          為了使Direct-Path Insert模式失效,在INSERT語句中指定“NOAPPEND”提示,覆蓋并行DML模式。
          ?
          (5)、Direct-Path INSERT 是如何工作的
          ?
          在分區表和非分區表都可以使用Direct-Path INSERT
          ?
          連續Direct-Path INSERT到分區和非分區表
          ? 單個進程插入數據到高水位標志之上,當執行完commit之后,高水位標志得到更新。
          ?
          并行Direct-Path INSERT到分區表
          ? 類似于serial Direct-Path INSERT,每個并行操作分配給一個或者多個分區,每個并行操作插入數據到各自的分區段的高水位標志之上,commit之后,用戶就能看到更新的數據。
          ?
          并行Direct-Path INSERT到非分區表
          ? 每個并行執行分配一個新的臨時段,并插入數據到臨時段。當commit運行后,并行執行協調者合并新的臨時段到主表段,用戶就能看到更新的數據。
          ?
          為Direct-Path INSERT指定的Log模式
          ?? Direct-Path INSERT可以使用Log或者不使用Log。
          ?
          (6)、其他需要注意的地方:
          ??? 索引維護:Oracle在Direct-Path INSERT 操作末尾,對具有索引的表執行索引維護,這樣就避免了在drop掉索引后,再rebuild。
          ??? 使用的空間:Direct-Path INSERT比常規的插入需要更多的空間。因為它將數據插入在高水位之上。并行插入非分區表需要更多的空間,因為它需要為每一個并行創建臨時段。
          ??? 鎖:在插入期間,數據庫在表上獲得排他鎖,用戶不能在表上執行并行插入、更新或者刪除操作,并行的索引創建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結果集。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 迭部县| 建宁县| 广昌县| 伽师县| 宣武区| 白玉县| 双辽市| 沂水县| 康乐县| 吕梁市| 五常市| 合肥市| 马山县| 塔河县| 洞头县| 兴仁县| 阳西县| 富宁县| 尚义县| 绥棱县| 玛纳斯县| 朝阳县| 漳平市| 新民市| 黄骅市| 涪陵区| 黄陵县| 合川市| 舒城县| 耿马| 彭山县| 望江县| 咸阳市| 新和县| 安吉县| 洞口县| 新竹市| 克山县| 炎陵县| 洱源县| 扶风县|