zoukankan      html  css  js  c++  java
  • FTP 文件接口按天批处理脚本实例

    该实例实现了FTP传输、解压缩、文件预处理(采用java)、sqlldr加载、以及加载后处理等一系列过程。

    @echo off&setlocal enabledelayedexpansion
    color a
    rem 数据库参数
    rem 要将运行该脚本的操作系统的日期格式调整为2012-01-01 标准的YYYY-MM-DD格式
    rem 需要安装7-ZIP ,并把7-zip的添加到系统路径 path
    rem 需要安装 1.6 版本以上的jdk
    rem 本脚本的默认执行模式为按天执行,请按照协议的文件名称修改FILENAME的变量的定义
    rem 本示例接口文件的为hwsj_20120102.txt.gz 其中文件名日期
    rem 其中java部分主要为对文件编码,换行符进行处理的过程,根据具体情况修改处理方法

    set USERCODE=gd_114 set PASSWORD=a set DATABASE=btsz set FILENAME=hwsj_%date:~0,4%%date:~5,2%%date:~8,2%.txt.gz set TXTNAME=hwsj_%date:~0,4%%date:~5,2%%date:~8,2%.txt echo *------------begin-------------* >>log.txt echo *------------------------------* >>log.txt echo 开始时间:>>log.txt echo %date% %time% >>log.txt echo 准备接受数据文件:%FILENAME% >>log.txt copy ftp_file.txt tmp1.txt >>log.txt for /f "tokens=1 delims=" %%i in (tmp1.txt) do ( set var=%%i set "var=!var:FTPFILE=%FILENAME%!" echo !var!>>tmp2.txt ) move /Y tmp2.txt ftp_body2.txt >>log.txt copy ftp_body*.txt ftp_body_all.txt echo 从FTP上获取数据......... ftp -s:ftp_body_all.txt >> log.txt del ftp_body2.txt del tmp1.txt rem 暂停3秒钟,确保文件能够覆盖 ping -n 3 127.1>nul echo 正在解压缩文件......... 7z x %CD%\%FILENAME% -o%CD%\data_source\ -aoa >>log.txt echo 正在对文件格式进行处理......... java MaintainLogFile %CD%\data_source\%TXTNAME% %CD%\data\%TXTNAME% >>log.txt echo 正在删除压缩文件......... del %CD%\hwsj_*.txt.gz echo 正在清空历史数据......... rem 清空数据库数据并备份上一次的数据文件 sqlplus "%USERCODE%/%PASSWORD%@%DATABASE%" @%CD%/script/pro_prepare.sql echo 正在使用sqlldr加载数据......... sqlldr userid=%USERCODE%/%PASSWORD%@%DATABASE% data='%CD%\data\%TXTNAME%' control='%CD%\script\train.ctl' direct=true log='%CD%\log_sqlExecute\LOAD_LOG_%FILENAME%.log' bad='%CD%\data_bad\BAD_DATA_%FILENAME%.log' errors=5000 rows=2000 echo 正在对数据进行加工......... sqlplus "%USERCODE%/%PASSWORD%@%DATABASE%" @%CD%/script/pro_main.sql echo 结束数据时间:>>log.txt time /t >>log.txt echo *------------------------------* >>log.txt echo *------------end---------------* >>log.txt exit

    我的sqlldr控制文件如下:

    load data    
    into table imp_114_log
    insert
    fields terminated by '*?,'
    TRAILING NULLCOLS  
    (
        WORKERID    "trim(:WORKERID )",
        CALLINGNUM  "trim(:CALLINGNUM)",
        CALLEDNUM   "trim(:CALLEDNUM)",
        STARTDT     "trim(:STARTDT)",
        ENDDT       "trim(:ENDDT)",
        QUERYWORD   "trim(:QUERYWORD)",
        FACTWORD    "trim(:FACTWORD)",
        BROADCASTCONTENT  CHAR(2000) "SUBSTR(trim(:BROADCASTCONTENT),1,1000)",
        VOICETYPE         "trim(:VOICETYPE)",
        CITYCODE          "trim(:CITYCODE)",
        WORKERNAME        "trim(:WORKERNAME)",
        UNITID            "trim(:UNITID)",
        BROADCASTDT       "trim(:BROADCASTDT)",
        UNITNAME          CHAR(2000) "SUBSTR(trim(:UNITNAME),1,500)",
        UNITTEL           "trim(:UNITTEL)",
        BUSINESSTYPE      "trim(:BUSINESSTYPE)"
    )

    ftp_body1.txt

    open 192.168.240.118
    sa
    sa
    cd ./
    ascii

    ftp_file.txt

    get FTPFILE
    bye


    1、SQL*Loader 数据的提交:
    一般情况下是在导入数据文件数据后提交的。
    也可以通过指定 ROWS= 参数来指定每次提交记录数。


    2、提高 SQL*Loader 的性能:
    1) 一个简单而容易忽略的问题是,没有对导入的表使用任何索引和/或约束(主键)。如果这样做,甚至在使用ROWS=参数时,会很明显降低数据库导入性能。
    2) 可以添加 DIRECT=TRUE来提高导入数据的性能。当然,在很多情况下,不能使用此参数。
    3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志。这个选项只能和 direct 一起使用。
    4) 可以同时运行多个导入任务.
    常规导入与direct导入方式的区别:
    常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中。

    3、parallel参数并不是让一个sqlldr语句起多个进程来加载数据,而是不锁住加载表,允许别的直接路径加载. 所以要使parallel起作用,应该先将要加载的数据文件分成多个,用多个sqlldr语句同时加载,如下例:
    sqlldr userid=scott/tiger control=load1.ctl data=data1.txt direct=y parallel=true &
    sqlldr userid=scott/tiger control=load2.ctl data=data2.txt direct=y parallel=true &
    sqlldr userid=scott/tiger control=load3.ctl data=data3.txt direct=y parallel=true &)

  • 相关阅读:
    kafka 流式计算
    解决山地车令人讨厌的中轴异响及其他异响问题
    go语言通道详解
    使用Spring Cloud连接不同服务
    并发之痛 Thread,Goroutine,Actor
    用go语言实现线程池
    golang go语言通道类型的通道示例 通道的通道
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    spring5 reactive
    Go 语言和 Scala 语言对比
  • 原文地址:https://www.cnblogs.com/treemanfm/p/2870903.html
Copyright © 2011-2022 走看看