1. 程式人生 > >batch_SQL Server 同期資料到Postgres

batch_SQL Server 同期資料到Postgres


    #!/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