我有要求將數十億條記錄加載到5個不同的表中,每個表都有不同的數據文件。這5個表格將每天填充並在加載新數據之前在第二天截斷。使用sql加載器使用單個控制文件將多個數據文件加載到多個表中
- Que1:如何使用1個控件使用5個不同的數據文件將數據加載到5個不同的表中?
- Que2:我需要5種不同的丟棄,日誌和壞文件來跟蹤這5種不同的負載嗎?問題3:每天加載數十億條記錄的更好和有效的方式是什麼 - 使用5個不同的控制表,5個丟棄,5個日誌文件或者只有1個控制表將解決目的。
- Que4:如果5個加載中的一個加載失敗,那麼我需要再次爲所有5個表重新運行sqloader?
注意:截止目前我們正在將數據加載到一張表中,但加載需要5-6個小時,所以我們正在尋找更好的性能。 我將從shell腳本運行sqlldr。
有4個不同的數據文件,方含用於1天,7天數據,15天
LOAD DATA
replace
INTO TABLE T1_1DAY_STG
FIELDS TERMINATED BY X'05'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
MM_INTERVAL,
STRATEGY_ID ,
AGGREGATE_DATE date "YYYY-MM-DD"
)
INTO TABLE T1_7DAY_STG
FIELDS TERMINATED BY X'05'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
MM_INTERVAL,
STRATEGY_ID ,
AGGREGATE_DATE date "YYYY-MM-DD"
)
我計劃的shell腳本這樣
echo "start SQL loader" >> ${LOG_FILE} 2>&1
DCTL=$(eval echo \${TX_SQLLDR_${i}_CTL_SP})
DDATA=$(eval echo \${TX_${i}_DATA_FILE_SP})
DLOG=$(eval echo \${TX_${i}_DATA_FILE_LOG_SP})
DBAD=$(eval echo \${TX_${i}_DATA_FILE_BAD_SP})
DDISCARD=$(eval echo \${TX_${i}_DATA_FILE_DISCARD_SP})
${ORACLE_HOME}/bin/sqlldr ${ORACLE_USER}/${ORACLE_PASSWD}@${ORACLE_SID} control=${CTL_DIR}/${DCTL} data=${DATA_DIR}/${DDATA} log=${LOG_DIR}/${DLOG} bad=${LOG_DIR}/${DBAD} discard=${LOG_DIR}/${DDISCARD} errors=${ERRNUM} direct=true silent=FEEDBACK > ${TMP_LOG_FILE} 2>&1
感謝 桑迪
您是否正在從服務器加載文件,如果是[外部表格](http://docs.oracle.com/cd/E11882_01/server.112/e22490/et_concepts.htm)可行的選項? – 2013-04-11 13:22:15
yes數據文件是從netezaa創建的外部表,但我們需要使用sql loader加載數據。 – user2270413 2013-04-11 13:29:50
有4個不同的數據文件1天方含數據,7天,15天LOAD DATA 取代 INTO TABLE T1_1DAY_STG 場TERMINATED BY X'05' OPTIONALLY ENCLOSED BY '「' TRAILING NULLCOLS ( MM_INTERVAL, STRATEGY_ID, AGGREGATE_DATE日期 「YYYY-MM-DD」 ) INTO TERMINATED BY X'05' 表T1_7DAY_STG FIELDS OPTIONALLY ENCLOSED BY '「' TRAILING NULLCOLS ( MM_INTERVAL, STRATEGY_ID, AGGREGATE_DATE DAT E 「YYYY-MM-DD」 ) ( MM_INTERVAL, STRATEGY_ID, AGGREGATE_DATE日期 「YYYY-MM-DD」 ) – user2270413 2013-04-11 13:31:36