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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

oracle并发执行max,跪求大量并发执行insert into select语句的方案

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle并发执行max,跪求大量并发执行insert into select语句的方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在有數十萬張表要從A庫通過insert into tablename select * from tablename@dblink的方式導入到B庫中。

B機上80個cpu,160G內存。希望能夠大量并發執行。怎么寫腳本呢?

誰有這方面的經驗,麻煩指點一下。謝謝。

下面是我的腳本:

#!/usr/bin/sh

#最大進程數

v_max_session="310"

#進程計數器,用來計算當前正在執行的進程數量

v_session_counter=0

v_pipe_name=""

v_log_name=""

v_table_owner=""

v_table_name=""

v_part_name=""

v_param_file="list_table.txt"

f_insert_data()

{

sqlplus -s ${v_dest_tns} << EOF

set timing on time on autocommit on

prompt truncate table ...

declare

v_sql varchar2(300);

begin

begin

v_sql :='truncate table ${v_table_owner}.${v_table_name} reuse storage';

execute immediate v_sql;

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'truncate successfull',v_sql);

commit;

exception when others then

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'fail successfull',v_sql);

commit;

end;

begin

v_sql :='insert /*+ append */ into ${v_table_owner}.${v_table_name} nologging select * from??${v_table_owner}.${v_table_name}@JLDM';

execute immediate v_sql;

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'insert successfull',v_sql);

exception when others then

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'insert fail',v_sql);

commit;

end;

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'truncate successfull',v_sql);

exception when others then

insert into trunlog values ('${v_table_owner}','${v_table_name}','',sysdate,'fail','');

commit;

end;

/

exit;

EOF

}

while read v_table_owner v_table_name v_part_name

do

while [??$v_session_counter -ge $v_max_session ]

do

echo ". \c"

sleep 1

v_session_counter=0

ps -ef | grep -v grep | grep sqlplus | wc -l | read v_session_counter

done

f_insert_data

v_session_counter=0

ps -ef | grep -v grep | grep imp | wc -l | read v_session_counter

echo "session counter: ${v_session_counter}"

done

list_table.txt里面的內容如下:

JLCRM DW_NEWBUSI_SVC_MM_439 DW_NEWBUSI_SVC_MM200508

PARAM DIM_STAT_SP_TMP NULL

JLCRM DW_IMEI_USER_MM_431 DW_IMEI_USER_MM200509

DM DM_SMS_BASE_437_20090816 NULL

JLCRM DW_IMEI_USER_MM_432 DW_IMEI_USER_MM200509

DM DM_OWE_BASE_439_20090816 NULL

JLCRM DW_IMEI_USER_MM_433 DW_IMEI_USER_MM200509

DM DM_SMS_BASE_438_20090816 NULL

JLCRM DW_IMEI_USER_MM_434 DW_IMEI_USER_MM200509

第一列是用戶名,第二列是表名,第三列是分區名。

我要實現的功能是,并發度300個。一起做insert into select 操作。

但我運行時發現,不能并發。每次只有一個insert操作。

麻煩有經驗的朋友幫忙看看,改一下。謝謝。

總結

以上是生活随笔為你收集整理的oracle并发执行max,跪求大量并发执行insert into select语句的方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。