oracle 更新大批量資料變更步驟

2021-09-23 21:21:11 字數 3130 閱讀 4919

生產環境中遇到更新或者刪除大批量資料的時候,不能直接進行操作,要批量進行。

1 獲取要進行更新的資料的主鍵,

2 建立臨時表並將獲取的資料主鍵匯入到建立!

#!/bin/sh 

# created by yangql on 2011-11-23

# parameters 

## . /home/oracle/.profile

ora_user=yang

ora_passwd=yang

today=`date +"%f"`

log_file=/home/oracle/yangql/$_$.log

im_dz()

/$ora_passwd <> $log_file

select sysdate from dual;

--1.--create temp tables

create table yang.bak_da_20111123_1740 as select longid from yang.udb where 0=1;

--2.--load id need to be da with sqlldr

set define off

! nohup sqlldr yang/yang control=./yang_udb_20111123_1740.ctl direct=true log=./yang_udb_20111123_1740.$.log > sqlldr_da-of-20111123-1740.ctl.`date +%y%m%d-%h%m%s`.yql.log 2>&1 &

set define on

--3.--backup original data to temptable

select sysdate from dual;

exit;

eofreturn $? }

im_dz &&

echo -e "`date +%y%m%d-%h%m%s`: dz_20111123-1740_step1 da(data admendment) is started by yangql - success " >> $log_file||

echo -e "`date +%y%m%d-%h%m%s`: dz_20111123-1740_step1 da(data admendment) is started by yangql - fail " >> $log_file

exit 0

######################

#sqlldr 匯入的控制檔案

#load data

#infile '/home/oracle/yangql/20111123_yang_udb.csv'

#insert

#into table yang.bak_da_20111123_1740 fields terminated by 'chr(10)' (longid)

#####################

3 使用乙個過程,每隔更新1000行,commit一次並刪除備份表中的資料。

--cat > dz_20111123_1820_step3.sh

#!/bin/sh 

# created by yangql @ 2011-11-23

# parameters 

## . /home/oracle/.profile

ora_user=yang

ora_passwd=yang

today=`date +"%f"`

# log_file=/tmp/oracle/$_$_log

alert_log=/opt/oracle/admin/alisoft/bdump/alert_im1.log

dz()

/$ora_passwd <

@l_myloginu --

select sysdate from dual;

@dz_20111123_1820_step3.sql

select sysdate from dual;

exit;

eofreturn $?

}dz &&

echo -e "`date +%y%m%d-%h%m%s`: dz_20111123_1820_step2 da(data admendment) is started by yangql- success " >> $alert_log ||

echo -e "`date +%y%m%d-%h%m%s`: dz_20111123_1820_step2 da(data admendment) is started by yangql- fail " >> $alert_log

exit 0

---執行過程的指令碼:

--cat > dz_20111123_1820_step3.sql

-- created by yangql @ 2011-11-23

declare

cursor cur is

select 

longid

,rowid

from yang.bak_da_20111123_1740

-- where user_value is null

;v_count number:=0;

v_commit_count number:=0;

v_limit number :=1000;

----

v_lcl__user_value number;

v_lcl__alipay_auth number;

begin

for x in cur

loop 

v_count:=v_count+1;

dbms_output.put_line('--records updated and commited: '||v_count||' * '||v_commit_count);

end if;   

end loop;

commit;

dbms_output.put_line('--records updated and commited - last batch: '||v_count);

end;

/<>

mysql大批量更新資料

大批量的更新資料如果再使用傳統的 update 方法一條一條的更新,效率是很慢的,而且效能差,也很容易造成阻塞。1 使用mysql 自有的語句構建批量更新 update tble set price case id when 16 then 7.6 when 19 then 8.86 when 20...

Oracle資料庫更新大批量資料案例

更新大批量資料的背景 使用者需要將vip的微信標識,傳給使用者的erp會員檔案中,已知存量資料約50w行資料,線下的微信標識資料我們開發提供了openid和erpid的csv檔案,erpid和線下的會員檔案id對應,需要將openid也更新到會員檔案裡。更新數量大致分為兩大步驟 一 將我們要更新的資...

oracle中插入大批量資料

方法一 建立乙個表,並同時新增1000000條資料,create table testtable as select rownum as id,to char sysdate rownum 24 3600,yyyy mm dd hh24 mi ss as inc datetime,trunc dbm...