if scp -P 2222 $bz_file root\@192.168.40.47:/hkcdr/ >/dev/null 2>>$errlogfile;then
mv $bz_file /opt/get_hkcdr/bak/
echo `get_time` "success to copy $bz_file to remote! " >>$logfile
else
echo `get_time` "fail to copy $bz_file to remote, please read $errlogfile to get detail" >>$logfile
exit 1
fi
此定时任务00:15执行,然后在北京库上部署入库定时任务,00:30执行:
#!/bin/bash
# Writed by Weikle in Dec., 2015, import cdr files to beijing bss db in /hkcdr
#
db_name=("globallink_g" "globallink_k" "globallink_ey" "globallink_y")
logfile="/hkcdr/import_hkcdr.log"
errlogfile="/hkcdr/import_hkcdr_error.log"
这种情况就复杂一些,需要在主表建立触发器,将主表上的DML语句单独存到一个表里去。
触发器片段如下:
create or replace trigger simm_trigger after insert or update or delete on uprg_simm_h_f_master for each row
declare
v_log varchar2(500):= '';
errcode number;
errmsg varchar2(100);
--output_file utl_file.file_type;
begin
--output_file := utl_file.fopen ('RWDIR','simmr_sync.sql', 'A');
if inserting then
v_log :='insert into uprg_simm_h_f_master values('
||''''||:new.imsi_h||''''||','
||''''||:new.msisdn_h||''''||','
||'null'||','
||''''||:new.msisdn_f||''''||','
||:new.status||','
||:new.sendout||','
||''''||:new.instance_name||''''||','
||'to_date('||''''||to_char(:new.last_modified_dat,'YYYY-MM-DD HH24-MI-SS')||''''||','||''''||'YYYY-MM-DD HH24-MI-SS'||''''||')'||','
||:new.networkid||','
||''''||:new.mcc||''''||','
||''''||:new.mnc||''''||','
||''''||:new.instance_gt||''''||','
||''''||:new.product_name||''''||')'||';' ;
......
end if;
--utl_file.put_line (output_file, v_log);
--UTL_FILE.FCLOSE(output_file);
--create table simmr_sync(sql varchar2(500),sync_time date);
insert into simmr_sync values(v_log,sysdate);
exception
when others then
errcode:=sqlcode;
errmsg:=sqlerrm(sqlcode);--sqlerrm(100) means'ORA-1403:no data found',error code is +100
insert into simmr_sync_err values(errcode,errmsg,sysdate);
end;
此时,将主表的DML存入了simmr_sync表,如下:
同样,这里每个小时同步一次,比如每个小时的10分将其scp至从库,然后从库每个小时的15分入库,
入库脚本片段如下:
ls -rt /u01/simmr_sync/*.sql|while read aa;do
/u01/app/oracle/product/11.2.0/bin/sqlplus -s 'rwuser/xxxxxx@RWDB' <<EOF >$db_result
set FEEDBACK off
set TERM on
set TRIM on
set TRIMS on
set linesize 500
set pagesize 0
set heading off
@$aa
EOF
if grep "ORA-" $db_result >/dev/null 2>&1;then
echo -e "fail to import $aa:sqlplus or sql execution error at `date '+%Y-%m-%d %H:%M:%S'`\n" >>$logfile
cat $db_result >>$logfile
mv $aa "$aa".err
exit 1
else
mv $aa "$aa".bak
echo -e "success to import $aa at `date '+%Y-%m-%d %H:%M:%S'`\n" >>$logfile
find /u01/simmr_sync -name "*.bak" -mtime 1 -exec rm {} \;
fi
done
else
echo -e "no file to import at `date '+%Y-%m-%d %H:%M:%S'`\n" >>$logfile
fi