`

数据批量导入Oracle数据库

阅读更多
今天学习了一个新的东西,觉得还挺有意思的,也是从别出COPY 的,

SQL*LOADER是大型数据
仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。现在,我们抛开其理论不谈,用实例来使
您快速掌握SQL*LOADER的使用方法。
  首先,我们认识一下SQL*LOADER。
  在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。
  如执行:d:\oracle>sqlldr
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 11:06:42 2002
(c) Copyright 1999 Oracle Corporation.  All rights reserved.

用法: SQLLOAD 关键字 = 值 [,keyword=value,...]
有效的关键字:
    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        (全部默认)
      skip -- Number of logical records to skip  (默认0)
      load -- Number of logical records to load  (全部默认)
    errors -- Number of errors to allow          (默认50)
      rows -- Number of rows in conventional path bind array or between direct p
ath data saves
(默认: 常规路径 64, 所有直接路径)
  bindsize -- Size of conventional path bind array in bytes(默认65536)
    silent -- Supdivss messages during run (header,feedback,errors,discards,part
itions)
    direct -- use direct path                    (默认FALSE)
   parfile -- parameter file: name of file that contains parameter specification
s
  parallel -- do parallel load                   (默认FALSE)
      file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默认FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(默认FALSE)
commit_discontinued -- commit loaded rows when load is discontinued(默认FALSE)
  readsize -- Size of Read buffer                (默认1048576)
PLEASE NOTE: 命令行参数可以由位置或关键字指定。
前者的例子是 'sqlload scott/tiger foo';
后者的例子是 'sqlload control=foo userid=scott/tiger'.
位置指定参数的时间必须早于但不可迟于由关键字指定的参数。例如,
'SQLLOAD SCott/tiger control=foo logfile=log',
但'不允许 sqlload scott/tiger control=foo log',
即使允许参数 'log' 的位置正确。
d:\oracle>
      我们可以从中看到一些基本的帮助信息,这里,我用到的是中文的WIN2000 ADV SERVER。
  我们知道,SQL*LOADER只能导入纯文本,所以我们现在开始以实例来讲解其用法。
  一、已存在数据源result.csv,欲倒入ORACLE中FANCY用户下。
    result.csv内容:
  1,默认 Web 站点,192.168.2.254:80:,RUNNING
  2,other,192.168.2.254:80:test.com,STOPPED
  3,third,192.168.2.254:81:thirdabc.com,RUNNING
  从中,我们看出4列,分别以逗号分隔,为变长字符串。
  二、制定控制文件result.ctl
        result.ctl内容:
load data
infile 'result.csv'
into table resultxt
(resultid char terminated by ',',
website char terminated by ',',
ipport char terminated by ',',
status char terminated by whitespace)
  说明:
  infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc  badfile  result.bad
  into table resultxt 默认是INSERT,也可以into table resultxt APPEND为追加方式,或REPLACE
  terminated by ',' 指用逗号分隔
  terminated by whitespace 结尾以空白分隔
  三、此时我们执行加载:
D:\>sqlldr userid=fancy/testpass control=result.ctl log=resulthis.out
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:25:42 2002
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
SQL*Loader-941:  在描述表RESULTXT时出现错误
ORA-04043: 对象 RESULTXT 不存在
  提示出错,因为数据库没有对应的表。
  四、在数据库建立表
   create table resultxt
  (resultid varchar2(500),
   website varchar2(500),
   ipport varchar2(500),
   status varchar2(500))
/

五、重新执行加载
  D:\>sqlldr userid=fancy/k1i7l6l8 control=result.ctl log=resulthis.out
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
达到提交点,逻辑记录计数2
达到提交点,逻辑记录计数3
  已经成功!我们可以通过日志文件来分析其过程:resulthis.out内容如下:
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
控制文件: result.ctl
数据文件: result.csv
错误文件: result.bad
废弃文件: 未作指定
:
(可废弃所有记录)
装载数: ALL
跳过数: 0
允许的错误: 50
绑定数组: 64 行,最大 65536 字节
继续:    未作指定
所用路径:       常规
表RESULTXT
已载入从每个逻辑记录
插入选项对此表INSERT生效
   列名                        位置      长度  中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
RESULTID                            FIRST     *    ,      CHARACTER           
WEBSITE                              NEXT     *    ,      CHARACTER           
IPPORT                               NEXT     *    ,      CHARACTER           
STATUS                               NEXT     *  WHT      CHARACTER           

表RESULTXT:
3 行载入成功
由于数据错误, 0 行没有载入。
由于所有 WHEN 子句失败, 0 行没有载入。
由于所有字段都为空的, 0 行没有载入。

为结合数组分配的空间:    65016字节(63行)
除绑定数组外的内存空间分配:         0字节
跳过的逻辑记录总数:        0
读取的逻辑记录总数:        3
拒绝的逻辑记录总数:        0
废弃的逻辑记录总数:        0
从星期二 1月  08 10:31:57 2002开始运行
在星期二 1月  08 10:32:00 2002处运行结束
经过时间为: 00: 00: 02.70
CPU 时间为: 00: 00: 00.10(可


  六、并发操作
  sqlldr userid=/ control=result1.ctl direct=true parallel=true
   sqlldr userid=/ control=result2.ctl direct=true parallel=true
   sqlldr userid=/ control=result2.ctl direct=true parallel=true
    当加载大量数据时(大约超过10GB),最好抑制日志的产生:
  SQL>ALTER TABLE RESULTXT nologging;
    这样不产生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面加一行:unrecoverable
    此选项必须要与DIRECT共同应用。
  在并发操作时,ORACLE声称可以达到每小时处理100GB数据的能力!其实,估计能到1-10G就算不错了,开始可用结构
    相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。


我的示例:
一、在数据库建立表格weather如下:
create table weather(
outlook varchar(20),
temperature float,
humidity float,
windy varchar(10),
play varchar(10)
)
二、在F盘建立两个文件 分别如下:
#1、result.ctl内容如下:
load data
infile 'result.csv'
into table weather
(outlook char terminated by ',',
temperature  char terminated by ',',
humidity char terminated by ',',
windy char terminated by ',',
play char terminated by ','
)

#2、result.csv内容如下:
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no
三、命令行下执行
F:\>sqlldr userid=cqsb/ctbujx123  control=result.ctl

四、搞定
分享到:
评论

相关推荐

    图片批量导入oracle数据库

    本话题聚焦于如何批量导入图片到Oracle数据库,这是一种常见的需求,特别是在处理大量图像数据的项目中。Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object...

    利用plsql把excel的数据批量导入oracle数据库的顺序.docx

    本文将详细阐述如何利用PL/SQL Developer工具将Excel中的数据批量导入到Oracle数据库,以及如何处理遇到的问题。 首先,准备工作至关重要。你需要确保拥有一个包含待导入数据的Excel文档,并且在Oracle数据库中已经...

    excel批量导入oracle数据库

    本文将详细讲解如何使用Excel批量导入Oracle数据库,这是一个常见的需求,特别是在数据分析和报表生成等领域。 首先,我们需要了解Excel和Oracle数据库的基本概念。Excel是一款由Microsoft开发的电子表格应用程序,...

    如何通过txt文件批量导入数据到oracle数据库

    通过以上步骤,我们可以有效地将TXT文件中的数据批量导入到Oracle数据库。这不仅提高了工作效率,还降低了因手动操作引发的错误概率。在实际工作中,理解并熟练运用这些方法,对于数据库管理和数据分析具有很大的...

    excel导入数据到Oracle数据库

    ### Excel导入数据到Oracle数据库详解 #### 一、前言 在日常工作中,我们经常会遇到需要将Excel中的数据批量导入到Oracle数据库的情况。...希望本文能帮助大家更好地理解和掌握Excel导入Oracle数据库的操作流程。

    MSSQL数据导入Oracle数据库的工具

    该工具可以将MSSQL数据库中的数据批量导入Oracle数据库中,欢迎使用!

    C#实现Oracle数据批量导入

    C#实现Oracle数据批量导入 在本文中,我们将讨论如何使用C#语言实现对Oracle数据库的批量数据导入功能。本文的主要内容包括如何使用Oracle.DataAccess.Client命名空间来实现批量导入功能,以及如何使用SqlBulkCopy...

    logstash5.6.1向es导入oracle数据库数据

    通过以上步骤,你可以成功地利用Logstash 5.6.1将Oracle数据库中的数据导入到Elasticsearch,实现数据的实时或定期同步,为后续的数据分析和应用提供基础。在这个过程中,理解每个环节的配置选项和逻辑是至关重要的...

    Ecxel数据导入Oracle 数据库中

    总结来说,Excel数据导入Oracle数据库涉及到的主要知识点包括: 1. Excel文件格式和数据结构的理解。 2. Oracle数据库的基础知识,如SQL语法、JDBC驱动的使用。 3. 编程语言(如Java或Python)处理文件和数据库操作...

    把mysql数据库中的数据导入到oracle数据库中

    ### 把MySQL数据库中的数据导入到Oracle数据库中的详细步骤与注意事项 #### 一、环境配置与需求概述 本文档旨在详细介绍如何将MySQL数据库中的数据迁移到Oracle数据库中,包括具体的环境配置、迁移流程以及可能...

    c#批量导入excel数据到oracle数据库.rar

    在IT行业中,数据库管理和数据处理是至关重要的环节。本资源包提供了一个实用的解决方案,即使用C#编程语言批量导入Excel数据到...对于需要处理大量Excel数据并导入Oracle数据库的项目,这是一个非常实用的技术方案。

    C# 通过oracle sqlldr 将TXT批量导入oracle

    C# 通过oracle sqlldr 将TXT批量导入oracle 一个文件夹里有大量的TXT文件,以"~"区分各字段. 这个程序能批量将此文件夹里的所有的文件导入oralce 并按日期把已导入的TXT文件复制另一个文件夹

    PROC++批量导入导出ORACLE数据库表[借鉴].pdf

    该方法使用C++ Builder 5.5和PROC++语言,实现了从ORACLE数据库中批量导入和导出数据的功能。 一、预备工作 在开始实现批量导入导出功能之前,需要进行一些预备工作,包括设置计算机环境、安装ORACLE数据库和C++ ...

    C# 写的数据导入ORACLE数据库

    在批量导入大量数据时,为了提高性能,可以使用Oracle的`BULK COLLECT`和`FORALL`语法,或者`OracleBulkCopy`类。`BULK COLLECT`允许一次从查询结果中收集多个行,而`FORALL`则可以一次性对这些行执行多次插入。`...

    JAVA实现Excel表数据导入ORACLE数据库.txt

    ### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC...

    Excel树形结构数据导入Oracle数据库(Java)

    这篇博客“Excel树形结构数据导入Oracle数据库”提供了一个解决方案,下面将详细解析这个过程。 首先,我们需要理解Excel数据的树形结构。在Excel中,数据可能以层次化的形式存在,比如一级分类、二级分类等,形成...

    文件批量导入数据到oracle数据库

    在IT领域,文件批量导入数据到Oracle数据库是一项常见的任务,特别是在大数据处理和系统集成中。以下将详细解释这个过程涉及的关键知识点。 首先,"文件批量导入数据到Oracle数据库"指的是将一个或多个文本文件...

    JAVA实现Excel表数据导入ORACLE数据库

    ### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC...

    Oracle导入CSV格式数据

    在Oracle中,我们通常使用SQL*Loader工具来批量导入数据。SQL*Loader是一个高效的数据加载程序,能够快速地将数据从外部文件导入到数据库表中。它支持多种文件格式,包括CSV。 二、SQL*Loader工作原理 SQL*Loader...

    excel大量数据如何导入到oracle数据库中

    ### Excel大量数据导入Oracle数据库的方法 #### 一、前言 在日常工作中,我们经常会遇到需要将Excel中的数据批量导入到Oracle数据库的情况。这不仅能够提高工作效率,还能够确保数据的准确性。本文将详细介绍如何...

Global site tag (gtag.js) - Google Analytics