ORACLE百万数据导入导出解决方法(LOADER、UTL_FILE)


Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:
1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
[oracle@app1 ~]$ sqlldr

SQL*Loader: Release 11.2.0.3.0 - Production on Thu Nov 12 10:30:13 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Usage: SQLLDR keyword=value [,keyword=value,...]

Valid Keywords:

    userid -- ORACLE username/password           
   control -- control file name                  
       log -- log file name                      
       bad -- bad file name                      
      data -- data file name                     
   discard -- discard file name                  
discardmax -- number of discards to allow          (Default all)
      skip -- number of logical records to skip    (Default 0)
      load -- number of logical records to load    (Default all)
    errors -- number of errors to allow            (Default 50)
      rows -- number of rows in conventional path bind array or between direct path data saves
               (Default: Conventional path 64, Direct path all)
  bindsize -- size of conventional path bind array in bytes  (Default 256000)
    silent -- suppress messages during run (header,feedback,errors,discards,partitions)
    direct -- use direct path                      (Default FALSE)
   parfile -- parameter file: name of file that contains parameter specifications
  parallel -- do parallel load                     (Default FALSE)
      file -- file to allocate extents from      
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions  (Default FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable  (Default FALSE)
commit_discontinued -- commit loaded rows when load is discontinued  (Default FALSE)
  readsize -- size of read buffer                  (Default 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE  (Default NOT_USED)
columnarrayrows -- number of rows for direct path column array  (Default 5000)
streamsize -- size of direct path stream buffer in bytes  (Default 256000)
multithreading -- use multithreading in direct path  
 resumable -- enable or disable resumable for current session  (Default FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE  (Default 7200)
date_cache -- size (in entries) of date conversion cache  (Default 1000)
no_index_errors -- abort load on any index errors  (Default FALSE)

PLEASE NOTE: Command-line parameters may be specified either by
position or by keywords.  An example of the former case is 'sqlldr
scott/tiger foo'; an example of the latter is 'sqlldr control=foo
userid=scott/tiger'.  One may specify parameters by position before
but not after parameters specified by keywords.  For example,
'sqlldr scott/tiger control=foo logfile=log' is allowed, but
'sqlldr scott/tiger control=foo log' is not, even though the
position of the parameter 'log' is correct.


1) insert     --为缺省方式,在数据装载开始时要求表为空
2) append  --在表中追加新记录
3) replace  --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
5)trailing nullcols  --如要导入源文件此列内容为空,在导入到数据库表中,此列内容就是null
6)terminated   by   whitespace --空白分隔
7)fields terminated by ',' optionally enclose by '"' --有带字符""插入
8)WHEN  --增加条件

1. FIELDS给出记录中字段的分隔符,FIELDS格式为:
FIELDS [TERMIALED [BY] {WHITESPACE | [X] 'charcter'} ]
[ [ OPTIONALLY] ENCLOSE [BY] [X]'charcter' ]
TERMINATED 读完前一个字段即开始读下一个字段直到介绍。
WHITESPACE 是指结束符是空格的意思。包括空格、Tab、换行符、换页符及回车符。如果是要判断但字符,可以用单引号括起,如X'1B'等。
OPTIONALLY ENCLOSED 表示数据应由特殊字符括起来。也可以括在TERMINATED字符内。使用OPTIONALLY要同时用TERMINLATED。
ENCLOSED 指两个分界符内的数据。如果同时用 ENCLOSED和TERMINAED ,则它们的顺序决定计算的顺序。
7)定义列:
column 是表列名。列的取值可以是:
BECHUM 表示逻辑记录数。第一个记录为1,第2个记录为2。
CONSTANT 表示赋予常数。
SEQUENCE 表示序列可以从任意序号开始,格式为:
SEQUENCE ( { integer | MAX |COUNT} [,increment]
POSITION 给出列在逻辑记录中的位置。可以是绝对的,或相对前一列的值。格式为:
POSITION ( {start[end] | * [+integer] } )
Start 开始位置
* 表示前字段之后立刻开始。
+ 从前列开始向后条的位置数。
8)定义数据类型:
可以定义14种数据类型:
CHAR
DATE
DECIMAL EXTERNAL
DECIMAL
DOUBLE
FLOAT
FLOAT EXTERNAL
GRAPHIC EXTERNAL
INTEGER
INTEGER EXTERNAL
SMALLINT
VARCHAR
VARGRAPHIC
1.字符类型数据
CHAR[ (length)] [delimiter]
length缺省为 1.
2.日期类型数据
DATE [ ( length)]['date_format' [delimiter]
使用to_date函数来限制。
3.字符格式中的十进制
DECIMAL EXTERNAL [(length)] [delimiter]
用于常规格式的十进制数(不是二进制=> 一个位等于一个bit)。
4.压缩十进制格式数据
DECIMAL (digtial [,divcision])
5.双精度符点二进制
DOUBLE
6.普通符点二进制
FLOAT
7.字符格式符点数
FLOAT EXTERNAL [ (length) ] [delimiter]
8.双字节字符串数据
GRAPHIC [ (legth)]
9.双字节字符串数据
GRAPHIC EXTERNAL[ (legth)]
10.常规全字二进制整数
INTEGER
11.字符格式整数
INTEGER EXTERNAL
12.常规全字二进制数据
SMALLINT
13.可变长度字符串
VARCHAR
14.可变双字节字符串数据
VARGRAPHIC

2.2写控制文件CTL
1. 各数据文件的文件名;
2.各数据文件格式;
3.各数据文件里各数据记录字段的属性;
4.接受数据的ORACLE表列的属性;
5.数据定义;
6.其它
数据文件的要求:
数据类型的指定
CHAR 字符型
INTEGER EXTERNAL 整型
DECIMAL EXTERNAL 浮点型
3.1数据文件的内容
可以在OS下的一个文件;或跟在控制文件下的具体数据。数据文件可以是:
1、 二进制与字符格式:LOADER可以把二进制文件读(当成字符读)列表中
2、 固定格式:记录中的数据、数据类型、 数据长度固定。
3、 可变格式:每个记录至少有一个可变长数据字段,一个记录可以是一个连续的字符串。
数据段的分界(如姓名、年龄)如用“,”作字段的 分 ;用,"’作数据
括号等
4、 LOADER可以使用多个连续字段的物理记录组成一个逻辑记录,记录文件运行情况文件:包括以下内容:
1、 运行日期:软件版本号
2、 全部输入,输出文件名;对命令行的展示信息,补充信息,
3、 对每个装入信息报告:如表名,装入情况;对初始装入, 加截入或更新装
入的选择情况,栏信息
4、 数据错误报告:错误码;放弃记录报告
5、 每个装X报告:装入行;装入行数,可能跳过行数;可能拒绝行数;可能放
弃行数等
6、 统计概要:使用空间(包大小,长度);读入记录数,装入记录数,跳过记
录数;拒绝记录数,放弃记录数;运行时间等。

例子
load data infile 'F:\14\90.txt'
APPEND into table test_90
fields terminated by ''
trailing nullcols
(number_dest)


sqlldr userid='smsdb/zcl941217' control='F:\14\load data190.ctl' log='F:\14\test.log'

create or replace directory MY_DIR  as '/opt/oracle';
grant create any directory to smsdb;

 txt_handle := UTL_FILE.FOPEN('MY_DIR','total.txt','w');   

方法一
DECLARE  
row_result varchar2(1024);   
selectsql varchar2(1024);   
qrycursor SYS_REFCURSOR;   
txt_handle UTL_FILE.file_type;   
BEGIN  
 selectsql := 'select distinct number_dest from test_190';   
 txt_handle := UTL_FILE.FOPEN('MY_DIR','total.txt','w');   
 open qrycursor for selectsql;   
 loop     
   fetch qrycursor into row_result;   
   exit when qrycursor%notfound;     
 UTL_FILE.PUT_LINE(txt_handle,row_result);   
end loop;     
 --关闭游标     
 close qrycursor;   
UTL_FILE.FCLOSE(txt_handle);   
end;


方法二
DECLARE


mu_txt UTL_FILE.file_type;


BEGIN


mu_txt := UTL_FILE.FOPEN('P_DIR','DEPT.xls','W',1000);
UTL_FILE.PUT_LINE(mu_txt,'号码'||chr(9)||'目标号码'||chr(9)||'条数'||chr(9)||'内容'); --列名
FOR I IN (select c.src,c.dest,c.num,c.content,decode(c.status, 0,'等待发送',1,'已提交到下行队列',2,'发送成功',3,'接收成功',-1,'提交失败',-2,'接收失败') 状态 from t_smsgateway_mt_his c where c.cust_id=490 and
c.insert_time between to_date('2016-01-01','yyyy-mm-dd') and to_date('2016-01-31','yyyy-mm-dd')) LOOP


UTL_FILE.PUT_LINE(mu_txt,I.src_addr||chr(9)||I.dest_addr||chr(9)||I.charge_num||chr(9)||I.msg_content);


END LOOP;
UTL_FILE.FFLUSH(mu_txt);


UTL_FILE.FCLOSE(mu_txt);


END;


ASCII码对应表
chr(9) tab空格       chr(10) 换行      chr(13) 回车        Chr(13)&chr(10) 回车换行       chr(32) 空格符       chr(34) 双引号       chr(39) 单引号


chr(33) !        chr(34) "        chr(35) #        chr(36) $        chr(37) %        chr(38) &        chr(39) ‘        chr(40) (        chr(41) )        chr(42) *
chr(43) +        chr(44) ,        chr(45) -        chr(46) .        chr(47) /


Chr(48) 0        Chr(49) 1        Chr(50) 2        Chr(51) 3        Chr(52) 4        Chr(53) 5        Chr(54) 6        Chr(55) 7        Chr(56) 8        Chr(57) 9


chr(58)            chr(59) ;        chr(60) <        chr(61) =        chr(62) >        chr(63) ?        chr(64) @


chr(65) A        chr(66) B        chr(67) C        chr(68) D        chr(69) E        chr(70) F        chr(71) G        chr(72) H         chr(73) I          chr(74) J
chr(75) K        chr(76) L        chr(77) M        chr(78) N        chr(79) O        chr(80) P        chr(81) Q        chr(82) R        chr(83) S        chr(84) T
chr(85) U        chr(86) V        chr(87) W        chr(88) X        chr(89) Y        chr(90) Z


chr(91) [        chr(92) \        chr(93) ]        chr(94) ^        chr(95) _        chr(96) `


chr(97) a        chr(98) b        chr(99) c        chr(100) d        chr(101) e       chr(102) f       chr(103) g       chr(104) h        chr(105) i
chr(106) j        chr(107) k       chr(108) l        chr(109) m       chr(110) n       chr(111) o       chr(112) p        chr(113) q       chr(114) r
chr(115) s       chr(116) t        chr(117) u       chr(118) v       chr(119) w       chr(120) x        chr(121) y       chr(122) z


chr(123) {       chr(124) |       chr(125) }       chr(126) ~        chr(127)          chr(128)         chr(153)?        chr(169) ©          chr(174) ?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29065182/viewspace-1833377/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29065182/viewspace-1833377/

你可能感兴趣的:(ORACLE百万数据导入导出解决方法(LOADER、UTL_FILE))