在 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 来很明显
第 1
种方法在记录多时是个噩梦,需三五百条的分批提交,否则客户端会死掉,而且导入过程很慢。如果要不产生
REDO 来提高 insert into
的性能,就要下面那样做:
- alter table B nologging;
-
insert into B(c1,c2)
values(x,xx);
-
insert into B
select * from
A@dblink where
.....;
alter table B nologging;insert into B(c1,c2) values(x,xx);insert
into B select * from A@dblink where .....;
好啦,前面简述了 Oracle
中数据导入导出的各种方法,我想一定还有更高明的。下面重点讲讲
Oracle 的 Sql Loader (sqlldr) 的用法。
在命令行下执行 Oracle
的 sqlldr
命令,可以看到它的详细参数说明,要着重关注以下几个参数:
userid -- Oracle 的
username/password[@servicename]
control --
控制文件,可能包含表的数据
------------------------------------------------------------------------------------------------------------------
log -- 记录导入时的日志文件,默认为
控制文件(去除扩展名).log
bad -- 坏数据文件,默认为
控制文件(去除扩展名).bad
data -- 数据文件,一般在控制文件中指定
errors --
允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip --
跳过的行数,比如导出的数据文件前面几行是表头或其他描述
还有更多的 sqlldr 的参数说明请参考:
sql loader的用法。
用例子来演示 sqlldr
的使用,有两种使用方法:
1.
只使用一个控制文件,在这个控制文件中包含数据
2. 使用一个控制文件(作为模板)
和一个数据文件
一般为了利于模板和数据的分离,以及程序的不同分工会使用第二种方式,所以先来看这种用法。数据文件可以是
CSV 文件或者以其他分割符分隔的,数据文件可以用
PL/SQL Developer 或者 Toad 导出,也可以
用 SQL *Plus 的 spool 格式化产出,或是
UTL_FILE 包生成。另外,用 Toad
还能直接生成包含数据的控制文件。
首先,假定有这么一个表
users,并插入五条记录:
- create table users(
-
user_id number,
-
user_name varchar2(50),
-
login_times number,
-
last_login
date)
create table users( user_id number, user_name varchar2(50),
login_times number, last_login date) |
- insert into users
values(1,'Unmi',3,sysdate);
-
insert into users
values(2,NULL,5,to_date('2008-10-15','YYYY-MM-DD'));
-
insert into users
values(3,'隔叶黄莺',8,to_date('2009-01-02','YYYY-MM-DD'));
-
insert into users
values(4,'Kypfos',NULL,NULL);
-
insert into users
values(5,'不知秋',1,to_date('2008-12-23','YYYY-MM-DD'));
insert into users values(1,'Unmi',3,sysdate); insert into users
values(2,NULL,5,to_date('2008-10-15','YYYY-MM-DD')); insert into
users
values(3,'隔叶黄莺',8,to_date('2009-01-02','YYYY-MM-DD'));
insert into users values(4,'Kypfos',NULL,NULL); insert into users
values(5,'不知秋',1,to_date('2008-12-23','YYYY-MM-DD')); |
第二种方式: 使用一个控制文件(作为模板)
和一个数据文件
1) 建立数据文件,我们这里用 PL/SQL Developer 导出表
users 的记录为 users_data.csv 文件,内容如下:
-
"
","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN"
-
"1","1","Unmi","3","2009-1-5
20:34:44"
-
"2","2","","5","2008-10-15"
-
"3","3","隔叶黄莺","8","2009-1-2"
-
"4","4","Kypfos","",""
-
"5","5","不知秋","1","2008-12-23"
"
","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN""1","1","Unmi","3","2009-1-5
20:34:44""2","2","","5","2008-10-15""3","3","隔叶黄莺","8","2009-1-2""4","4","Kypfos","","""5","5","不知秋","1","2008-12-23"
2) 建立一个控制文件 users.ctl,内容如下:
- OPTIONS
(skip=1,rows=128) -- sqlldr
命令显示的选项可以写到这里边来
-
LOAD DATA
-
INFILE
"users_data.csv"
-
truncate
-
INTO TABLE users
-
Fields terminated by
","
-
Optionally enclosed by
'"'
- trailing nullcols
- (
- virtual_column
FILLER, --跳过由 PL/SQL Developer
生成的第一列序号
-
user_id,
-
user_name,
-
login_times,
- last_login
DATE "YYYY-MM-DD HH24:MI:SS" NULLIF
(last_login="")
- )
OPTIONS (skip=1,rows=128) -- sqlldr
命令显示的选项可以写到这里边来LOAD DATAINFILE
"users_data.csv"truncateINTO TABLE usersFields terminated by
","Optionally enclosed by '"'trailing nullcols(virtual_column
FILLER, --跳过由 PL/SQL Developer
生成的第一列序号user_id,user_name,login_times,last_login
DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login=""))
3) 执行命令:
sqlldr
dbuser/dbpass@dbservice
control=users.ctl
在 dbservice 指示的数据库的表 users
中记录就和数据文件中的一样了。
第一种方式,只使用一个控制文件在这个控制文件中包含数据
1) 把 users_data.cvs 中的内容补到 users.ctl 中,并以
BEGINDATA 连接,还要把 INFILE "users_data.csv" 改为 INFILE
*。此时,完整的 users.ctl 文件内容是:
- OPTIONS
(skip=1,rows=128) -- sqlldr
命令显示的选项可以写到这里边来
-
LOAD DATA
- INFILE *
-
truncate
-
INTO TABLE users
-
Fields terminated by
","
-
Optionally enclosed by
'"'
- trailing nullcols
- (
- virtual_column
FILLER, --跳过由 PL/SQL Developer
生成的第一列序号
-
user_id,
-
user_name,
-
login_times,
- last_login
DATE "YYYY-MM-DD HH24:MI:SS" NULLIF
(last_login="")
- )
- BEGINDATA
-
" ","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN"
-
"1","1","Unmi","3","2009-1-5
20:34:44"
-
"2","2","","5","2008-10-15"
-
"3","3","隔叶黄莺","8","2009-1-2"
-
"4","4","Kypfos","",""
-
"5","5","不知秋","1","2008-12-23"
OPTIONS (skip=1,rows=128) -- sqlldr
命令显示的选项可以写到这里边来LOAD DATAINFILE
*truncateINTO TABLE usersFields terminated by ","Optionally
enclosed by '"'trailing nullcols(virtual_column FILLER, --跳过由
PL/SQL Developer
生成的第一列序号user_id,user_name,login_times,last_login
DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login=""))BEGINDATA"
","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN""1","1","Unmi","3","2009-1-5
20:34:44""2","2","","5","2008-10-15""3","3","隔叶黄莺","8","2009-1-2""4","4","Kypfos","","""5","5","不知秋","1","2008-12-23"
2) 执行一样的命令:
sqlldr
dbuser/dbpass@dbservice
control=users.ctl
未完,待续……
参考:1.
Oracle SQL*Loader
2.
sql loader的用法
3.
使用SQL
Loader导入大量数据,避免使用SQL频繁写库
4.
Oracle SQL Loader的详细语法
5.
oracle sql loader全攻略
6.
SQL*Loader Control File Reference
7.
学习oracle sql loader 的使用
8.
用sqlloader(sqlldr)装载LOB数据
相关推荐
在本篇中,我们将深入探讨Oracle的数据导入导出及Sql Loader的使用方法。 1. **Oracle数据导入导出** Oracle提供了多种数据导入导出工具,包括`expdp`(Export Data Pump)和`impdp`(Import Data Pump)以及传统的...
4. **运行批处理**:双击批处理文件或通过命令行执行,启动SQL*Loader并导入数据。 5. **查看结果**:导入完成后,通过日志文件和错误文件检查导入状态,了解成功记录数、失败记录及原因。 **四、优化技巧** 1. *...
2. SQL*Loader导入数据: SQL*Loader是Oracle用于将数据从外部文件加载到数据库的工具。它的使用流程与SQLULDR2类似,但方向相反: - 创建控制文件,定义要导入的表结构、字段映射等。 - 运行SQL*Loader命令,...
本教程将详细介绍如何使用SQLLoader将Excel数据导出到Oracle数据库。 首先,我们需要理解SQLLoader的工作原理。SQLLoader通过读取控制文件(.ctl文件),这个文件包含了数据加载的规则和配置,如字段的定义、数据...
以下将详细介绍标题“Oracle数据导入导出大全”所涵盖的六种主要方法。 一、 expdp(数据泵导出) 数据泵导出(expdp)是Oracle 10g及更高版本引入的高效数据导出工具。它使用了并行处理,可以快速导出大量数据。...
`sqluldr2`是Oracle数据库系统中一个用于快速数据导入和导出的实用程序,它是`SQL*Loader`的一部分,常被用来批量加载大量数据到Oracle表中,或者将数据从Oracle表中导出。在`4.0.1`这个版本中,可能包含了性能优化...
Windows版的Oracle 10g客户端是专为在Windows操作系统上运行而设计的,它提供了连接到Oracle服务器、执行SQL查询、数据导入导出等功能。在这个"Windows版oracle10g精简客户端(带sqlldr)"中,我们主要关注两个关键...
首先,SQL*Loader是Oracle提供的一种高效的数据加载工具,它可以将外部数据快速地导入到Oracle数据库中。使用SQL*Loader的前提是目标表已经在数据库中创建。基本流程包括创建一个控制文件(.ctl文件),该文件定义了...
Oracle提供了一系列工具和技术,使得用户能够高效地从外部源导入数据,或者将数据库中的数据导出到其他存储介质或系统。在这个过程中,数据的完整性和一致性是至关重要的,因为错误的数据导入导出可能导致数据丢失或...
除了SQL*Loader,还有其他方法可以实现Oracle数据导入,例如使用Oracle SQL Developer Data Pump,这是一个图形界面工具,提供了更直观的导入导出体验。此外,如果你的环境支持,也可以考虑使用ETL(提取、转换、...
4. **数据转换**:在导入数据时,SQL*Loader 可以进行数据类型转换,例如字符串转日期、数值等,同时支持用户自定义的转换函数。 5. **并行加载**:通过多线程或多进程并发加载,SQL*Loader 能够进一步提升导入性能...
在本篇文章中,我们将详细探讨SQL*Loader这一强大的工具,以及如何在DOS环境下使用它,同时也会提及其他数据转移工具和Oracle企业管理器的数据加载功能。 **1. SQL*Loader简介** SQL*Loader是Oracle提供的一款批量...
SQL*Loader是Oracle提供的一个快速数据加载工具,可以从文本文件批量导入数据到数据库中。它通过控制文件(如"InputLost.ctl")定义数据格式和加载规则。控制文件的基本结构包括以下部分: - **LOAD DATA**:声明...
Oracle的快速导出工具SQL*Loader(sqluldr2)是数据库管理员和开发人员常用的工具,用于高效地将大量数据从文本文件导入到Oracle数据库中。这个工具的强大之处在于其灵活性和速度,使得大规模数据迁移变得简单且快速...
下面将详细解释这些工具的使用方法和相关知识点。 1. SQL*Loader: SQL*Loader是Oracle提供的一种快速数据加载工具,可以直接从外部文件批量加载数据到数据库表中。用户需要创建一个控制文件,指定数据文件、字段...
然后,在目标环境使用IMPDP导入数据,同时可能需要进行表空间映射。例如: ``` impdp 用户名/密码 directory=DATA_PUMP_DIR dumpfile=data.dmp logfile=impdp.log remap_tablespace=源表空间:目标表空间 ``` 2....
Oracle SQL*Loader 是一个强大的工具,用于快速地将大量数据从外部文件批量导入到Oracle数据库中。这个工具提供了多种选项和灵活性,使得数据装载过程能够适应各种不同的数据格式和需求。下面我们将深入探讨如何使用...
在IT领域,尤其是在数据库管理与数据导入导出技术中,Oracle SQL*Loader是一个非常重要的工具。SQL*Loader的成功案例不仅展示了其高效的数据加载能力,还体现了它在处理大量数据时的灵活性与可靠性。本文将根据提供...
在IT行业中,数据导入导出是常见的操作,特别是在大数据处理和数据库管理中。`SQL*Loader`是Oracle数据库提供的一款强大的工具,用于快速地将大量数据加载到数据库中。本教程将详细介绍如何利用`SQL*Loader`将CSV...
本文将详细介绍几种常用的导入文本数据到Oracle的方法,包括在DOS环境下使用SQL*Loader命令、利用其他数据库的数据转移工具以及通过Oracle企业管理器的数据加载功能。这些方法各有优势,适用于不同的场景和需求。 #...