开发者社区> 潜水到明朝> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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

相关文章
Mac下配置Oracle数据库客户端远程连接数据库服务器
下载mac数据库客户端: 地址:http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html 下载这俩个:(来源:http://www.
3213 0
Oracle 数据库性能优化3日实战(企业培训)
课程名称一: Oracle性能优化及调整 课程时长 1天 课程深度: 高级 上机实验: 10%-30% 授课对象: Oracle开发人员、Oracle数据库管理人员,应用程序开发人员 课程描述: 本课程讲述Oracle数据库物理层规划,系统性能的监控,数据库性能参数调整,统计信息的收集,使用自动化调试工具优化数据库,I/O子系统的配置与设计以及性能优化方法论等。
1129 0
增加oracle数据库最大连接数
这几天碰到系统不能登陆的情况,初步判断可能是数据库连接满了,(后来检查不是这个原因),做了一次增加数据库最大连接数操作。操作步骤如下      操作系统:Red Hat Enterprise Linux Server release 6.3 (Santiago)   数据库oracle11g  1,查看当前会话数SQL> conn / as sysdba已连接。
600 0
+关注
潜水到明朝
Just do IT.
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PostgresChina2018_刘成伟_oracle到Postgres数据库迁移工具
立即下载
Oracle 至PostgreSQL案例分享
立即下载
Azure Container Services --The best place to run your workload
立即下载