Oracle之sqlldr sqluldr用法-阿里云开发者社区

开发者社区> 潜水到明朝> 正文

Oracle之sqlldr sqluldr用法

简介: Oracle之sqlldr sqluldr用法
+关注继续查看

1.sqlldr的用法

在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:

  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 来很明显

下面主要介绍Sql Loader(sqlldr) 来导入数据。
在命令行下执行 Oracle 的 sqlldr 命令,可以看到它的详细参数说明,要着重关注以下几个参数:

userid -- Oracle 的 username/password[@servicename]
control -- 控制文件,可能包含表的数据
log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述

首先:建立一个控制文件 data.ctl,内容如下:

load data
CHARACTERSET UTF8  
infile "/data/all_zc_pro/tmp01/data01.txt"            --指定外部数据文件
append                                         --操作类型,在表中追加新记录
into table TEMP_LH_FDD_USER                       -- 要插入记录的表
fields terminated by '|'                    --数据分隔的方式,“|”
trailing nullcols                              --表的字段没有对应的值时允 许为空
(                                                   --对应的字段
    PROV_ID,
    DEVICE_NUMBER,
    IMEI,
    FLUX,
    FLUX_4G,
    FLUX_TDD
)

说 明:在操作类型 append 位置可用以下中的一值:

1) insert --为缺省方式,在数据装载开始时要求表为空
2)truncate --用 truncate table 来清除表中原有 记录
3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录

执行语句:

sqlldr userid=ZBG_D/ZBG_DA02@DSSDE control=/data/all_zc_pro/data.ctl log=/data/all_zc_pro/zc/zc_dwa/log20161020.log  bad=/data/all_zc_pro/zc/zc_dwa/bad20161020.log 

如果数据量很大,可以再加两个参数:direct=ture rows=10000000 rows参数是一次加载的行数

2.sqluldr的用法

Oracle数据导出工具sqluldr可以将数据以csv、txt等文件格式导出,适用于大批量数据的导出,导出速度非常快,导出后可以使用Oracle SQL Loader工具将数据导入到数据库中。

执行语句:

sqluldr USER=ZBG_D/ZBG_D0812@DSSDWE query="SELECT DEVICE_NUMBER,IMSI FROM ZBG_DWA.DWA_V_D_CUS_NM_USER_IMSI_011 " rows=100000 field="0x7C" safe="yes" file=/data/all_zc_pro/zc/zc_dwa/ks_imsi_device.txt; 

Field 分隔符 指定字段分隔符,默认为逗号

在指定分隔符时,可以用字符的ASCII代码(0xXX,大写的XX为16进制的ASCII码值)来指定一个字符,常用的字符的ASCII代码如下:
回车=0x0d,换行=0x0a,TAB键=0x09,|=0x7c,&=0x26,双引号=0x22,单引号=0x27

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【原】java应用程序连接Oracle rac的URL写法
作者:david_zhang@sh 【转载时请以超链接形式标明文章】 链接:http://www.cnblogs.com/david-zhang-index/archive/2012/07/18/2597573.
880 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9492 0
oracle nologging用法(转)
一、oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nologging是尽量减少日志。
887 0
Oracle group by 用法实例详解
1. Group by的语法 Select [filed1,fild2,]聚合函数(filed), [Grouping(filed),] [Grouping_id(filed1,fi...
1075 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10843 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13176 0
+关注
潜水到明朝
Just do IT.
10
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载