使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Casperjs迴圈執行(重複執行不退出)JS
- 併發請求的重複插入問題
- 防止指令碼重複執行方法指令碼
- sql重複插入問題SQL
- 每秒迴圈插入資料
- 時間遞增迴圈執行指令碼指令碼
- linux指令碼完成重複執行的命令Linux指令碼
- C#迴圈中使用Random生成隨機數有重複問題C#random隨機
- python重複執行10次for迴圈從0到9Python
- LightDB/PostgreSQL 生成可重複執行的指令碼SQL指令碼
- 多執行緒下HashMap的死迴圈問題執行緒HashMap
- Tcl編寫迴圈執行某個任務的指令碼指令碼
- 解決hibernate雙向關係造成的一方重複執行SQl,或者死迴圈的問題SQL
- Linux後臺執行指令碼命令之nohupLinux指令碼
- nohup在後臺常駐執行php指令碼PHP指令碼
- 多執行緒 HashMap 死迴圈 問題解析執行緒HashMap
- JavaScript 深複製的迴圈引用問題JavaScript
- mysql避免插入重複資料MySql
- 資料檢視的重複問題
- 靈活運用分散式鎖解決資料重複插入問題分散式
- 編寫迴圈插入表資料的語句。
- 【基礎題】【for迴圈】二重迴圈
- Vue echarts 繫結事件重複執行問題VueEcharts事件
- 插入資料庫亂碼問題資料庫
- shell指令碼之迴圈指令碼
- MyBatis中批量插入資料,多重forEach迴圈MyBatis
- 資料插入問題。
- 使用遊標迴圈進行SQL更新插入的SQL語句SQL
- 執行 shell 指令碼 \r 問題解決指令碼
- 一個“指令碼執行夯死”問題的分析指令碼
- 指令碼迴圈基礎(2)指令碼
- shell死迴圈指令碼示例指令碼
- SQL Server 自動迴圈歸檔分割槽資料指令碼SQLServer指令碼
- 小心避坑:MySQL分頁時出現的資料重複問題MySql
- crontab不執行mysql的指令碼問題的解決!MySql指令碼
- Runloop-執行迴圈OOP
- HashMap多執行緒下發生死迴圈的原因HashMap執行緒
- MySQL order by limit 分頁資料重複問題MySqlMIT