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

相关文章
|
7月前
|
Oracle 关系型数据库 数据库
Oracle中merge Into的用法
Oracle中merge Into的用法
|
7月前
|
SQL Oracle 关系型数据库
Oracle系列十七:Sqluldr2与Sqlldr
Oracle系列十七:Sqluldr2与Sqlldr
|
2月前
|
SQL 存储 Oracle
Oracle用法
【10月更文挑战第15天】Oracle用法
42 5
|
7月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
5月前
|
Oracle 关系型数据库 Java
Oracle数据库导入工具IMP详解与用法
Oracle数据库导入工具IMP详解与用法
|
6月前
|
Oracle 关系型数据库 Java
Oracle数据库导入工具IMP详解与用法
Oracle数据库导入工具IMP详解与用法
|
7月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
Oracle 关系型数据库
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
140 0
|
SQL Oracle 关系型数据库
Oracle 中 Translate的用法
Oracle 中 Translate的用法
112 0
|
存储 Oracle 关系型数据库
Oracle行转列函数PRINT_TABLE的用法
Oracle行转列函数PRINT_TABLE的用法
141 0

推荐镜像

更多