效率较高的Oracle数据库之间数据同步(非dblink)
2015-07-12 12:09
477 查看
在Oracle数据库之间不能建立数据链路情况下,该代码用于数据库之间数据同步。 操作系统环境:AIX
#!/usr/bin/bash #created by lubinsu #2015 source ~/.bash_profile echo "读取配置信息" connectstr=`cat ${etl_dispatch}/db_constr.txt` proc_id=$1 l_date=$2 data_dir="/int_file/lubinsu/etl_data" log_path=${etl_dispatch}/etl_log/${l_date}_db_2_db_$$.log base_info=`${etl_dispatch}/get_info_from_db.sh "${connectstr}" "SELECT s.src_db, s.target_db, s.target_tb FROM shell_proc_db_2_db_cfg s WHERE s.proc_id = ${proc_id};"` #get infos src_db=`echo ${base_info} | awk '{print $1}'` target_db=`echo ${base_info} | awk '{print $2}'` target_tb=`echo ${base_info} | awk '{print $3}'` field_list=`${etl_dispatch}/get_info_from_db.sh "${connectstr}" "SELECT NVL(s.field_list,field_list_auto) FROM shell_proc_db_2_db_cfg s WHERE s.proc_id = ${proc_id};"` echo "${field_list}" > ${data_dir}_${target_tb}_${l_date}$$ ${etl_dispatch}/clearspace.sh ${data_dir}_${target_tb}_${l_date}$$ field_list=`cat ${data_dir}_${target_tb}_${l_date}$$` rm -f ${data_dir}_${target_tb}_${l_date}$$ ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "INSERT INTO shell_proc_db_2_db_log(proc_id, run_msg, status) VALUES(${proc_id},to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 读取数据抽取语句', '2');" src_sql=`${etl_dispatch}/get_info_from_db.sh "${connectstr}" "SELECT s.src_sql FROM shell_proc_db_2_db_cfg s WHERE s.proc_id = ${proc_id};"` echo ${src_sql} > ${data_dir}/$$.sql src_db_connectstr=`sed -n /${src_db}=/p ${etl_dispatch}/connectorCfg | awk -F= '{print $2}'` ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 获取源数据库信息' WHERE o.proc_id = ${proc_id};" echo "${etl_dispatch}|${src_db_connectstr}|${data_dir}/$$.dat|${data_dir}/$$.sql" >> ${log_path} ${etl_dispatch}/sqluldr2_aix64_9208.bin USER=${src_db_connectstr} sql=${data_dir}/$$.sql head=no FILE=${data_dir}/$$.dat field='^' log=${etl_dispatch}/etl_log/${l_date}_db_2_db_$$.log if [ $? -eq '0' ] then ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 生成数据文件' WHERE o.proc_id = ${proc_id};" else ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.status = 3, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 数据文件生成出错' WHERE o.proc_id = ${proc_id};" exit 1 fi echo "unrecoverable" > ${data_dir}/$$.ctl echo "load data" >> ${data_dir}/$$.ctl echo "CHARACTERSET ZHS16GBK" >> ${data_dir}/$$.ctl echo "infile '${data_dir}/$$.dat'">> ${data_dir}/$$.ctl echo "INTO TABLE ${target_tb}" >> ${data_dir}/$$.ctl echo "TRUNCATE" >> ${data_dir}/$$.ctl echo "fields terminated by '^'" >> ${data_dir}/$$.ctl echo "trailing nullcols" >> ${data_dir}/$$.ctl echo "(" >> ${data_dir}/$$.ctl echo ${field_list} >> ${data_dir}/$$.ctl echo ")" >> ${data_dir}/$$.ctl ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 生成控制文件完成' WHERE o.proc_id = ${proc_id};" target_db_connectstr=`sed -n /${target_db}=/p ${etl_dispatch}/connectorCfg | awk -F= '{print $2}'` sqlldr ${target_db_connectstr} control=${data_dir}/$$.ctl log=${etl_dispatch}/etl_log/${l_date}_db_2_db_$$.log direct=y if [ $? -eq '0' ] then ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.status = 0, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' 目标数据抽取完成' WHERE o.proc_id = ${proc_id};" else ${etl_dispatch}/get_info_from_db.sh "${connectstr}" "UPDATE shell_proc_db_2_db_log o SET o.modify_dt = SYSDATE, o.status = 3, o.run_msg = o.run_msg || CHR(13) || to_char(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') || ' SQLLDR数据入库出错' WHERE o.proc_id = ${proc_id};" fi rm ${data_dir}/$$.dat rm ${data_dir}/$$.ctl
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android wifi 无线调试
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- AIX mount: 0506-351 错误处理
- 数据库链接字符串查询网站
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- Linux Shell常用技巧
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- DB2实例管理
- DB2实例管理