生產環境中遇到更新或者刪除大批量資料的時候,不能直接進行操作,要批量進行。
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...