何十億ものレコードを 5 つの異なるテーブルにロードする必要があり、これらのテーブルにはそれぞれ異なるデータ ファイルがあります。これらの 5 つのテーブルは毎日入力され、翌日新しいデータをロードする前に切り捨てられます。
- Que1 : 1 つの制御ファイルを使用して 5 つの異なるデータ ファイルを使用して、5 つの異なるテーブルにデータをロードするにはどうすればよいですか?
- 質問 2: これら 5 つの異なる負荷を追跡するには、5 つの異なる破棄、ログ、および不良ファイルが必要ですか?
- Que3 : 毎日何十億ものレコードをロードするためのより効率的で効率的な方法は何ですか?
- Que4: 5 つのロードのうちの 1 つが失敗した場合、5 つのテーブルすべてに対して sqloader を再実行する必要がありますか?
注 : 現在、データを 1 つのテーブルにロードしていますが、ロードに 5 ~ 6 時間かかるため、パフォーマンスの向上を求めています。シェル スクリプトから sqlldr を実行します。
1 日、7 日、15 日のデータを含む 4 つの異なるデータ ファイルがあります。
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"
)
このようなシェルスクリプトを計画しています
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
ありがとうサンディ