sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...

本文介绍了如何通过FTP和SQLLoader将A服务器生成的CSV文件自动同步到B服务器的Oracle数据库中。首先,利用Shell脚本通过FTP下载CSV文件,然后使用SQLLoader控制文件加载数据,最后通过crontab设置定时任务实现每日自动同步。在处理过程中,由于CSV编码问题,转换为制表符分隔的TXT文件进行导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求: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就会定时执行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值