Oracle海量資料移轉之使用shell啟用多個動態並行

來源:互聯網
上載者:User

Oracle海量資料移轉之使用shell啟用多個動態並行

在Oracle資料移轉中,可能有成百上千個表,有些表很大,有些表又很小。
 如果啟用了多個並行的進程,可能會有資源分派上的問題。
 比如下面有10個表,100代表預計的時間為100分鐘。
table1  100
 table2  90
 table3  90
 table4  80
 table5  80
 table6  70
 table7  60
 table8  60
 table9  50
 table10 40

如果分為4個進程來並存執行,可能一種比較理想的方案就是
parallel1: table1,table8
 parallel2: table2,table5,table9
 parallel3: table3,table6,table9
 parallel4: table4,table7

但是在實際的執行中,可能因為表的分區,表的資料類型,表的儲存的不同,可能實際的執行時間會有很大的差別,
 可能paralle2,3,4已經執行完了,而parallel1還沒有執行完50%。
 這樣,table8就一直pending在那了。

 在這樣的情況下,可以考慮使用動態並行,就是能夠在後台啟用一些並行的進程,比如需要4個並行進程,就使用nohup啟用4個並行的進程。
 不做具體的資料操作。

parfile=par2_tab_parall.lst
 logfile=`echo $parfile|awk -F. '{print $1}`".log"
 while true
 do
 if [ -f $parfile ]
 then
    tab_exists_flag=`cat $parfile |wc -l`
    if [ ${tab_exists_flag} -eq 0 ]
      then
      sleep 5;
    elif [ ${tab_exists_flag} -gt 0 ]
      then
      tab_name=`cat $parfile`
      ksh appendata.sh $tab_name >> $logfile
      touch ${parfile}.tmp
      mv ${parfile}.tmp ${parfile}
    fi
 fi
 done

我們使用appendata.sh來類比實現資料的插入,其實不會做資料的真實插入,這是類比日誌的內容。
 
echo $1
 sqlplus -s  n1/n1 <<EOF
 set time on
 set timin on
 set pages 0
 select 'insert into '||'$1;' from dual;

select 'commit;' from dual;
 EOF
 if [ $? -eq 0 ]
 then
 echo '' >parallel1.lst
 fi


使用如下的命令來啟用一個進程,比如下面的命令啟用進程2,如果啟用其他的進程,命令類似

nohup ksh par2.sh > par2_tab_parall.log &


只需要在一個檔案中放入處理的表名即可。如果是進程2,就在par2_tab_parall.lst中放入表名,假設表為test
 par2_tab_parall.lst
 [ora11g@rac1 parallel]$ cat par2_tab_parall.lst
 test

如果放入表test,之後,就會發現第2個進程就開始處理表test了

 

test
 insert into test;

Elapsed: 00:00:00.00
 commit;

Elapsed: 00:00:00.01

再放入一個表,馬上就會發現進程開始處理表tab_test了,如果沒有表的時候,它就在後台做sleep工作。
[ora11g@rac1 parallel]$ echo tab_test > par2_tab_parall.lst

tab_test
 insert into tab_test;

Elapsed: 00:00:00.01
 commit;

Elapsed: 00:00:00.00

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

相關文章

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.