`
insertyou
  • 浏览: 901944 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL*Loader使用方法

 
阅读更多

--=====================

-- SQL*Loader使用方法

--=====================

一、SQL*Loader的体系结构

SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括

Input Datafiles -->装载到数据库的原始数据文件

Loader Control file -->提供给QL*Loader寻找及翻译数据的相关信息

Log File -->装载过程中产生的日志信息

Bad Files -->被剔除的一些不合乎规范化的数据,由SQL*Loader剔除,也可能被Oracle剔除

Discard Files -->对不满足控制文件中记录选择标准的一些物理记录

以上五个完整的部分最终将数据导入到数据库,当然,部分组件可以省略。

二、控制文件的作用及组成

控制文件是一个文本文件,控制文件中记录的信息告诉SQL*Loader在哪里寻找数据、如何翻译数据,以及将数据插入到哪里等

控制文件的组成分为三个部分

第一部分主要是关于通外部会话的相关信息

如一些全局选项、行信息、是否跳过特殊记录等

infile子句指明了从哪里寻找源数据

第二部分由一个或多个Into table块,每一个块包含一些被导入表的相关信息,如表名,列名等

第三部分为可选项,如果存在则包含导入的源数据

控制文件写法的注意事项

语法结构自由

不区分大小写

在行开始处使用--来作为注释行,在控制文件中的第三部分使用--来注释不被支持

关键字constant zone被保留

三、数据文件

数据文件可以有多个,这些数据文件需要在控制文件中指定

SQL*Loader角度来看,数据文件中的数据被当做一条条记录

一个数据文件描述数据文件记录有三种可选的格式

固定记录格式

可变记录格式

流记录格式

这些记录格式在控制文件使用infile参数时,如果记录的格式未指定,则缺省的为流记录格式。如使用infile *时则为流记录格式

下面给出几种不同记录格式的例子

a.固定格式:INFILE datafile_name "fix n"

load data

infile 'example.dat' "fix 11" --表明每条记录长度固定为个字节

into table example

fields terminated by ',' optionally enclosed by '"'

(col1, col2)

example.dat:

001, cd, 0002,fghi, --第一条记录为, cd, 第二条记录为,fghi, 其中第二条记录包含了一个换行符

00003,lmn,

1, "pqrs",

0005,uvwx,

b.可变格式:INFILE "datafile_name" "var n"

load data

infile 'example.dat' "var 3" --使用3位来描述一条记录的长度

into table example

fields terminated by ',' optionally enclosed by '"'

(col1 char(5),

col2 char(7))

example.dat:

009hello,cd,010world,im, --009 表明第一条记录的长度为个9字节,表明第二条记录的长度为10个字节等

012my,name is,

c.流记录格式:INFILE datafile_name ["str terminator_string"]

load data

infile 'example.dat' "str '|/n'" --使用| 或换行符来作为一条记录的终止

into table example

fields terminated by ',' optionally enclosed by '"'

(col1 char(5),

col2 char(7))

example.dat:

hello,world,|

james,bond,|

逻辑记录的概念

通常情况下,数据文件中的一条物理记录即是一条逻辑记录,即数据文件的一条记录对应于数据库的一条记录SQL*Loader扩展了该功能可以将多条物理记录形成一条逻辑记录,而由这个组合再来生成一条数据库中的记录

SQL*Loader支持两种策略来形成逻辑记录

组合固定条数的物理记录来形成逻辑记录

将满足特定条件的物理记录组合并形成逻辑记录

四、数据文件装载方式

1.传统路径导入

使用生成SQL Insert语句来处理源数据,并且通过commit提交保存数据。每次数据导入将产生一些事务

在插入数据时寻找可用数据块,然后将数据填充到数据块

在插入到分区表的单个分区时使用下面的语法

INSERT INTO TABLE T PARTITION (P) VALUES ...

基于多cpu系统使用多个装载会话执行并发。即将数据文件分割为多个来装载

2.直接路径导入

直接将数据写到Oracle数据文件,并更所使用块的高水位线标记来保存数据

支持数据的并行导入

直接路径导入期间,数据转换发生在客户端而非服务器端。即位于服务器端参数文件中NLS参数不会被使用

可以通过在控制文件中设置NLS参数或设置服务器端合适的环境变量,如下面的例子

HIREDATE DATE 'YYYYMMDD' --为控制文件中的HIREDATE指定格式

% export NLS_DATE_FORMAT='YYYYMMDD' --在服务器端设定NLS_DATE_FORMAT

直接路径装载单个分区或子分区,装载期间的其它分区可以执行DML操作

LOAD INTO TABLE T PARTITION (P) VALUES ...

LOAD INTO TABLE T SUBPARTITION (P) VALUES ...

使用直接路径装载时,需要指定DIRECT=true

支持两种不同的并发

1.同时装载到分区表表的不同分区或同时装载到不同的表

2.分成多个服务器装载到分区表的单个分区或单个表,最后将装载的临时段合并保存到分区或表

3.两者对比(下面描述中传统导入方式称为前者,直接导入方式称为后者)

a.前者使用commit来保存数据,后者更新高水位线标记保存数据

b.前者产生redo记录,后者基于特定的条件产生redo记录

c.前者强制所有的约束,后者仅仅强制primary key,unique,not null约束

d.前者将触发insert触发器,后者不会触发insert触发器

e.前者支持簇表,后者不支持簇表

f.前者插入数据时其它用户可以DML表,后者则不行

五、演示SQL*Loader

1.SQL*Loader可执行程序(sqlldr)所在的位置

[oracle@oradb ~]$ ls -lh $ORACLE_HOME/bin/sql*

-rwxr-x--x 1 oracle oinstall 634K Sep 13 20:01 /u01/app/oracle/10g/bin/sqlldr

2.查看sqlldr的帮助信息,

[oracle@oradb ~]$ sqlldr

SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 10:38:31 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Usage: SQLLDR keyword=value [,keyword=value,...]

Valid Keywords:

userid -- ORACLE username/password

control -- control file name

log -- log file name

bad -- bad file name

data -- data file name

discard -- discard file name

discardmax -- number of discards to allow (Default all)

skip -- number of logical records to skip (Default 0)

load -- number of logical records to load (Default all)

errors -- number of errors to allow (Default 50)

rows -- number of rows in conventional path bind array or between direct path data saves

(Default: Conventional path 64, Direct path all)

bindsize -- size of conventional path bind array in bytes (Default 256000)

silent -- suppress messages during run (header,feedback,errors,discards,partitions)

direct -- use direct path (Default FALSE)

parfile -- parameter file: name of file that contains parameter specifications

parallel -- do parallel load (Default FALSE)

file -- file to allocate extents from

skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (Default FALSE)

skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (Default FALSE)

commit_discontinued -- commit loaded rows when load is discontinued (Default FALSE)

readsize -- size of read buffer (Default 1048576)

external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (Default NOT_USED)

columnarrayrows -- number of rows for direct path column array (Default 5000)

streamsize -- size of direct path stream buffer in bytes (Default 256000)

multithreading -- use multithreading in direct path

resumable -- enable or disable resumable for current session (Default FALSE)

resumable_name -- text string to help identify resumable statement

resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)

date_cache -- size (in entries) of date conversion cache (Default 1000)

PLEASE NOTE: Command-line parameters may be specified either by

position or by keywords. An example of the former case is 'sqlldr

scott/tiger foo'; an example of the latter is 'sqlldr control=foo

userid=scott/tiger'. One may specify parameters by position before

but not after parameters specified by keywords. For example,

'sqlldr scott/tiger control=foo logfile=log' is allowed, but

'sqlldr scott/tiger control=foo log' is not, even though the

position of the parameter 'log' is correct.

3.将数据文件和控制文件组合在一起

[oracle@oradb ~]$ cat sqlldr_demo/demo1.ctl

LOAD DATA

INFILE *

INTO TABLE DEPT

FIELDS TERMINATED BY ','

(DEPTNO, DNAME, LOC )

BEGINDATA

10,Sales,Virginia

20,Accounting,Virginia

30,Consulting,Virginia

40,Finance,Virginia

SQL> show user;

USER is "ROBINSON"

SQL> create table dept

2 (deptno number(2) constraint dept_pk primary key,

3 dname varchar2(20),

4 loc varchar2(20));

Table created.

[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 11:29:34 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Commit point reached - logical record count 4

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------------- --------------------

10 Sales Virginia

20 Accounting Virginia

30 Consulting Virginia

40 Finance Virginia

4.将数据文件和控制文件分离实现数据装载

[oracle@oradb sqlldr_demo]$ cat demo1.ctl demo1.data --查看分离后两者的内容

LOAD DATA

INFILE demo1.data

INTO TABLE DEPT

FIELDS TERMINATED BY ','

(DEPTNO, DNAME, LOC )

10,Sales,Virginia

20,Accounting,Virginia

30,Consulting,Virginia

40,Finance,Virginia

[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl log=demo1.log

SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 12:21:35 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL*Loader-601: For INSERT option, table must be empty. Error on table DEPT

SQL> truncate table dept; --收到了SQL*Loader-601错误提示,清空原表

[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl log=demo1.log

SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 12:22:39 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Commit point reached - logical record count 4 --再次正常导入

六、更多参考

Oracle 冷备份

SPFILE错误导致数据库无法启动

Oracle 用户、对象权限、系统权限

Oracle 角色、配置文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 表空间与数据文件

Oracle 归档日志

分享到:
评论

相关推荐

    SQL*Loader详细介绍

    4. **运行SQL*Loader** 使用命令行工具sqlldr或通过PL/SQL调用DBMS_LOADER包来执行SQL*Loader。命令行语法大致如下: ``` sqlldr user/pass@database control=control_file_name data=data_file_name ``` 5. **...

    SQL*Loader.zip

    "SQL*Loader.zip"可能包含了一份关于如何使用SQL*Loader的详细指南,如"SQL*Loader.pdf"。 SQL*Loader的核心在于控制文件,它是整个数据加载过程的关键。控制文件以纯文本格式编写,定义了数据文件的位置、数据字段...

    sql*loader 指南

    ### SQL*Loader 指南:语法...以上介绍了SQL*Loader的基本用法及控制文件的编写方法,通过合理配置控制文件,可以实现高效的数据导入。同时,SQL*Loader还提供了丰富的数据转换功能,使得数据加载过程更加灵活和可控。

    SQL*Loader-Oracle高速数据装入最佳工具软件.pdf

    标题:“SQL*Loader-Oracle高速数据装入最佳工具软件....对于数据库管理员或数据处理人员来说,了解和熟练使用SQL*Loader工具是十分必要的,这不仅能够提高工作效率,还可以保证数据装载过程的稳定性和数据的一致性。

    SQL*Loader

    SQL*Loader通过直接路径加载方法,可以显著提高数据导入速度,减少对数据库资源的占用。 在SQL*Loader操作过程中,主要涉及以下几个核心概念: 1. 控制文件(Control File):这是SQL*Loader的核心,定义了如何将...

    SQL LOADER错误小结

    在使用SQL*Loader进行数据加载时,我们可能会遇到多种错误情况。SQL*Loader是一个Oracle数据库提供的工具,用于高效地从平面文件批量导入数据。以下是一些常见错误的总结及其解决方案: 1. **编码错误导致的乱码...

    oracle -sqlloader使用方法

    ### Oracle SQL*Loader 使用方法详解 #### 一、SQL*Loader 概览 SQL*Loader 是 Oracle 数据库中用于批量导入外部数据至数据库的强大工具。它不仅具备与 DB2 Load 工具类似的功能,还提供了更为灵活的加载选项,...

    SQL * Loader的使用技巧.pdf

    在使用SQL*Loader之前,需要准备两份关键文件:数据文件和控制文件。 数据文件通常包含待导入的数据,其格式可以灵活定制。例如,数据文件可能包含定长或变长格式的数据,用户可以根据数据的具体需求决定如何抽取和...

    基于SQL*Loader的海量数据装载方案优化.pdf

    本文档将深入探讨如何针对大规模数据装载场景优化SQL*Loader的使用,以提高数据处理效率和性能。 首先,理解SQL*Loader的工作原理是优化的基础。SQL*Loader通过读取控制文件(.ctl文件)来确定如何解析输入数据,并...

    使用SQL*Loader将dBASE数据转储到ORACLE数据库.pdf

    4. **运行SQL*Loader**:执行SQL*Loader命令,指定数据文件和控制文件路径。 5. **检查结果**:分析运行情况记录文件和坏文件,处理错误或遗漏的数据。 6. **重试或优化**:根据错误记录,修复数据文件或调整控制...

    sqlloader

    ### SQL*Loader:高效数据...熟练掌握其使用方法,将显著提高数据迁移和更新的效率,同时降低数据处理过程中的错误率。无论是处理大规模数据导入任务,还是应对复杂的数据转换需求,SQL*Loader都是一个值得信赖的选择。

    sqlloader详解

    控制文件的语法复杂,具体使用方法需参考《Oracle服务器工具手册》。 ##### 2. 输入数据格式 SQL*Loader能够处理多种格式的数据文件,包括磁盘或磁带上的文件,甚至记录可以直接嵌入控制文件中。支持固定长度记录...

    Oracle数据库装载外部数据工具SQL*Loader的应用 (1).pdf

    在使用SQL*Loader时,用户需要编写控制文件,其中包含SQL*Loader数据定义语言(DDL),定义字段名称、数据类型、转换规则等。此外,还可以通过命令行参数设置错误处理策略,如忽略错误、停止加载或者将错误记录到...

    sqlloader的成功案例

    在IT领域,尤其是在数据库管理与数据导入导出技术中,Oracle SQL*Loader是一个非常重要的工具。...对于数据库管理员和开发人员而言,熟练掌握SQL*Loader的使用技巧,无疑将极大地提升工作效率,降低数据处理成本。

    Oracle数据库装载外部数据工具SQL*Loader的应用.pdf

    Oracle数据库是一个广泛使用的大型关系数据库系统,其管理与维护工作是数据库管理员(DBA)日常工作的重要部分。...通过掌握SQL*Loader的使用方法,可以有效地进行数据的批量导入,提高数据处理的效率。

    如何使用ORACLE中的SQL*LOADER.pdf

    3. **运行SQL*Loader**: 在命令行中,使用以下命令运行SQL*Loader: ``` sqlldr username/password@database CONTROL=control_file.ctl ``` 这里的`username`、`password`和`database`应替换为实际的Oracle...

    SQL_LOADER教程

    ### SQL_LOADER教程详解 #### 一、SQL*LOADER简介 SQL*LOADER是Oracle提供的一款高效的数据加载工具,主要用于将操作...通过本教程的学习,希望读者能够快速掌握SQL*LOADER的使用方法,并能够熟练应用于实际工作中。

    SQL_LOADER例子

    这个“SQL_LOADER例子”提供了一个实际操作的示例,可以帮助我们更深入地理解SQL*Loader的工作原理和使用方法。 首先,SQL*Loader通过控制文件(.ctl文件)来定义数据加载的过程。控制文件包含了一系列指令,如表名...

    sqlloader数据导入详解

    综上所述,SQL*Loader 是 Oracle 数据库中非常强大的数据导入工具,掌握其使用方法对于日常的数据管理至关重要。通过合理配置控制文件、理解数据文件格式,并利用其高级特性,可以极大地提高数据导入的效率和准确性...

    sqlloader使用教程

    通过上述介绍,我们不仅了解到SQL*Loader的基本使用方法,还深入探讨了控制文件的构建技巧,以及如何针对不同数据格式进行高效的数据加载。SQL*Loader的强大功能使其成为Oracle数据库用户在数据迁移、批量导入等场景...

Global site tag (gtag.js) - Google Analytics