• 定时将上月的数据导入到Oracle中,并更新指定的列


    原理:利用Oracle中的sqlldr和Linux的定时任务crontab实现

    用v_inst_users表举例:

    数据库表v_inst_users:

    CREATE TABLE V_INST_USERS
    (
    imsi VARCHAR2(60),
    telephone VARCHAR2(20),
    city_code VARCHAR2(20),
    log_date DATE
    )
    shell脚本import.sh:

    #!/bin/sh
    #设置必要的环境变量(使用定时器的时候必须设置环境变量)
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    ORACLE_HOME=/u01/app/oracle/product/102/db_1
    export ORACLE_HOME

    date=`date +%Y%m%d`
    mon=`date +%Y%m`

    #ctl文件目录
    ctldr=/home/oracle/data/ctl
    #导入日志目录
    cd /home/oracle/data/ctllog

    if [ ! -d "$mon" ]; then
    mkdir $mon
    echo "创建月目录$mon"
    fi
    cd $mon
    if [ ! -d "$date" ]; then
    mkdir $date
    echo "创建天目录$tt"
    fi

    #导入
    $ORACLE_HOME/bin/sqlldr userid/password@orcl control=$ctldr/imp_to_v_inst_users.ctl log=$logdr/log_v_inst_users_$date.log bad=$logdr/bad_v_inst_users_$date.log;
    控制文件imp_to_v_inst_users.ctl:
    LOAD DATA
    INFILE 'V_INST_USERS.ITF'
    APPEND INTO TABLE v_inst_users
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (
    imsi,
    telephone,
    city_code,
    log_date DATE "YYYY-MM-DD HH24:MI:SS"
    )
    数据文件V_INST_USERS.ITF:

    460030406111111,13311111111,4206,2016-05-18 21:57:29
    460110451222222,18022222222,4414,2016-05-18 21:57:32
    460036121333333,15333333333,3204,2016-05-18 22:10:04

    定时任务配置:
    执行命令:crontab -e 编辑定时任务

    40 9 * * * /home/oracle/data/import.sh > /home/oracle/data/importlog/import_`date +"\%Y\%m\%d"`.log
    ————————————————
    版权声明:本文为CSDN博主「进击的巨喵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xiaowenK/article/details/51668690

  • 相关阅读:
    [C]recursion递归计算阶乘
    [Python]reduce function & lambda function & factorial
    [C/JAVA] ceil, floor
    OC项目调用C++
    Xcode 代码注释
    百度云加速器
    UITableView和MJReFresh结合使用问题记录
    OC 类的load方法
    JLRoutes笔记
    推送通知项目记录
  • 原文地址:https://www.cnblogs.com/wenr-one/p/12498670.html
Copyright © 2020-2023  润新知