日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle / parallle /,Oracle海量数据迁移之使用shell启用多个动态并行

發(fā)布時間:2024/8/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle / parallle /,Oracle海量数据迁移之使用shell启用多个动态并行 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在Oracle數(shù)據(jù)遷移中,可能有成百上千個表,有些表很大,有些表又很

在Oracle數(shù)據(jù)遷移中,可能有成百上千個表,有些表很大,有些表又很小。

如果啟用了多個并行的進程,可能會有資源分配上的問題。

比如下面有10個表,100代表預計的時間為100分鐘。

table1 100

table2 90

table3 90

table4 80

table5 80

table6 70

table7 60

table8 60

table9 50

table10 40

如果分為4個進程來并行執(zhí)行,可能一種比較理想的方案就是

parallel1: table1,table8

parallel2: table2,table5,table9

parallel3: table3,table6,table9

parallel4: table4,table7

但是在實際的執(zhí)行中,可能因為表的分區(qū),表的數(shù)據(jù)類型,,表的存儲的不同,可能實際的執(zhí)行時間會有很大的差別,

可能paralle2,3,4已經(jīng)執(zhí)行完了,而parallel1還沒有執(zhí)行完50%。

這樣,table8就一直pending在那了。

在這樣的情況下,可以考慮使用動態(tài)并行,就是能夠在后臺啟用一些并行的進程,比如需要4個并行進程,就使用nohup啟用4個并行的進程。

不做具體的數(shù)據(jù)操作。

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來模擬實現(xiàn)數(shù)據(jù)的插入,其實不會做數(shù)據(jù)的真實插入,這是模擬日志的內(nèi)容。

echo $1

sqlplus -s n1/n1 < 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,之后,就會發(fā)現(xiàn)第2個進程就開始處理表test了

test

insert into test;

Elapsed: 00:00:00.00

commit;

Elapsed: 00:00:00.01

再放入一個表,馬上就會發(fā)現(xiàn)進程開始處理表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

本文永久更新鏈接地址:

本條技術文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權益請點擊此處反饋版權投訴 本文系統(tǒng)來源:php中文網(wǎng)

總結

以上是生活随笔為你收集整理的oracle / parallle /,Oracle海量数据迁移之使用shell启用多个动态并行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。