在 Oracle 数据库中,咱们一般在不一样数据库的表间记录进行复制或迁移时会用如下几种方法:html
sqlloaderOracle用于数据迁移、将数据从外部文件加载到Oracle数据库的表中,它具备强大的数据解析引擎,对数据文件中数据的格式几乎没有限制。sql
基本的组成由:数据库
*.ctl:控制文件,与表信息相关,数据入表的逻辑处理(数据加载信息,解析数据,导入数据信息)windows
*.bad :执行bat后自动生成,错误日志,保存导入文件出现错误的记录并发
*.log :执行bat后自动生成,日志文件,能够查看导入的状况oracle
*.dis:废弃文件app
经常使用的参数命令:函数
ROWS对于传统常规路径(Conventional Path)导入的状况,表明一次提交(Commit)的行数(默认:6 最大值:65534)工具
BINDSIZE大数据
经过配置BINDSIZE的值,加快加载导入效率,并且配置的值要比默认值和经过参数ROWS计算的缓冲区大小更优先。
即BINDSIZE可以制约ROWS,若是ROWS提交的数据须要的缓冲区大于BINDSIZE的配置值,会以BINDSIZE的设定为准※在设定参数时,必定要同时考虑ROWS和BINDSIZE的设定。
READSIZE
读取缓冲区的大小 (适用于传统常规路径和直接路径加载),默认 1048576。READSIZE负责读取的缓冲区大小,而BINDSIZE负责提交的缓冲区大小,若是READSIZE小于BINDSIZE,那么READSIZE会自动增长。
经过设置READSIZE为更大的值,能够在提交前读取更多的数据到Buffer中去
地址:https://www.oracle.com/databa...
下载包:
NOTE:直接下载oracle client客户端便可
使用一个控制文件(*.ctl) 和一个数据文件(*.csv),步骤以下:
create table user_info ( userid int, username varchar2(50), address varchar2(500), sex varchar2(2), phone_number varchar2(13) email varchar2(50), certificate_no VARCHAR2(20) )
01412401,李四,广东深圳龙华,M,13444455568,WJ@email.com,310101198504069999
01412402,张三,广东深圳龙华,M,13444455567,HH@email.com,310101198504069998
01412403,王二,广东深圳福田,M,13444455566,WJ@email.com,310101198504069997
01412404,李达,广东深圳南山,M,13444455565,HH@email.com,310101198504069996
OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的 选项能够写到这里边来,skip=1 用来跳过数据中的第一行 ,rows=128 表明每128行数--据提交一次 LOAD DATA INFILE "/home/oracle/script/users_data.csv" --指定外部数据文件,能够写多 个 INFILE "another_data_file.csv" 指定多个数据文件 --这里还可使 用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件, --truncate --操做类型,用 truncate table 来清除表中原有 记录 append INTO TABLE test_users -- 要插入记录的表,这里插入到另一张表里 Fields terminated by "," -- 数据中每行记录用 "," 分隔 Optionally enclosed by '"' -- 数据中每一个字段用 '"' 框起,好比字段中有 "," 分隔符时 trailing nullcols --表的字段没有对应的值时允 许为空 ( virtual_column FILLER, --这是一个虚拟字段,用来跳 过由 PL/SQL Developer 生成的第一列序号 userid, username, address , phone_number, email , certificate_no )
在操做类型 truncate 位置可用如下中的一值:
- insert :为缺省方式,在数据装载开始时要求表为空
- append:在表中追加新记录
- replace:删除旧记录(用 delete from table 语句),替换成新装载的记录
- truncate :删除旧记录(用 truncate table 语句),替换成新装载的记录
时间类型转换
字段 DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,至关用 to_date() 函数转换
普通版:
在安装好sqlload命令目录中打开CMD命令,
而后再命令行窗口执行:
sqlldr userid=username/password@ip:port/dbName control=d:users_load_data.ctl log=d:userload.log
普通导入速度比较慢,一秒才几条,这样导入跟一条条插入数据差很少,所以应该善用其参数,加快加载导入数据
升级版:
将命令行改为这样:
sqlldr userid=username/password@ip:port/dbName control=d:users_load_data.ctl log=d:userload.log errors=100000 bindsize=8000000 rows=5000
这样能够配置能够在一秒1万条左右,加快导入速度,节省了不少时间。NOTE:
当加载海量数据时(大约超过10GB),最好禁止日志的产生,这样不产生REDO LOG,能够提升效率,在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此选项必需要与DIRECT共同应用.
对于超大数据文件的导入就要用并发操做了,即同时运行多个导入任务.parallel=true
各位看官还能够吗?喜欢的话,动动手指点个💗,点个关注呗!!谢谢支持!
欢迎关注公众号【Ccww技术博客】,原创技术文章第一时间推出