1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      oracle怎么批量送審 oracle 批量提交

      oracle批量提交的問(wèn)題

      兩種方式實(shí)現(xiàn)oracle批量提交

      創(chuàng)新互聯(lián)建站專(zhuān)注于羅田企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。羅田網(wǎng)站建設(shè)公司,為羅田等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

      方式一:利用 fetch .. bulk collect into .. limit limitnumber;--limitnumber批量提交條數(shù)

      declare Cursor dataCursors

      is

      /*定義游標(biāo)*/

      ;

      type dataCursor is table of tablename%rowtype;

      dataCursorP dataCursor;

      begin

      open dataCursors;

      while (true) loop

      fetch dataCursors bulk collect into dataCursorP limit 50;

      forall i in 1 .. dataCursorP.count

      insert into tablename values dataCursorP(i);

      commit;

      exit when dataCursors%notfound;

      end loop;

      close dataCursors;

      end;

      方式二:自己實(shí)現(xiàn)批量提交功能

      實(shí)現(xiàn)原理:定義一個(gè)number類(lèi)型的記錄數(shù),游標(biāo)循環(huán)過(guò)程中記錄數(shù)自增1,利用mod判斷如果是否整除,整除就提交。

      declare executenum:=0;

      declare Cursor dataCursors

      is

      /*定義游標(biāo)*/

      ;

      dataCursor dataCursors%rowtype;

      begin

      for dataCursor in dataCursors

      loop

      executenum:=executenum+1;

      /*update,insert or delete 等操作 */

      if mod(executenum,50)=0 --這里設(shè)置50條一提交

      then commit;

      end if;

      end loop;

      commit;--最后提交一次,因?yàn)橛锌赡茏詈蟛皇?0的整數(shù)

      end;

      --executenum還可以記錄操作的條數(shù),

      Oracle存儲(chǔ)過(guò)程,更新大量數(shù)據(jù),如何循環(huán)分批次提交?

      可通過(guò)以下方法:

      以100條數(shù)據(jù)為例,如果海量數(shù)據(jù)可參考。

      如test表中有如下數(shù)據(jù):

      現(xiàn)要將begintime改成當(dāng)前時(shí)間,每10條提交一次。

      可用如下存儲(chǔ)過(guò)程:

      declare?

      i?int;--定義變量

      v_count?int;--定義變量

      v_loop?int;--定義變量

      begin

      select?count(*)?into?v_count?from?test;--計(jì)算表內(nèi)數(shù)據(jù)總數(shù)

      select?ceil(v_count/10)?into?v_loop?from?dual;--計(jì)算需要循環(huán)次數(shù)

      i:=1;--為i賦值

      while?i=v_loop?loop--循環(huán)退出條件

      update?test?set?begintime=sysdate?where?begintime?is?null?and?rownum=10;--執(zhí)行更新

      commit;--提交

      i:=i+1;--i依次加1

      end?loop;--結(jié)束循環(huán)

      end;

      如何加速Oracle大批量數(shù)據(jù)處理?

      一、 提高DML操作的辦法:\x0d\x0a簡(jiǎn)單說(shuō)來(lái):\x0d\x0a1、暫停索引,更新后恢復(fù).避免在更新的過(guò)程中涉及到索引的重建.\x0d\x0a2、批量更新,每更新一些記錄后及時(shí)進(jìn)行提交動(dòng)作.避免大量占用回滾段和或臨時(shí)表空間.\x0d\x0a3、創(chuàng)建一臨時(shí)的大的表空間用來(lái)應(yīng)對(duì)這些更新動(dòng)作.\x0d\x0a\x0d\x0a4、批量更新,每更新一些記錄后及時(shí)進(jìn)行提交動(dòng)作.避免大量占用回滾段和或臨時(shí)表空間.\x0d\x0a\x0d\x0a5、創(chuàng)建一臨時(shí)的大的表空間用來(lái)應(yīng)對(duì)這些更新動(dòng)作.\x0d\x0a\x0d\x0a6、加大排序緩沖區(qū)\x0d\x0a alter session set sort_area_size=100000000;\x0d\x0a insert into tableb select * from tablea;\x0d\x0a commit;\x0d\x0a\x0d\x0a如果UPDATE的是索引字段,就會(huì)涉及到索引的重建,暫停索引不會(huì)提高多少的速度,反而有可能降低UPDATE速度,\x0d\x0a因?yàn)樵诟率撬饕梢蕴岣邤?shù)據(jù)的查詢速度,重建索引引起的速度降低影響不大。\x0d\x0a\x0d\x0aORACLE優(yōu)化修改參數(shù)最多也只能把性能提高15%,大部分都是SQL語(yǔ)句的優(yōu)化!\x0d\x0a\x0d\x0aupdate總體來(lái)說(shuō)比insert要慢 :\x0d\x0a幾點(diǎn)建議: \x0d\x0a 1、如果更新的數(shù)據(jù)量接近整個(gè)表,就不應(yīng)該使用index而應(yīng)該采用全表掃描 \x0d\x0a 2、減少不必要的index,因?yàn)閡pdate表通常需要update index \x0d\x0a 3、如果你的服務(wù)器有多個(gè)cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a 另外,建表的參數(shù)非常重要,對(duì)于更新非常頻繁的表,建議加大PCTFREE的值,以保證數(shù)據(jù)塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。 \x0d\x0a\x0d\x0a二、 各種批量DML操作:\x0d\x0a(1)、oracle批量拷貝:\x0d\x0aset arraysize 20\x0d\x0a set copycommit 5000\x0d\x0a copy from username/password@oraclename append table_name1\x0d\x0a using select * from table_name2;\x0d\x0a (2)、常規(guī)插入方式:\x0d\x0a insert into t1 select * from t;\x0d\x0a 為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0ainsert into t1 select * from t;\x0d\x0acommit;\x0d\x0a (3)、CTAS方式:\x0d\x0a create table t1\x0d\x0aas\x0d\x0aselect * from t;\x0d\x0a為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志,并且可以制定并行度:\x0d\x0acreate table t1 nologging parallel(degree 2) as select * from t;\x0d\x0a (4)、Direct-Path插入:\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a commit;\x0d\x0a 為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a \x0d\x0a Direct-Path插入特點(diǎn):\x0d\x0a1、 append只在insert ? select ?中起作用,像insert /*+ append */ into t values(?)這類(lèi)的語(yǔ)句是不起作用的。在update、delete操作中,append也不起作用。\x0d\x0a2、 Direct-Path會(huì)使數(shù)據(jù)庫(kù)不記錄直接路徑導(dǎo)入的數(shù)據(jù)的重做日志,會(huì)對(duì)恢復(fù)帶來(lái)麻煩。\x0d\x0a3、 Direct-Path直接在表段的高水位線以上的空白數(shù)據(jù)塊中寫(xiě)數(shù)據(jù),不會(huì)重用高水位線以下的空間,會(huì)對(duì)空間的使用造成一定的浪費(fèi),對(duì)查詢的性能也會(huì)造成一定的影響。而常規(guī)插入會(huì)優(yōu)先考慮使用高水位線之下有空閑空間存在的數(shù)據(jù)塊。因此理論上Direct-Path插入會(huì)比常規(guī)插入速度更快,因?yàn)镈irect-Path直接使用新數(shù)據(jù)塊,而常規(guī)插入要遍歷freelist獲取可用空閑數(shù)據(jù)塊,如果同 nologging 配合,這種速度優(yōu)勢(shì)會(huì)更加明顯。\x0d\x0a4、 以append方式插入記錄后,要執(zhí)行commit,才能對(duì)表進(jìn)行查詢。否則會(huì)出現(xiàn)錯(cuò)誤:ORA-12838: 無(wú)法在并行模式下修改之后讀/修改對(duì)象。\x0d\x0a5、 用append導(dǎo)入數(shù)據(jù)后,如果沒(méi)有提交或者回滾,在其他會(huì)話中任何對(duì)該表的DML都會(huì)被阻塞(不會(huì)報(bào)錯(cuò)),但對(duì)該表的查詢可以正常執(zhí)行。\x0d\x0a6、 在歸檔模式下,要把表設(shè)置為nologging,然后以append方式批量添加記錄,才會(huì)顯著減少redo數(shù)量。在非歸檔模式下,不必設(shè)置表的 nologging屬性,即可減少redo數(shù)量。如果表上有索引,則append方式批量添加記錄,不會(huì)減少索引上產(chǎn)生的redo數(shù)量,索引上的redo 數(shù)量可能比表的redo數(shù)量還要大。\x0d\x0a7、 數(shù)據(jù)直接插入數(shù)據(jù)文件,繞過(guò)buffer cache并且忽略了引用完整性約束。\x0d\x0a8、 不管表是否在nologging 下,只要是 direct insert,就不會(huì)對(duì)數(shù)據(jù)內(nèi)容生成undo。\x0d\x0a9、 Oracle在Direct-Path INSERT 操作末尾,對(duì)具有索引的表執(zhí)行索引維護(hù),這樣就避免了在drop掉索引后,再rebuild。\x0d\x0a10、 Direct-Path INSERT比常規(guī)的插入需要更多的空間。因?yàn)樗鼘?shù)據(jù)插入在高水位之上。并行插入非分區(qū)表需要更多的空間,因?yàn)樗枰獮槊恳粋€(gè)并行線程創(chuàng)建臨時(shí)段。\x0d\x0a11、 在插入期間,數(shù)據(jù)庫(kù)在表上獲得排他鎖,用戶不能在表上執(zhí)行并行插入、更新或者刪除操作,并行的索引創(chuàng)建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結(jié)果集。\x0d\x0a (5)、并行DML:\x0d\x0a 如果你的服務(wù)器有多個(gè)cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a ALTER SESSION ENABLE PARALLEL DML;\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA \x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0a 為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志:\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGING\x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0aoracle默認(rèn)并不會(huì)打開(kāi)PDML,對(duì)DML語(yǔ)句必須手工啟用。即需要執(zhí)行\(zhòng)x0d\x0aalter table enable parallel dml命令。\x0d\x0a \x0d\x0a并行DML特點(diǎn):\x0d\x0a1、在并行DML模式中,默認(rèn)的就是DIRECT-PATH插入,為了運(yùn)行并行DML模式,必須滿足以下條件:\x0d\x0aa、必須是Oracle企業(yè)版;\x0d\x0ab、必須在session中使并行DML生效,執(zhí)行以下sql語(yǔ)句:\x0d\x0aALTER SESSION { ENABLE | FORCE } PARALLEL DML;\x0d\x0ac、必須指定table的并行屬性,在創(chuàng)建的時(shí)候或者其他時(shí)候,或者在insert操作時(shí)使用“PARALLEL”提示。\x0d\x0ad、為了使Direct-Path Insert模式失效,在INSERT語(yǔ)句中指定“NOAPPEND”提示,覆蓋并行DML模式。\x0d\x0a 2、并行Direct-Path INSERT到分區(qū)表:\x0d\x0a 類(lèi)似于serial Direct-Path INSERT,每個(gè)并行操作分配給一個(gè)或者多個(gè)分區(qū),每個(gè)并行操作插入數(shù)據(jù)到各自的分區(qū)段的高水位標(biāo)志之上,commit之后,用戶就能看到更新的數(shù)據(jù)。\x0d\x0a 3、并行Direct-Path INSERT到非分區(qū)表:\x0d\x0a 每個(gè)并行執(zhí)行分配一個(gè)新的臨時(shí)段,并插入數(shù)據(jù)到臨時(shí)段。當(dāng)commit運(yùn)行后,并行執(zhí)行協(xié)調(diào)者合并新的臨時(shí)段到主表段,用戶就能看到更新的數(shù)據(jù)。\x0d\x0a 4、Direct-Path INSERT可以使用Log或者不使用Log。\x0d\x0a 5、另外不得不說(shuō)的是,并行不是一個(gè)可擴(kuò)展的特性,只有在數(shù)據(jù)倉(cāng)庫(kù)或作為DBA等少數(shù)人的工具在批量數(shù)據(jù)操作時(shí)利于充分利用資源,而在OLTP環(huán)境下使用并行需要非常謹(jǐn)慎。事實(shí)上PDML還是有比較多的限制的,例如不支持觸發(fā)器,引用約束,高級(jí)復(fù)制和分布式事務(wù)等特性,同時(shí)也會(huì)帶來(lái)額外的空間占用,PDDL同 樣是如此。

      你好,我有個(gè)問(wèn)題想請(qǐng)教您一下,oracle 怎樣用limit批量(比如每5000行提

      declare

      n number:=0;

      begin

      for a in (select * from 表名1 ) loop

      insert into 表名1 select 字段名 from 表名2 where col=a.col ;

      n:=n+1;

      if mod(n,5000)= 0 then

      commit;

      end if;

      end loop;

      comimt;

      end;

      /

      2、如果是imp 導(dǎo)入的話,加commit=y 這個(gè)參數(shù)就可以。


      當(dāng)前名稱:oracle怎么批量送審 oracle 批量提交
      當(dāng)前網(wǎng)址:http://www.ef60e0e.cn/article/hidcjg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        睢宁县| 云浮市| 河北区| 蒙城县| 西平县| 墨竹工卡县| 铁岭县| 临沂市| 河池市| 蕲春县| 岑巩县| 沧源| 沂南县| 南木林县| 班戈县| 汉中市| 荆门市| 武安市| 青海省| 南陵县| 酉阳| 益阳市| 汉沽区| 封开县| 西林县| 阳谷县| 绥棱县| 五指山市| 静安区| 博爱县| 彰武县| 化隆| 伊金霍洛旗| 太和县| 兴城市| 双城市| 邢台县| 屯门区| 定边县| 通州区| 三原县|