sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...
需求:A服務器會定時生成一個CSV文件,B服務器從A服務器下載下來,并存入到B服務器的oracle數據庫的某表中。
分析:1.數據同步上傳和下載可以使用ftp的方式,當然也有其他方式。
2.數據存到本地后可以使用oracle自帶的sqloader來加載文件到數據庫中。
也可以選擇dblink,網上說效率沒這個高。未親測。
實施:
1.寫一個sqlloader的控制文件,取名為res_count.ctl
OPTIONS (skip=1,rows=128)
load data
infile'/wjjk_oracle/export_files/fm_to_datang_files/res_count.txt' --本來這里是res_count.csv文件,但是不知道是不是對方提供的csv編碼有問題,導進去為空,就轉成了制表符的txt。網上說該有asc||碼。truncate
INTO TABLE res_count
fields terminated by X'09'--X'09'表示制表符,這樣也行' '
trailing nullcols ( emsname, devicename, kind, num )
2.寫一個shell腳本,取名為:res_count.sh.做數據同步,并執行sqlloder的控制文件。
#!/bin/shexport ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1/export LANG=en_US.utf8
HOST=11.11.11.11USER=net
PASS=OSUsernet_
cd/wjjk_oracle/export_files/fm_to_datang_filesecho "Starting to sftp..."#nohup sqlplus rmssc/rms4sc @/wjjk_oracle/export_script/fm_to_datang/res_count_delete.sql
curdate="`date +%Y%m%d`"filename="$curdate"".csv"lftp-u ${USER},${PASS} sftp://${HOST} <
cd /backup/statistics
mget $filename
bye
EOFmv${filename} res_count.csvecho 'start sqlldr'
/u01/app/oracle/product/11.2.0/db_1/bin/sqlldr user/password@rms_51 control='/wjjk_oracle/export_script/fm_to_datang/res_count.ctl'mv res_count.csv ${filename}
這里大概邏輯就是設置oracle的目錄,編碼,設置幾個變量為你要連接的服務器的賬號、密碼、地址。
對方規定每天會生產20180321.csv這種格式的文件。我們去取回來。最后執行sqlldr進行入庫操作。
3.最后創建一個定時任務,crontab這個命令,可以網上自己查用法。
00 22 * * * /wjjk_oracle/export_script/fm_to_datang/res_count.sh >> /wjjk_oracle/export_script/fm_to_datang/res_count.log 2>&1 &
沒記錯的話,每天0點22就會定時執行了。
總結
以上是生活随笔為你收集整理的sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mqtt服务器性能H3,运用 MQTT-
- 下一篇: 武侠q传服务器维护,《武侠Q传》就服务器