分類: 程式天下
Oracle SQL*Loader loads 145萬筆資料
本來這次處理公司的問題是要用Perl解決,但因為需要一次性的更新145萬筆左右的資料,目標資料表的資料量那是好幾個億筆,而且隨時都在異動中,又加上是線上系統.如果真的使用Perl讀CSV檔後,再一筆一筆的更新資料,真不知道要處理多久.所以在寫了一些的測試程式發現效能太差後,就決定改用SQL指令來批量處理.
第一件要做的事就是把外部檔案匯入到資料庫,需要使用sqlldr指令來完成
sqlldr CONTROL= sqlldr_load_data.ctl LOG= sqlldr_load_data.ctl.log
Oracle批量操作 forall ,BULK COLLECT
原文網址: https://www.itread01.com/content/1547978430.html
oracle forall
FORALL語句的一個關鍵性改進,它可大大簡化程式碼,並且對於那些要在PL/SQL程式中更新很多行資料的程式來說,它可顯著提高其效能。
1:
用FORALL來增強DML的處理能力
Oracle為Oracle8i中的PL/SQL引入了兩個新的資料操縱語言(DML)語句:BULK COLLECT和FORALL。這兩個語句在PL/SQL內部進行一種陣列處理
;BULK COLLECT提供對資料的高速檢索,FORALL可大大改進INSERT、UPDATE和DELETE操作的效能。Oracle資料庫使用這些語句大大減少了
PL/SQL與SQL語句執行引擎的環境切換次數,從而使其效能有了顯著提高。
Oracle中如何更新一張大表記錄
2015/06/03 來源:ITPUB
原文網址:https://read01.com/BnK7jG.html
SQL語句是一種方便的語言,同樣也是一種「迷惑性」的語言。這個主要體現在它的集合操作特性上。無論數據表數據量是1條,還是1億條,更新的語句都是完全相同。但是,實際執行結果(或者能否出現結果)卻是有很大的差異。
筆者在開發DBA領域的一個理念是:作為開發人員,對資料庫、對數據要有敬畏之心,一個語句發出之前,起碼要考慮兩個問題:目標數據表的總數據量是多少(投產之後)?你這個操作會涉及到多大的數據量?不同的回答,處理的方案其實是不同的。
快讓人發瘋的 Perl !!
好久沒寫 perl 程式了,因為工做上的需要,只能重拾古老的記憶,寫吧!手邊雖然有一些範例,但因為是在IBM的AIX上要跑Oracle的資料,故是使用 Accessing the Oracle Database with Perl.
#!/oracle/db/perl/bin/perl
use Oraperl;
$progCode = $0; $progCode =~ s/^.+\\|^.+\/|\.pl//g;
$olHa = &ora_login('','/','') || die "err:$ora_errstr";
@result = &AP_PROGRAM(@ARGV); &ora_logoff($olHa);
&print_prog_log("$result[0]");
