#!/bin/sh
#####################################################################################################
#    程序名称: 数据导入
#
#    文件名称: XXT_DATALOAD
#
#    描述:获取核心的数据文件,导入到数据库中
#    Notes:
#       1) Copy all host (shell) programs to the correct XXT_TOP/bin
#       2) chmod +x  programs
#          eg:chmod +x XXT_DATALOAD
#
#  Change History
#  Date          Author             Version Change Reference
#  -----------   ------------------ ------- ----------------------------------
#  20130901      huangrx            1.0     Create
######################################################################################################
PROG_NAME=${0}
LOGON=${1}
USER_ID=${2}
APP_USER_NAME=${3}
REQUEST_ID=${4}

#Date paremeter
FILE_DATE=${5}

echo "+---------------------------------------------------------------------------+"
echo "Program parameters are : "
echo " "
echo "  Program name           : " $PROG_NAME
echo "  User ID                : " $USER_ID
echo "  Application user name  : " $APP_USER_NAME
echo "  Request ID             : " $REQUEST_ID
echo "  Accounting date        : " $FILE_DATE
echo "+---------------------------------------------------------------------------+"

if [ "$FILE_DATE" = "" ] ; then
   echo "Error: the Parameter of control date is null!"
   exit 1;
fi

##FTPUSER从配置文件中获取核心数据文件存放的路径(ftpdir=<HOME路径>/interface_data)
CONFIG_PATH=$XXT_TOP/bin/config.ini
SHOME=`awk -F "=" '{if($1=="ftpdir") print $2}' $CONFIG_PATH`
##数据文件源路径
SOURCE_PATH=$SHOME
##数据文件目标路径
DESTINATION_PATH=$XXT_TOP/bin/interface_data
##SQLLDR所用的控制文件所在目录
CTRL_PATH=$XXT_TOP/bin/ctrl
##文件名前缀(不带扩展名及日期)
FILE_SUFFIX=rate
##文件名扩展格式
FILE_EXT=".dat"
##总循环次数
COUNT=120

##数据文件名
FILE_NAME=${FILE_SUFFIX}${FILE_DATE}${FILE_EXT}
##文件分割后的DATA文件
DATA_FILE=${FILE_SUFFIX}_data${FILE_DATE}.dat_split
##文件分割后的END文件
END_FILE=${FILE_SUFFIX}_end${FILE_DATE}.dat_split
##DATA文件的CTRL文件
DATA_CTRL=XXT_$(echo ${FILE_SUFFIX} | tr '[a-z]' '[A-Z]')_LOAD_DATA.ctrl
##END文件的CTRL文件
END_CTRL=XXT_$(echo ${FILE_SUFFIX} | tr '[a-z]' '[A-Z]')_LOAD_END.ctrl
##SQLLDR DATA文件时的错误文件
DATA_BAD=${FILE_SUFFIX}_data_${FILE_DATE}.bad
##SQLLDR DATA文件时的日志文件
DATA_LOG=${FILE_SUFFIX}_data_${FILE_DATE}.log
##SQLLDR END文件时的错误文件
END_BAD=${FILE_SUFFIX}_end_${FILE_DATE}.bad
##SQLLDR END文件时的日志文件
END_LOG=${FILE_SUFFIX}_end_${FILE_DATE}.log

##将FILE_DATE转换为YYYY-MM-DD
FILE_DATE=`echo $FILE_DATE |sed 's/-//g'`

##按照约定格式格式化FILE_DATE
FILE_DATE=`sqlplus -s $LOGON <<EOF
set echo off
set verify off
set head off
set feedback off
select to_char(to_date($FILE_DATE, 'yyyy-mm-dd hh24:mi:ss'), 'yyyymmdd') from dual;
EOF`
FILE_DATE=`echo $FILE_DATE |sed 's/ //g'`

echo "Step1--Start to fetch ${FILE_SUFFIX} files!"

cd ${DESTINATION_PATH}

if [ -d ${DESTINATION_PATH}/${FILE_DATE} ] ; then
   cd ${FILE_DATE}
   rm -rf ${DATA_FILE}
   rm -rf ${END_FILE}
else
   mkdir ${FILE_DATE}
   cd ${FILE_DATE}
fi

while [ $COUNT -gt 0 ]
do
    
  if [ -f ${SOURCE_PATH}/${FILE_NAME} ] ; then
     cp -f ${SOURCE_PATH}/${FILE_NAME} ${DESTINATION_PATH}/${FILE_DATE}
     break
  fi
      
  COUNT=`expr $COUNT - 1`
  echo "loop--$COUNT times"
  sleep 300

done

if [ $COUNT -eq 0 ] ; then
   echo "${FILE_SUFFIX} files are not ready!"
   echo "Please reload ${FILE_SUFFIX} files and run request again manually"
   exit 1
else
   echo "finish fetch ${FILE_SUFFIX} files successfully!"
fi

echo "Step2--Start to delete bad&log files already exist"
##删除已存在的错误文件和日志文件
cd ${DESTINATION_PATH}/${FILE_DATE}
rm -rf ${DATA_BAD}
rm -rf ${DATA_LOG}
rm -rf ${END_BAD}
rm -rf ${END_LOG}

echo "Step3--Start to split ${FILE_NAME}"
##将数据文件分割为DATA(数据)和END(数据记录总数)文件
cd ${DESTINATION_PATH}/${FILE_DATE}
sed '$d' ${FILE_NAME} > ${DATA_FILE}
cat ${FILE_NAME} | grep "^END!" > ${END_FILE}

echo "Step4--Start SQL*Loader"
##装载数据文件
echo "######Run SQL*Loader, LOAD $DATA_FILE INTO XXT_DATA_TEMP_B######"
sqlldr userid=${LOGON} control=${CTRL_PATH}/${DATA_CTRL} data=${DESTINATION_PATH}/${FILE_DATE}/${DATA_FILE} bad=${DESTINATION_PATH}/${FILE_DATE}/${DATA_BAD} log=${DESTINATION_PATH}/${FILE_DATE}/${DATA_LOG} direct=ture
##如果错误文件存在,说明发生了错误,退出
##bad文件只有在数据异常,Load不进去的时候,才会生成。语法报错,或文件不存在引发的错误并不生成bad文件
##SQLLDR命令返回状态
RETCODE=$?
if [ -f ${DESTINATION_PATH}/${FILE_DATE}/${DATA_BAD} ] ; then
echo "######## Error records are found, please check ${DATA_LOG} and fix them! #########"
exit 1
fi
if [ $RETCODE -ne 0 ]; then
echo "######## Program Error Or table and file not exist, please check ${DATA_LOG} and fix them! #########"   
exit 1
fi

##装载数据记录总数文件
echo "######Run SQL*Loader, LOAD ${END_FILE} INTO XXT_DATA_END_B######"
##如果错误文件存在,说明发生了错误,退出
sqlldr userid=${LOGON} control=${CTRL_PATH}/${END_CTRL} data=${DESTINATION_PATH}/${FILE_DATE}/${END_FILE} bad=${DESTINATION_PATH}/${FILE_DATE}/${END_BAD} log=${DESTINATION_PATH}/${FILE_DATE}/${END_LOG} direct=ture
##SQLLDR命令返回状态
RETCODE=$?
if [ -f ${DESTINATION_PATH}/${FILE_DATE}/${END_BAD} ] ; then
echo "######## Error records are found, please check ${END_LOG} and fix them! #########"
exit 1
fi
if [ $RETCODE -ne 0 ]; then
echo "######## Program Error Or table and file not exist, please check ${END_LOG} and fix them! #########"   
exit 1
fi

echo "Step5--Delete 7 days before files"
##只保留7天的历史数据
FILE_DATE_PRE=`sqlplus -s $LOGON <<EOF
set echo off
set verify off
set head off
set feedback off
select to_char(to_date($FILE_DATE,'yyyymmdd')-7,'yyyymmdd') from dual;
EOF`
FILE_DATE_PRE=`echo ${FILE_DATE_PRE} |sed 's/ //g'`

##得到7天前的数据文件的文件名
PRE_FILE_NAME=${FILE_SUFFIX}${FILE_DATE_PRE}${FILE_EXT}

##删除7天前的数据文件,包括来源和目标文件
rm -rf ${SOURCE_PATH}/{PRE_FILE_NAME}
rm -rf ${DESTINATION_PATH}/${FILE_DATE_PRE}/${DATA_FILE}
rm -rf ${DESTINATION_PATH}/${FILE_DATE_PRE}/${END_FILE}

EBS 中HOST主机并发请求模板的更多相关文章

  1. 源码解析.Net中Host主机的构建过程

    前言 本篇文章着重讲一下在.Net中Host主机的构建过程,依旧延续之前文章的思路,着重讲解其源码,如果有不知道有哪些用法的同学可以点击这里,废话不多说,咱们直接进入正题 Host构建过程 下图是我自 ...

  2. OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)

    20150719 Created By BaoXinjian

  3. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  4. oracle EBS中使用PLSQL提交"关闭离散"并发请求

    declare l_request_id number; l_return_flag boolean; l_num_user_id number; l_num_resp_id number; l_nu ...

  5. java中如何模拟真正的同时并发请求?

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

  6. python web中的并发请求

    python web可以选择django,也可以选择flask,它们的原理差不多.flask比较轻量,下面写一段flask程序来说明python web对并发请求的处理. app.py import ...

  7. JS中如何处理多个ajax并发请求?

    js中的多并发处理. 通常 为了减少页面加载时间,先把核心内容显示处理,页面加载完成后再发送ajax请求获取其他数据 这时就可能产生多个ajax请求,为了用户体验,最好是发送并行请求,这就产生了并发问 ...

  8. Oracle EBS 清除并发请求和(或)管理器数据 请求

    请求说明:该请求可以清除平时提交的请求日志文件.并发管理器的日志文件.报表输出文件.并发请求和并发管理器进程的历史记录信息. 参数说明:(红色标注字段为必输项)1.  实体:ALL:清除请求历史记录. ...

  9. EBS单实例上所有正在运行的并发请求以及请求目前的状态

    --EBS单实例上所有正在运行的并发请求以及请求目前的状态---一个实例上运行的所有并发请求的总结和他们目前的状态以及等待状态    select w.seconds_in_wait "Se ...

随机推荐

  1. ubuntu 14.04 配置tomacat8

    自己在虚拟机总安装tomcat8,主机访问,记下步骤方便以后查看. 1.将tomcat8安装包移动到/usr/local目录中(个人喜欢把自己安装的软件放到/usr/local文件夹中) 2.解压缩, ...

  2. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

  3. <转>MySQL性能调优的10个方法

    文章原地址:http://mp.weixin.qq.com/s/oRXJRz_Y5drmIrcbxSKOcw 1. 选择合适的存储引擎: InnoDB 除非你的数据表使用来做只读或者全文检索 (相信现 ...

  4. 详解用CSS3制作圆形滚动进度条动画效果

    主  题 今天手把手教大家用CSS3制作圆形滚动进度条动画,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现进度条效果的博客<CSS实现进度条和订单进度条>,但是呢, ...

  5. mysql 文件导入方法总结

    数据导入3三种方法 一.phpMyAdmin 限制大小:2M 1.创建数据库 2.导入.sql或.sql.zip文件 大数据导入方法一:http://jingyan.baidu.com/article ...

  6. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  7. IT培训行业揭秘(五)

    前面说了一大堆,简单揭露了一些目前培训行业鱼龙混在的情况,那么今天我就站在一个即将毕业的大学生角度来谈谈如何选择一个靠谱的培训机构. 你即将大学毕业了,在大学里面浑浑噩噩的混了几年,马上就要离开校园, ...

  8. 微信支付(.NET版)

    前段时间做了网页版微信支付,遇到很多问题,不过最终还是解决了,现在在这里记录下开发流程以及说明,给其他人一些参考. 一.准备工作     首先肯定得先要开通微信支付功能,之前开通微信支付需要三万的押金 ...

  9. setTimeout和setInterval从入门到精通

    我们在日常web前端开发中,经常需要用到定时器方法. 前端中的定时器方法是浏览器提供的,并不是ECMAScript规范中的.是window对象的方法. 浏览器中的定时器有两种, 一种是每间隔一定时间执 ...

  10. 用jQuery获取表单的值

    在日常开发过程中,有许多用到表单的地方.比如登录,注册,比如支付,填写订单,比如后台管理等等. 使用jQuery来获取表单的值是比较常见的做法. 常见表单 单行文字域:<input type=' ...