sqlldrツールを使用してOracleデータベーステーブルにデータをロードします

sqlldrツールを使用してOracleデータベーステーブルにデータをロードします

序文

この記事は主に、ソースコード、つまり、シェルスクリプトを介してsqlldrツールを使用してOracleデータベーステーブルにデータをロードする方法を貼り付けることを目的としています。

sqlldrツールの詳細なパラメーターの説明については、他のブログ投稿を参照してください。

スクリプトの実装

Oracleのsqlldrツールを使用して、データをOracleデータベースにロードします

ログファイルのパスは、スクリプトでカスタマイズおよび調整できます

パラメータ説明

スクリプトを実行するには5つのパラメーターが必要です

  • dbSid:OraleライブラリSID
  • dbUser:Oracleデータベースのユーザー名
  • dbPass:Oracleデータベースのパスワード
  • ctlFile:データ制御ファイル(重要な情報、以下の例を参照してください)
  • dataPath:データファイルパス(つまり、次のctl制御ファイルのデータファイルパス/home/mds/file/input/add/TEST

ctl制御ファイルの説明

ctl制御ファイルには、実際の状況に応じてカスタマイズおよび調整できる主要なウェアハウジング情報が記録されます。

  • 読み込み方法
  • データファイル
  • データ構造
  • デリミタ

CTLファイルの例

OPTIONS (DIRECT=true,SKIP_INDEX_MAINTENANCE=true,ERRORS=0)
LOAD DATA
CHARACTERSET AL32UTF8
infile '/home/mds/file/input/add/TEST/ora_data.txt'
TRUNCATE
into table user_info 
fields terminated by '|'
trailing nullcols
(
USER_ID,
USER_NAME,
PHONE,
ADDRESS
)

スクリプトソースコード

#!/bin/bash

#Define database params
dbSid=$1
dbUser=$2
dbPass=$3
ctlFile=$4
dataPath=$5

ctlName=`basename ${
     
     ctlFile}`

#Sys data [yyyymmdd]
sysDate=`date +'%Y%m%d'`

#Define log params
logPath=/app/log/public/ora_load_data/${sysDate}
logFile=${logPath}/${ctlName}.log
logTemp=${logPath}/${ctlName}.tmp
#Define temp log file for sqlldr, show in moia
badFile=${logPath}/${ctlName}.bad

#Log function
Log()
{
    
    
  createTime=`date  +"%Y-%m-%d %H:%M:%S"`
  echo "[${createTime}] $*" |tee -a ${logFile} 2>/dev/null
}

#CheckDir function
CheckDir()
{
    
    
  if [ ! -d $1 ]; then
    mkdir_log=` mkdir -p -m 775 $1 `
    if [ $? -ne 0 ]; then
      Log "[Error] [$1] create failed, dir not exist, please check..."
      exit 255
    fi    
  fi
}
CheckDir "${logPath}"

###################   Main program   ###################
#check the parameter
if [ $# -ne 5 ]; then
   Log "[Error] Please input the right parameter ..."
   Log "[Error] Eg:sh ora_load_data.sh oraSid user passwd /app/file/userinfo.ctl /app/file/20200630"
   exit 255
fi

#Check ctlFile
if [ ! -f ${ctlFile} ];then
    Log "[Error] ${ctlFile} not exist, please check..."
    exit 255
fi

#Check dataPath
if [ ! -d ${dataPath} ];then
    Log "[Error] ${dataPath} not exist, please check..."
    exit 255
fi

cd ${dataPath}
if [ $? -ne 0 ];then
    Log "[Error] Failed to change path ${dataPath}..."
    exit 255
fi

#Check datafile
datafile=`cat ${
     
     ctlFile}| grep infile |awk -F \' '{
     
     print $2}'`
if [ ! -f ${datafile} ];then
   Log "[Error] ${datafile} not exists,please check..."
   exit 11
fi

Log "sqlldr ${dbUser}/${dbPass}@${dbSid} errors=100 control=${ctlFile} bad=${badFile} rows=3000 bindsize=33554432 > ${logFile} 2>&1"
sqlldr ${dbUser}/${dbPass}@${dbSid} errors=100 control=${ctlFile} bad=${badFile} log=${logTemp} rows=3000 bindsize=33554432 > ${logFile} 2>&1

cat ${logTemp}

if [ $? -ne 0 ];then
    Log "[Error] Failed to load data from ${ctlFile}..."
        Log "$*"
    exit 1
else
    Log "Succ to load data from ${ctlFile}."
fi

結論

必要に応じて、それを取り除いてください。再印刷する場合は、この記事へのリンクを追加してください。

インストール番号があるので、アンロード番号が必要です。ソースコードは別の日に投稿されます。お待ちください...

1ポイントは1ポイントであり、少なくともゼロではありません。

以上!

おすすめ

転載: blog.csdn.net/weixin_49192027/article/details/112504787
おすすめ