oracle sqlloader使用

直接加载有显著的性能提高(不会产生log),前者使用直接路径(不会触发触发器,直接把sga中的脏数据刷新到磁盘)加载,后者使用外部表(默认并行执行),为了提高性能,可以调整sqlldr的  READSIZE , STREAMSIZE ,COLUMNARRAYROWS参数。注意的地方:

1、使用直接路径(direct=true)有一定的限制,有索引的表是不允许这样做的,选项UNRECOVERABLE同理

2、导入完成后校验数据,因为sqlldr没有trim空格

3、使用了direct=true(直接路径),则不能使用insert

4、给有索引的表加载数据完成操作后,为了提高性能可以考虑重建索引

具体代码:

控制文件:
UNRECOVERABLE --相当于设置表nologging
LOAD DATA
INFILE 'e:\TEST_PARTITION.dat'
BADFILE 'e:\TEST_PARTITION.bad'
DISCARDFILE 'e:\TEST_PARTITION.dsc'
APPEND --insert(defualt), APPEND(= append into table table_name ,指定parallel = true时必须是append),replace(=truncate)
INTO TABLE TEST_PARTITION 
FIELDS TERMINATED BY ',' --
OPTIONALLY ENCLOSED BY '"' --
TRAILING NULLCOLS --表的字段没有对应的值时允许为空
(
  ID integer external ,
  BIZ_CODE  char ,
  USER_ID  integer external  NULLIF USER_ID = BLANKS ,
  CREATE_DATE  DATE "yyyy-mm-dd hh24:mi:ss" NULLIF CREATE_DATE = "SYSDATE",
  UPDATE_DATE  DATE "yyyy-mm-dd hh24:mi:ss" NULLIF UPDATE_DATE = "SYSDATE",
  STATUS integer external  NULLIF STATUS = BLANKS ,
  TOTAL_AMOUNT  integer external  NULLIF TOTAL_AMOUNT = BLANKS ,
  DISCOUNT_AMOUNT  integer external  NULLIF DISCOUNT_AMOUNT = BLANKS ,
  TOTAL_POINTS  integer external  NULLIF TOTAL_POINTS = BLANKS ,
  DELETE_DATE  DATE "yyyy-mm-dd hh24:mi:ss" NULLIF DELETE_DATE = "SYSDATE" ,
  PAY_COUNT  integer external  NULLIF PAY_COUNT = BLANKS ,
  IP  char  NULLIF IP = '127.0.0.1' ,
  PAYMENT_ID  integer external  NULLIF PAYMENT_ID = BLANKS ,
  EMALL_SITE_ID  integer external  NULLIF EMALL_SITE_ID = BLANKS ,
  NOTIFY_FREQ  integer external  NULLIF NOTIFY_FREQ = BLANKS ,
  RANDOM_CODE  char NULLIF RANDOM_CODE = BLANKS
)

posted on 2013-02-16 11:03  itstrike  阅读(410)  评论(0编辑  收藏  举报

导航