結合SQL*Loader、AWK工具為表構造大資料量,以備測試(轉)

yhj20041128001發表於2011-10-26
背景:
假設對需求進行評估後,發現某表資料量為1000萬,表名為T_1,表結構如下:
COL_1    NUMBER(3)
COL_2    NUMBER(5, 2)
COL_3    VARCHAR2(10)
COL_4    DATE

問題:
需要往表T_1中構造1000萬隨機資料,這樣測試就可以利用工具測試與此表相關功能的效能。

方案:
採用AWK編寫隨機函式,產生相應數量的文字資料;再利用Oracle資料庫的SQL*Loader工具將文字資料匯入到表。

方案步驟:
1. AWK程式設計實現隨機函式,請參考【採用AWK程式設計實現隨機函式(包括整數、浮點數、字串、日期時間)

2. 編寫T_1.awk指令碼,內容如下:
BEGIN {
# 設定AWK程式輸出時各列的分隔符
OFS = "|";
srand();
COUNT = 10000000;
for (i=1; i    print random_int(10, 100), random_float(3, 2), random_string("x", 10), random_time("2009 06 01 12 30 30", "2011 07 15 23 59 59", "%Y-%m-%d %H:%M:%S");
}
}

3. 執行命令:(產生1000萬資料,並將資料儲存在T_1_DATA.txt檔案中)
awk -f random_function.awk -f T_1.awk > T_1_DATA.txt

4. 編寫SQL*Loader工具控制檔案T_1_CONTROL.ctl,內容如下:
LOAD DATA
INFILE 'T_1_DATA.txt'    -- 資料檔名
append INTO TABLE T_1
FIELDS TERMINATED BY '|'
(
    COL_1,
    COL_2,
    COL_3,
    COL_4 "to_date(:COL_4,'''yyyy-mm-dd hh24:mi:ss''')"    -- 將指定格式的字串資料轉換成日期
)

5. 執行SQL*Loader命令,將資料載入到表中:
sqlldr userid=使用者名稱/密碼@SID control=T_1_CONTROL.ctl
注:如果使用上面命令覺得慢,可以使用direct path load方式載入,命令如下:
sqlldr userid=使用者名稱/密碼@SID control=T_1_CONTROL.ctl direct=true

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23757700/viewspace-709672/,如需轉載,請註明出處,否則將追究法律責任。

相關文章