#!/bin/bash -xv
# 从SQL Server 同期数据到Postgres
export PATH=/home/SMART_TRIAL:/home/SMART:/usr/local/bin:/${PATH}
export LANG=ja_JP.UTF-8
>マスタファイル開く
#1.SQLIP
#2.SQLDB名
#3.SQLUserGroup(dbo)
#4.SQLテーブル名
#5.SQL接続ユーザー名
#6.SQL接続パスワード
#7.日付列
cat /tmp/baihen/tablelist_kanzen | head -n 2 |
while read svip dbname ugp tname user pwd cols;
do
>Step1.SQLからデータ抽出
# echo "select * from "${tname}" with (nolock)" |
# java -jar /home/SMART_TRIAL/jd2s.jar -s${svip}:${dbname}:${user}:${pwd} -q- >/tmp/baihen/table_${tname}
# deom: echo "select top 10 * from M_DATE " | java -jar /home/SMART_TRIAL/jd2s.jar -s172.17.254.213:dbcyber:sa:1234 -q- >/tmp/M_DATE
echo "select * from dbcyber.dbo.NaFuDaPrintHistory where CONVERT(CHAR(8), registered, 112) = 20170208" | java -jar /home/SMART_TRIAL/jd2s.jar -s10.100.2.118:dbcyber:sa:dbadmin -q- >/tmp/10.100.2.118
>Step2.日付列の特殊処理
cp /tmp/baihen/table_${tname} /tmp/baihen/table_${tname}_tmp
if [ $cols != "0" ] ; then
echo ${cols} | sed s/_/ /g | tov |
while read num ; do
echo ${num}
#cat /tmp/baihen/table_${tname}_tmp | awk $"${num}"=($"${num}"=="19000101000000"?"_":substr($"${num}",1,4)"/"substr($"${num}",5,2)"/"substr($"${num}",7,2)"_"substr($"${num}",9,2)":"substr($"${num}",11,2)":"substr($"${num}",13,2)) >/tmp/baihen/tmp
cat /tmp/baihen/table_${tname}_tmp | awk $"${num}"=substr($"${num}",1,4)"/"substr($"${num}",5,2)"/"substr($"${num}",7,2)"_"substr($"${num}",9,2)":"substr($"${num}",11,2)":"substr($"${num}",13,2) >/tmp/baihen/tmp
mv /tmp/baihen/tmp /tmp/baihen/table_${tname}_tmp
done
fi
>Step3.そのた処理
cat /tmp/baihen/table_${tname}_tmp | sed s/ /,/g;s/_/ /g;s/, ,/,\\N,/g;s/, ,/,\\N,/g;s/, /,\\N/g | gzip -cf >table_${tname}.gz
rm /tmp/baihen/table_${tname}_tmp
>Step4.処理後のPostgreへINPUTのファイルをPostgreサーバーへ送付(圧縮ファイルで送付してから解凍)
scp table_${tname}.gz root@10.100.2.90:/tmp/data
ssh -n root@10.100.2.90 "gunzip /tmp/data/table_${tname}.gz"
>Step5.Postgreへ投入対象テーブルクリアして、データ投入
ssh -n root@10.100.2.90 " /opt/postgres/9.3/bin/psql -U postgres -d ${dbname} -t -p 5432 -c \"truncate table ${tname} ; copy ${tname} from /tmp/data/table_${tname} DELIMITER ,;\""
done
exit 0
batch_SQL Server 同期数据到Postgres
最新推荐文章于 2024-09-05 08:20:30 发布