sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中... -ag凯发k8国际
需求: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就会定时执行了。
总结
以上是ag凯发k8国际为你收集整理的sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mqtt服务器性能h3,运用 mqtt-
- 下一篇: