Oracle sqlload加载数据

2014-11-24 18:49:04 · 作者: · 浏览: 0

1、A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中。


2、建立数据库间的 dblink,然后用 create table B as select * from A@dblink where ...,或 insert into B select * from A@dblink where …。


3、exp A 表,再 imp 到 B 表,exp 时可加查询条件。


4、程序实现 select from A ..,然后 insert into B ...,也要分批提交。


5、Sql Loader(sqlldr) 来导入数据,效果比起逐条 insert 来很明显。


二、在命令行下执行 Oracle 的 sqlldr 命令,可以看到它的详细参数说明:


Username -- Oracle数据库名 。


Password -- Oracle数据库密码。


Servicename -- 是Oracle服务实例名 。


Control -- 控制文件,可能包含表的数据。


Log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log。


Bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad。


Data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作。


Errors -- 允许的错误记录数,可以用他来控制一条记录都不能错。


Rows -- 多少条记录提交一次,默认为 64。


Skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述。


Insert -- 为缺省方式,在数据装载开始时要求表为空


Append -- 在表中追加新记录


Replace -- 删除旧记录(用 delete from table 语句),替换成新装载的记录


Truncate -- 删除旧记录(用 truncate table 语句),替换成新装载的记录


OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行,每128行提交一次


Fields terminated by "," -- 字段间隔为“,”


Optionally enclosed by '"' – 行记录间隔


Trailing nullcols -- 表的字段没有对应的值时允许为空



三、sqlldr 的使用,有两种使用方法:


1、只使用一个控制文件,在这个控制文件中包含数据。


2、使用一个控制文件(作为模板) 和一个数据文件。


一般为了利于模板和数据的分离,以及程序的不同分工会使用第二种方式。



四、举例:


此处使用第二种方法


建表file_list:


create table file_list


(


file_id number,


file_name varchar2(250),


created_date date


) ;


创建数据文件file_list.data


15968600^025_value_added_0_201011301014_030937.Tdat^2010-11-30 10:18:20


15968572^025_call_0_201011301012_030907.Tdat^2010-11-30 10:16:16


15968596^025_data_0_201011301015_030964.Tdat^2010-11-30 10:17:53


创建控制文件file_list.ctl


OPTIONS (ROWS=1000)


load data


infile 'E:\ file_list.dat'


BADFILE 'E:\log\error.bad'


replace into table file_list


fields terminated by '^'


trailing nullcols


(


FILE_ID


,FILE_NAME


,CREATED_DATE DATE "YYYY-MM-DD HH24:MI:SS"


)



五、运行:


点击开始->运行 键入cmd


执行以下命令:


E:\>sqlldr username/password@servicename control=file_list.ctl