記錄 sqlloader 匯入千萬級別資料
實踐如下
執行sqlldr指令碼如下:
指令碼伺服器所在路徑:/app/ccp/batchfile/script
指令碼檔案圖片:
指令碼內容如下:
#!/bin/bash #伺服器需要裝上一個oracle客戶端
export ORACLE_HOME=/oracle/app/product/12.1.0/db_1
export PATH=/oracle/app/product/12.1.0/db_1/bin:$PATH
#取昨天日期
time1=$(date -d "1 day ago" "+%Y%m%d");
#發起密碼密文解密(生產不允許直接在指令碼命令中寫入資料庫密碼,需從配置檔案中獲取密碼,請求地址以及埠“馬賽克”處理)
password=$(curl -s http://a.b.xx.yyy:zzzz/CIF/databsepasswddecde?actiom=databsepasswddecde);
#對返回的結果集處理 {"password":"abcd"} --> abcd
oracle_password=${password:13:0-2};
#指定xx中心連線資料庫(請求地址以及埠“馬賽克”處理)
usr_pwd="AECIP_CIF/${oracle_password}@a.b.xx.yyy:zzzz/CCP_CCP_DEVDB_RAC1";
datapath1="/app/ccp/batchfile/countingwarehouse/ctl";
#/app/ccp/batchfile/countingwarehouse/ctl/ 存放失敗資料檔案
badpath="/app/ccp/batchfile/countingwarehouse/bad/${time1}";
#/app/ccp/batchfile/countingwarehouse/ctl/ 存放日誌檔案
logpath="/app/ccp/batchfile/countingwarehouse/log/${time1}";
#/app/ccp/batchfile/countingwarehouse/ctl/ 存放.ctl檔案指令碼
controlpath="/app/ccp/batchfile/countingwarehouse/ctl";
sqlldr $usr_pwd control=$controlpath/EventRule.ctl data=$datapath1/EventRule.dat log=$logpath/${time1}-EventRule.log bad=$badpath/${time1}-EventRule.bad skip=0 rows=20000 errors=1000 bindsize=33554432 readsize=2097152000;
對應資料夾圖片:
對應.ctl指令碼內容如下:
#檔案資料以回車換行
#"str X'0A'" 可以使用ue ctl+h 得到0A 表示十六進位制的回車換行
load data infile 'EventRule.dat' "str X'0A'" append into table AECIP_CIF_KEYDATE
#檔案資料以豎線分隔 fields terminated by "|" TRAILING NULLCOLS ( INPT_DT, REMINDTYPE, REMINDNAME, REMINDRULEID, REMINDSET, EVENTNAME, CUSTOMERCODE, CUSTOMERNAME, CLIENT_TYPE, USER_NO, MOBILE, MASTERACCT, LEGAL_CD, EVENTDATE, MERCHANDISENAME, MERCHANDISECODE, COUNT1, COUNT, OPERTYPE constant"0" )
執行對應synanalysis.sh指令碼檔案即可;