• SQLLDR记录数与文本记录数比较


      我们平时都用sqlldr进行将文本数据加载到数据库,但是有时候由于数据问题导致入库率不能达到100%,因此我们要检测是否存在不能入库的数据记录。以下shell脚本就是统计文本中记录数和数据库中记录数是否一致。此脚本仅供大家参考,仍需要完善,各位请多多指教。

    #!/bin/sh
    
    #定义参数
    data_path="/home/oracle/txtdata"
    conf_file="/home/oracle/config"
    log_file="/home/oracle/log"
    date=`date +"%Y%m%d"`
    #统计此次导入的文件中个文件的行数
    file_cout=0
    
    #切换到data_path路径下
    cd ${data_path}
    #检查是否有txt文件
    file_cout=`ls -A *.txt |wc -l`
    #清空txtdata.conf文件
    echo ''>${conf_file}/txtdata.conf
    #判断当期是否有要进行sqlldr文件
    if [ ${file_cout} -eq 0 ]; then
     echo "此次没有要进行sqlldr的文本!清检查FTP是否执行!"
    else
    #统计各文本行数并放到配置文件中
    for var in `ls -A *.txt|awk '{print $NF}'|sort -u`;
    do
    wc -l $var >>${conf_file}/tempfile.conf
    done
    fi
    #切换到配置文件路径下
    cd ${conf_file}
    #将.txt替换掉
    sed 's/.txt/|/g' tempfile.conf|uniq > txtdata.conf
    #删除空行
    #sed '/^$/d' txtdata.conf
    #用|替换空格
    sed 's/[[:space:]]/|/g' txtdata.conf |uniq >tempfile2.conf
    #登录数据库 
    sqlplus -s oradev/oracle <<EOF
    set echo off;
    set feedback off;
    set verify off;
    set term off;
    set trimspool on;
    set heading off;
    set newpage none;
    spool '/home/oracle/config/dbdata.conf'
    select count(1) as num,'|','user_tables' from user_tables;
    spool off;
    exit;
    EOF
    
    #拼接文件
    paste tempfile2.conf dbdata.conf > sumfile.conf
    #比较数据条数
    awk -F'|' '
    {if($2==$4 && $1==$3)
    {
      print $2":数据行数匹配,可以进行下一步操作"
    }
    else
    {
     print $2":数据行数不匹配,请检查sqlldr日志!"
    }
    }' sumfile.conf >>${log_file}/check${date}.log
    #删除临时文件
    rm tempfile.conf
    rm tempfile2.conf
    #退出
    exit 0
    
  • 相关阅读:
    OC3(字符串,值类)
    OC2(初始化方法)
    OC1(类和对象)
    postgresql 时间戳格式为5分钟、15分钟
    centos添加ftp用户并禁止外切目录
    postgresql 判断日期是否合法
    tigerVNC的简单使用教程(CentOS的远程桌面连接)
    linux awk解析csv文件
    由windows向linux上传下载文件方法
    codeblocks linux编译告警乱码解决办法
  • 原文地址:https://www.cnblogs.com/oracle-dba/p/3782914.html
Copyright © 2020-2023  润新知