结合SQL*Loader、AWK工具为表构造大数据量,以备测试

背景:
假设对需求进行评估后,发现某表数据量为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<COUNT; 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值