Linux环境下使用定时器通过sqlldr向oracle数据库导入数据

来源:互联网 发布:济南网站怎么优化 编辑:程序博客网 时间:2024/05/29 18:40

背景:

文件服务器每天都会生成若干张表的数据文件,需要将这些文件里的数据导入到oracle数据库中,为了实现自动化导入,采用的是linux定时任务执行shell脚本通过sqlldr命令来导入。需要注意的是在shell脚本中需要设置好oracle的环境变量,要不然在cron定时任务调用脚本时sqlldr命令将无法执行。


用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.ZHS16GBKORACLE_HOME=/u01/app/oracle/product/102/db_1export ORACLE_HOMEdate=`date +%Y%m%d`mon=`date +%Y%m`#ctl文件目录ctldr=/home/oracle/data/ctl#导入日志目录cd /home/oracle/data/ctllogif [ ! -d "$mon" ]; then  mkdir $mon  echo "创建月目录$mon"ficd $monif [ ! -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 DATAINFILE 'V_INST_USERS.ITF'APPEND INTO TABLE v_inst_usersFIELDS 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:29460110451222222,18022222222,4414,2016-05-18 21:57:32460036121333333,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
0 0
原创粉丝点击