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


来源张永光的博客

你可能感兴趣的:(linux)