Linux下Oracle大批量文件导入:通过ctl文件load data

1.概述

通过plsql导入txt或者csv等文件,存在诸多限制:无法导入巨大数据量的文件(如G以上文件);导入效率低下。
实际工作汇中,Oracle存在与服务器上,服务器基本是Linux操作系统,如下我们将介绍如何通过在linux环境中通过ctl文件load data。

2.具体步骤

2.1找到tnsnames.ora文件并查看服务名

第一步是找到服务器中Oracle的tnsnames.ora文件。并查看其服务名service_name.

路径:
/data/oracle/product/11.2.0.4/db_1/network/admin
服务名:
可以看到服务名service_name为jsdxkf

2.2上传数据

将我们需要上传的数据放置到服务器,并解压

2.3创建测试文件

如果直接导入真实数据,数据量过大,不利于测试。我们可以创建一个很小的测试数据:
如下,我们取出前十条数据,并作为test文件

head output.csv -n 10 > test.csv

2.4创建ctl文件

这一步骤是最为重要的步骤。
我们在test所在的路径下,创建一个ctl文件,文件内容:

load data
infile '/data/test.csv'
append into table  kf_session
fields   terminated   by   ','
(  session_id  ,
   flag,
   line_num,
   content char(4000)
)

解释:
infile:导入文件
append replace 也可以换位append into,一个是追加,一个是替换。
kf_session是要导入的表名。
‘,’是分隔符。

这里的char(4000)需要特别注意:
ctl中规定,字段超过256字节需要在ctl中写明字段类型长度。如果不指定,或报错,如下:

记录 243: 被拒绝 - 表 KF_SESSION 的列 CONTENT 出现错误。
数据文件的字段超出最大长度
记录 244: 被拒绝 - 表 KF_SESSION 的列 CONTENT 出现错误。
数据文件的字段超出最大长度
记录 1278: 被拒绝 - 表 KF_SESSION 的列 CONTENT 出现错误。
数据文件的字段超出最大长度
记录 1485: 被拒绝 - 表 KF_SESSION 的列 CONTENT 出现错误。

2.5执行

首先到文件所在路径,即infile所在路径,执行一下语句:

sqlldr jsdxkf/db4JSDX-KFznfx@jsdxkf control=a.ctl log=a.log

如果权限不足,请切换相关Oracle用户。

sudo - oracle

你可能感兴趣的:(Linux下Oracle大批量文件导入:通过ctl文件load data)