欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Win10使用sqlldr录入大量数据到远程Oracle数据库

程序员文章站 2022-07-13 13:37:19
...

背景

在别的机器配置了Oracle数据库,本机配置了Oracle客户端。今天刚好要录一份1000w的数据到Oracle数据库测试程序,Google一番之后,初定两种录入方式:

  • Navicat直接导入。有图形界面,傻瓜式操作,但速度稍微慢了些,1000w的数据录了2小时。
  • 通过sqlldr工具批量录入。1000w大概10分钟录完,不过要写个ctl文件。

配置sqlldr

顺便提下怎么配置Oracle客户端,先到Oracle客户端下载图中标识的几个文件,sqlldr工具在instantclient-tools-windows.x64-12.2.0.1.0.zip
Win10使用sqlldr录入大量数据到远程Oracle数据库将这几个文件解压成一个文件夹,可以看到instantclient_12_2文件夹中有
sqlldr.exeWin10使用sqlldr录入大量数据到远程Oracle数据库
Win10使用sqlldr录入大量数据到远程Oracle数据库
Win10使用sqlldr录入大量数据到远程Oracle数据库
instantclient_12_2中新建文件夹network\admin,然后在里面新建tnsnames.ora文件,结合自身情况写入以下内容,再配置好环境变量。
Win10使用sqlldr录入大量数据到远程Oracle数据库

服务器连接别名 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = 通讯协议)(HOST = 远程服务器IP地址)(PORT = 监听端口))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 数据库服务名称)
    )
  )

测试sqlldr,运行正常。
Win10使用sqlldr录入大量数据到远程Oracle数据库

编写ctl

参考sqlldr的用法 (这个最完整),了解大概语法。
示例:

OPTIONS (SKIP=1,ROWS=128)
LOAD DATA
INFILE '待录入数据.csv'
APPEND
INTO TABLE 目标表名称
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
    field_1,
    field_2,
    field_3
)

需要注意的一些点:

# 录入方式
insert,默认模式,要求目标表为空
append,追加内容
truncate,清空目标表再录入

# 可选项
trailing nullcols,表字段没有对应的值时允许为空

# 文件分隔符
txt是空格,即'\t'
csv是逗号,即','

录入数据

Oracle数据库装在远程服务器,我本机只是使用Oracle客户端进行连接,所以需要给出远程服务器信息,如下:

格式:sqlldr dbuser/aaa@qq.com远程服务器IP:端口/服务名称 control=ctl文件名

sqlldr test/aaa@qq.com:1521/testss control=start.ctl

Win10使用sqlldr录入大量数据到远程Oracle数据库
如果在使用sqlldr插入数据时发生错误,可以查看对应的日志文件追踪问题,通常是字段类型、字段大小不匹配、文件分隔符的问题。
Win10使用sqlldr录入大量数据到远程Oracle数据库

相关标签: sqlldr oracle