- 论坛徽章:
- 0
|
哪位兄弟介绍一下SQLLDR?
1、导出数据:在SQLPLUS中将需要导入的表使用带格式(比如”^”)的查询将其输出到文件文件,然后在文本文件去掉无用的部分,特别是表中过多的空格。这里需要注意SQLPLUS中调整几个参数:比如是否显示输出内容、每一页的输出行数、每一行的输出宽度(这两个参数非常重要,如果行数和输入宽度不设置好,可能导致LOADER装入出错)等等;
2、在需要装入的数据库中创建与导出表完全一样的表结构;
3、书写控制文件:格式如下(文件仅只考虑控制文件和数据分开的方式):
load data
infile '带路径的数据' /* 请注意文件必须带上路径和文件名 */
preserve blanks
into table 表名 append /* 表示在LOADER过程中将数据装入的表名 */
fields terminated by '^'
TRAILING NULLCOLS
4、正式装入:SQLLDR 用户名/口令 control=控制文件名[.ctl] [bad=日志文件[.bad]]
例:
第一步:
SQL>;connect scott/tiger
SQL>;set heading off
SQL>;set linesize 20 /* 根据输入的行宽自己确定 */
SQL>;set pagesize 5000 /* 根据不同的ORACLE确定 */
SQL>;spool c:\emp.txt
SQL>;select empno||'^'||ename||'^'||job||'^'||mgr||'^'||hiredate||'^'||sal||'^'||comm||'^'||deptno from emp;
SQL>;spool off
第二步:
Create table empbak (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2))
第三步:
LDREMP.CTL
load data
infile 'C:\EMP.TXT'
preserve blanks
into table empbak append
fields terminated by '^'
TRAILING NULLCOLS
(
EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
)
第四步:
SQLLDR scott/tiger control=c:\ldremp.ctl bad=c:\ldremp.bad direct=true [说明:如果没有此参数,装载时会检查INSERT触发器和相关约束]
另外:如果一个表的数据内容太多,可以考虑使用并行装载,即将以前的一个数据文件撤分为多个,用多线程同时装载,速度会更快。 |
|