使用nohup运行循环脚本插入发现数据重复的问题
生活随笔
收集整理的這篇文章主要介紹了
使用nohup运行循环脚本插入发现数据重复的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在使用nohup進行循環插入的過程中,如果發現在即插入的數據不對想要重新執行的時候,僅僅kill掉nohup進程是不行的,還需要通過
v$session,v$process,v$sql查詢到其發出的SQL命令,查出spid,并kill掉這個進程才可以,否則這個sqlplus的循環會一直跑下去,如果這時再起一個nohup的循環插入
進程腳本的話,就會出現重復數據,因為兩個插入進程都在同時對數據庫的表進行操作,這樣也容易造成鎖堵塞的情況。
類似nohup執行腳本:
export ORACLE_SID=DWTH
sqlplus / as sysdba <<EOF
set feedback off
set serveroutput on
declare
v_sql varchar2(4000);
v_sqlerrm varchar2(4000);
cursor cur_tab is
?select dt.owner,dt.table_name from dba_tables dt
? ?where dt.owner in ('ODS_BUFF_KKX','SGDM','ZS_OUTPUT','NOVELL_IAS','ODS_BUFF_GJHZ','EIC','ODS_UNV','SGDW','ERPPSUSER','ODS_BUFF_JJFL','ODS_ZCQSM','EPBI_SG','ODS_BUFF_JRGK','ODS_BUFF_ZDC','ODS_BUFF_TGYERP','ODS_ZHTJ_VIEW','SGODSESA','EIC_SJZX','ODS_BUFF_CWGK','ODS_BUFF','SGDC','OWB_OWNER','SGODS_JY','SGDC_DXP','NOVELL','PSDSS_DCHK','PSDSS_YXYWGKPT','PSDSS_JLSCDDPT','DATAVIEWER','YXYQ','PSDSS_MID','OMAC','EPBI','EPBI_DXP','PSDSS_SGDC','PSDSS_BUFF_SG','PSDSS_BUFF','PSDSS_SJTS','PSDSS_BUSI','SG_EESMP')
?minus
(
?select owner,table_name from crpt_check.crpt_check_err_log
? union all
?select owner,table_name from crpt_check.crpt_check_log
);
begin
? dbms_output.enable(buffer_size=>null);
? for cur_1 in cur_tab loop
? ? begin
? ? ? dbms_output.put_line(cur_1.owner||'.'||cur_1.table_name);
? ? ? v_sql:='analyze table '||cur_1.owner||'.'||cur_1.table_name||' validate structure cascade';
? ? ? dbms_output.put_line(v_sql);
? ? ? execute immediate v_sql;
? ? ? dbms_output.put_line(cur_1.owner||'.'||cur_1.table_name||' analyzed');
? ? ? insert into crpt_check.crpt_check_log(correct_log,exec_date,owner,table_name) values (cur_1.owner||'.'||cur_1.table_name||' analyzed',sysdate,cur_1.owner,cur_1.table_name);
? ? ? commit;
? ? ? exception
? ? ? ? when others then
? ? ? ? ? v_sqlerrm:=sqlerrm;
? ? ? ? ? dbms_output.put_line('error:'||cur_1.owner||'.'||cur_1.table_name||' not analyzed,'||sqlerrm);
? ? ? ? ? insert into crpt_check.crpt_check_err_log(error_log,exec_date,owner,table_name) values ('error:'||cur_1.owner||'.'||cur_1.table_name||' not analyzed,'||v_sqlerrm,sysdate,cur_1.owner,cur_1.table_name);
? ? ? ? ? commit;
? ? end;
? end loop;
end;
/
set feedback on
set serveroutput off
quit;
EOF
echo "over"
v$session,v$process,v$sql查詢到其發出的SQL命令,查出spid,并kill掉這個進程才可以,否則這個sqlplus的循環會一直跑下去,如果這時再起一個nohup的循環插入
進程腳本的話,就會出現重復數據,因為兩個插入進程都在同時對數據庫的表進行操作,這樣也容易造成鎖堵塞的情況。
類似nohup執行腳本:
export ORACLE_SID=DWTH
sqlplus / as sysdba <<EOF
set feedback off
set serveroutput on
declare
v_sql varchar2(4000);
v_sqlerrm varchar2(4000);
cursor cur_tab is
?select dt.owner,dt.table_name from dba_tables dt
? ?where dt.owner in ('ODS_BUFF_KKX','SGDM','ZS_OUTPUT','NOVELL_IAS','ODS_BUFF_GJHZ','EIC','ODS_UNV','SGDW','ERPPSUSER','ODS_BUFF_JJFL','ODS_ZCQSM','EPBI_SG','ODS_BUFF_JRGK','ODS_BUFF_ZDC','ODS_BUFF_TGYERP','ODS_ZHTJ_VIEW','SGODSESA','EIC_SJZX','ODS_BUFF_CWGK','ODS_BUFF','SGDC','OWB_OWNER','SGODS_JY','SGDC_DXP','NOVELL','PSDSS_DCHK','PSDSS_YXYWGKPT','PSDSS_JLSCDDPT','DATAVIEWER','YXYQ','PSDSS_MID','OMAC','EPBI','EPBI_DXP','PSDSS_SGDC','PSDSS_BUFF_SG','PSDSS_BUFF','PSDSS_SJTS','PSDSS_BUSI','SG_EESMP')
?minus
(
?select owner,table_name from crpt_check.crpt_check_err_log
? union all
?select owner,table_name from crpt_check.crpt_check_log
);
begin
? dbms_output.enable(buffer_size=>null);
? for cur_1 in cur_tab loop
? ? begin
? ? ? dbms_output.put_line(cur_1.owner||'.'||cur_1.table_name);
? ? ? v_sql:='analyze table '||cur_1.owner||'.'||cur_1.table_name||' validate structure cascade';
? ? ? dbms_output.put_line(v_sql);
? ? ? execute immediate v_sql;
? ? ? dbms_output.put_line(cur_1.owner||'.'||cur_1.table_name||' analyzed');
? ? ? insert into crpt_check.crpt_check_log(correct_log,exec_date,owner,table_name) values (cur_1.owner||'.'||cur_1.table_name||' analyzed',sysdate,cur_1.owner,cur_1.table_name);
? ? ? commit;
? ? ? exception
? ? ? ? when others then
? ? ? ? ? v_sqlerrm:=sqlerrm;
? ? ? ? ? dbms_output.put_line('error:'||cur_1.owner||'.'||cur_1.table_name||' not analyzed,'||sqlerrm);
? ? ? ? ? insert into crpt_check.crpt_check_err_log(error_log,exec_date,owner,table_name) values ('error:'||cur_1.owner||'.'||cur_1.table_name||' not analyzed,'||v_sqlerrm,sysdate,cur_1.owner,cur_1.table_name);
? ? ? ? ? commit;
? ? end;
? end loop;
end;
/
set feedback on
set serveroutput off
quit;
EOF
echo "over"
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/29802484/viewspace-2128686/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/29802484/viewspace-2128686/
總結
以上是生活随笔為你收集整理的使用nohup运行循环脚本插入发现数据重复的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过sql截取查询到的数据
- 下一篇: Apriori算法及超市数据集挖掘实战