学习oracle sql loader 的使用

来源:互联网 发布:中经网经济统计数据库 编辑:程序博客网 时间:2024/05/08 22:35

学习oracle sql loader 的使用
一:sql loader 的特点
oracle自己带了很多的工具可以用来进行数据的迁移、备份和恢复等工作。但是每个工具都有自己的特点。
比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面。有着速度快,使用简单,快捷的优点;同时也有一些缺点,比如在不同版本数据库之间的导出、导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle公司自己产品的兼容性的问题吧。
sql loader 工具却没有这方面的问题,它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。

二:sql loader 的帮助
C:/>sqlldr
SQL*Loader: Release 9.2.0.1.0 - Production on 星期六 10月 9 14:48:12 2004
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

用法: SQLLDR keyword=value [,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(默认256000)
    silent -- Suppress 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 unus
able(默认FALSE)
  readsize -- Size of Read buffer                (默认1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(
默认NOT_USED)
columnarrayrows -- Number of rows for direct path column array(默认5000)
streamsize -- Size of direct path stream buffer in bytes(默认256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session(默认FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE(默认7200)
date_cache -- size (in entries) of date conversion cache(默认1000)
PLEASE NOTE: 命令行参数可以由位置或关键字指定
。前者的例子是 'sqlload
scott/tiger foo'; 后一种情况的一个示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定参数的时间必须早于
但不可迟于由关键字指定的参数。例如,
允许 'sqlldr scott/tiger control=foo logfile=log', 但是
不允许 'sqlldr scott/tiger control=foo log', 即使
参数 'log' 的位置正确。
C:/>
三:sql loader使用例子
a)SQLLoader将 Excel 数据导出到 Oracle
1.创建SQL*Loader输入数据所需要的文件,均保存到C:/,用记事本编辑:
控制文件:input.ctl,内容如下:
  
  load data           --1、控制文件标识
  infile 'test.txt'       --2、要输入的数据文件名为test.txt
  append into table test    --3、向表test中追加记录
  fields terminated by X'09'  --4、字段终止于X'09',是一个制表符(TAB)
  (id,username,password,sj)   -----定义列对应顺序
  
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
  
在DOS窗口下使用SQL*Loader命令实现数据的输入
  
C:/>sqlldr userid=system/manager control=input.ctl
  默认日志文件名为:input.log
默认坏记录文件为:input.bad
  
2.还有一种方法
可以把EXCEL文件另存为CSV(逗号分隔)(*.csv),控制文件就改为用逗号分隔
LOAD DATA
INFILE 'd:/car.csv'
APPEND  INTO TABLE t_car_temp
FIELDS TERMINATED BY ","
(phoneno,vip_car)
b)在控制文件中直接导入数据
1、控制文件test.ctl的内容
-- The format for executing this file with SQL Loader is:
-- SQLLDR control=<ilename> Be sure to substitute your
-- version of SQL LOADER and the filename for this file.
LOAD DATA
INFILE *
BADFILE 'C:/Documents and Settings/Jackey/桌面/WMCOUNTRY.BAD'
DISCARDFILE 'C:/Documents and Settings/Jackey/桌面/WMCOUNTRY.DSC'
INSERT INTO TABLE EMCCOUNTRY
Fields terminated by ";" Optionally enclosed by '"'
(
  COUNTRYID NULLIF (COUNTRYID="NULL"),
  COUNTRYCODE,
  COUNTRYNAME,
  CONTINENTID NULLIF (CONTINENTID="NULL"),
  MAPID NULLIF (MAPID="NULL"),
  CREATETIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (CREATETIME="NULL"),
  LASTMODIFIEDTIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (LASTMODIFIEDTIME="NULL")
)
BEGINDATA
1;"JP";"Japan";1;9;"09/16/2004 16:31:32";NULL
2;"CN";"China";1;10;"09/16/2004 16:31:32";NULL
3;"IN";"India";1;11;"09/16/2004 16:31:32";NULL
4;"AU";"Australia";6;12;"09/16/2004 16:31:32";NULL
5;"CA";"Canada";4;13;"09/16/2004 16:31:32";NULL
6;"US";"United States";4;14;"09/16/2004 16:31:32";NULL
7;"MX";"Mexico";4;15;"09/16/2004 16:31:32";NULL
8;"GB";"United Kingdom";3;16;"09/16/2004 16:31:32";NULL
9;"DE";"Germany";3;17;"09/16/2004 16:31:32";NULL
10;"FR";"France";3;18;"09/16/2004 16:31:32";NULL
11;"IT";"Italy";3;19;"09/16/2004 16:31:32";NULL
12;"ES";"Spain";3;20;"09/16/2004 16:31:32";NULL
13;"FI";"Finland";3;21;"09/16/2004 16:31:32";NULL
14;"SE";"Sweden";3;22;"09/16/2004 16:31:32";NULL
15;"IE";"Ireland";3;23;"09/16/2004 16:31:32";NULL
16;"NL";"Netherlands";3;24;"09/16/2004 16:31:32";NULL
17;"DK";"Denmark";3;25;"09/16/2004 16:31:32";NULL
18;"BR";"Brazil";5;85;"09/30/2004 11:25:43";NULL
19;"KR";"Korea, Republic of";1;88;"09/30/2004 11:25:43";NULL
20;"NZ";"New Zealand";6;89;"09/30/2004 11:25:43";NULL
21;"BE";"Belgium";3;79;"09/30/2004 11:25:43";NULL
22;"AT";"Austria";3;78;"09/30/2004 11:25:43";NULL
23;"NO";"Norway";3;82;"09/30/2004 11:25:43";NULL
24;"LU";"Luxembourg";3;81;"09/30/2004 11:25:43";NULL
25;"T";"ortugal";3;83;"09/30/2004 11:25:43";NULL
26;"GR";"Greece";3;80;"09/30/2004 11:25:43";NULL
27;"IL";"Israel";1;86;"09/30/2004 11:25:43";NULL
28;"CH";"Switzerland";3;84;"09/30/2004 11:25:43";NULL
29;"A1";"Anonymous Proxy";0;0;"09/30/2004 11:25:43";NULL
30;"A2";"Satellite Provider";0;0;"09/30/2004 11:25:43";NULL
31;"AD";"Andorra";3;0;"09/30/2004 11:25:43";NULL
32;"AE";"United Arab Emirates";1;0;"09/30/2004 11:25:43";NULL
33;"AF";"Afghanistan";1;0;"09/30/2004 11:25:43";NULL
34;"AG";"Antigua and Barbuda";7;0;"09/30/2004 11:25:43";NULL
35;"AI";"Anguilla";7;0;"09/30/2004 11:25:43";NULL
36;"AL";"Albania";3;0;"09/30/2004 11:25:43";NULL
37;"AM";"Armenia";3;0;"09/30/2004 11:25:43";NULL
38;"AN";"Netherlands Antilles";3;0;"09/30/2004 11:25:43";NULL
39;"AO";"Angola";2;0;"09/30/2004 11:25:43";NULL
40;"AP";"Asia/Pacific Region";2;0;"09/30/2004 11:25:43";NULL
41;"AQ";"Antarctica";8;0;"09/30/2004 11:25:43";NULL
42;"AR";"Argentina";5;0;"09/30/2004 11:25:43";NULL
43;"AS";"American Samoa";6;0;"09/30/2004 11:25:43";NULL
44;"AW";"Aruba";5;0;"09/30/2004 11:25:43";NULL
45;"AZ";"Azerbaijan";1;0;"09/30/2004 11:25:43";NULL
46;"BA";"Bosnia and Herzegovina";3;0;"09/30/2004 11:25:43";NULL
47;"BB";"Barbados";5;0;"09/30/2004 11:25:43";NULL
48;"BD";"Bangladesh";1;0;"09/30/2004 11:25:43";NULL
49;"BF";"Burkina Faso";2;0;"09/30/2004 11:25:43";NULL
50;"BG";"Bulgaria";3;0;"09/30/2004 11:25:43";NULL
51;"BH";"Bahrain";1;0;"09/30/2004 11:25:43";NULL
52;"BI";"Burundi";2;0;"09/30/2004 11:25:43";NULL
53;"BJ";"Benin";2;0;"09/30/2004 11:25:43";NULL
54;"BM";"Bermuda";4;0;"09/30/2004 11:25:43";NULL
55;"BN";"Brunei Darussalam";1;0;"09/30/2004 11:25:43";NULL
56;"BO";"Bolivia";5;0;"09/30/2004 11:25:43";NULL
57;"BS";"Bahamas";7;0;"09/30/2004 11:25:43";NULL
58;"BT";"Bhutan";1;0;"09/30/2004 11:25:43";NULL
59;"BV";"Bouvet Island";5;0;"09/30/2004 11:25:43";NULL
60;"BW";"Botswana";2;0;"09/30/2004 11:25:43";NULL
61;"BY";"Belarus";3;0;"09/30/2004 11:25:43";NULL
2、执行导入命令
C:/>sqlldr userid=system/manager control=test.ctl
c)复杂格式的导入


利用SQL*Loader将 Excel 数据导出到 Oracle 数据库中
出处          

        •        系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:/ORACLE
•        实现步骤:
•       
•        1、打开MicroSoft Excel 2000
•       
•        2、文件(F)→新建(N)→工作簿→
•       
•        3、输入以下数据,存盘为test.xls,如图:
•       
•            
•       
•        4、文件(F)→另存为(A)→
•       
•           保存类型为:制表符分隔,起名为text.txt,保存到C:/
•       
•            
•       
•        5、连入SQL*Plus
•           以system/manager用户登录,
•           SQL> conn system/manager
•       
•           创建表结构
•           SQL> create table test
•            (
•            id       number,        --序号
•            username    varchar2(10),     --用户名
•            password    varchar2(10),     --密码
•            sj       varchar2(20)      --建立日期
•            );
•       
•        6、创建SQL*Loader输入数据所需要的文件,均保存到C:/,用记事本编辑:
•           控制文件:input.ctl,内容如下:
•       
•          load data           --1、控制文件标识
•          infile 'test.txt'       --2、要输入的数据文件名为test.txt
•          append into table test    --3、向表test中追加记录
•          fields terminated by X'09'  --4、字段终止于X'09',是一个制表符(TAB)
•          (id,username,password,sj)   -----定义列对应顺序
•       
•        a、insert,为缺省方式,在数据装载开始时要求表为空
•        b、append,在表中追加新记录
•        c、replace,删除旧记录,替换成新装载的记录
•        d、truncate,同上
•       
•        7、在DOS窗口下使用SQL*Loader命令实现数据的输入
•       
•        C:/>sqlldr userid=system/manager control=input.ctl
•       
•            
•       
•          默认日志文件名为:input.log
•          默认坏记录文件为:input.bad
•       
•        8、连接到SQL*Plus中,查看是否成功输入
•       
•            
•       




用SQL*Loader实现FOXPRO到ORACLE的数据转换
西北民航瑞丰计算机公司
闫宏高
---- SQL&Loader是ORACLE提供的一种工具,用这一工具可把外部文件中的数据装载到ORACLE的数据库中。利用这一原理,可以把FOXPRO的数据导出到文本文件,再利用SQL*Loader装载到ORACLE数据库中。
一. 从FOXPRO中导出数据。
---- 打开file/export,Type选择delimited text,在To项中给出导出的数据文件名,字段间以“,”区分开,Fro项选择要导出的FOXPRO数据库文件,并选择数据文件存储位置。
---- 打开Options,根据需要设置Scope、For、While和Fields。点击OK进行导出。
---- 例如导出人员管理数据库中的序号、姓名、性别、出生日期数据文件,保存为ry.ctl文件名。其内容如下:
   1,"白余量","男",04/16/1964
   2,"李汉为","男",/  /
   3,"郭正林","男",05/12/1970
      ... ...
二. 编辑数据文件为控制文件格式。
   LOAD DATA
   INFILE *
   REPLACE
   INTO TABLE wxryb
   FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED '"'
   (xh,name,sex,birth date(20) "mm/dd/yyyy")
   BEGINDATA
   1,"白余量","男",04/16/1964
   2,"李汉为","男",/  /
   3,"郭正林","男",05/12/1970
      ... ...
---- 其中,INFILE * 表示数据在控制文件后部,REPLACE是数据装载方式,还 可以是INSERT、APPEND等。 wxryb 是ORACLE数据库表名。 (xh,name,sex,birth date(20) "mm/dd/yyyy")是wxryb中的字段名, "mm/dd/yyyy"是被转换日期数据的格式。BEGINDATA以后是要装载的数据。
三. 把数据文件ftp到数据库服务器上。
四. 以oracle用户身份登录到数据库服务器。
五. 在命令行输入
---- sqlldr userid=refine/refine control=ry.ctl log=ry.
log bad=ry.bad执行数据装载。
---- 其中,userid指定的用户对wxryb要有一定权限,可指定log文件和bad文件 对装载过程进行检查。本命令 还可带有多个参数进行装载控制,可在命令行 输入sqlldr查阅。
---- 对于FOXPRO的MEMO字段数据可利用COPY MEMO命令导出到文本文件,再按上述方法装入。如果数据装载不成功,请查阅log文件和bad文件,其原因多与数据类型的匹配和长度有关。对于FOXPRO日期型数据如果为空(如上例第2条记录),ORACLE不识别“/ /”,则装载会失败,因此在从FOXPRO导出前,我先给所有birth为空的记录赋予一个日期“1/1/1998”,待装载成功后只需一个命令

update wxryb set birth='' where birth='1-JAN-98'

即可在wxryb中恢复相关记录的birth空值。
---- 有关SQL*Loader及FOXPRO的Export和Copy Memo的详细用法请参阅ORACLE和FOXPRO的文档。



利用SQL*Loader将DBF数据库转换为Oracle数据库

编号:QA000723
建立日期: 1999年3月30日 最后修改日期:2000年10月18日
所属类别:
C/C++ - 数据库

FoxPro/Visual FoxPro - 数据库
文章:
    摘要:目前,我国许多单位MIS系统建立在微机PC或基于Novell NetWare局域网环境中,数据库和开发工具采用Foxpro 2.5 for DOS或Foxpro 2.5 for Windows,以dbf文件为数据组织管理手段,随着系统的不断扩大和实际应用的需要,不少单位已开始采用大型数据库Oracle。在MIS从Foxpro升级到大型数据库Oracle过程中,将Foxpro的dbf文件通过Oracle工具SQL*Loader加载到Oracle数据库中是一项非常重要的工作。一般用SQL*Loader加载的具体实施步骤是:
    ---- *运行Foxpro,打开数据库,将dbf文件拷贝为SDF格式的文本文件
    ---- *根据dbf文件结构,产生建立Oracle表(CREATE TABLE)的SQL语句
    ---- *登录Oracle,运行产生Oracle表(CREATE TABLE)的SQL语句
    ---- *根据dbf文件结构,产生SQL*Loader的控制文件
    ---- *运行SQL*Loader,加载数据
    ----用手工方法产生CREATE TABLE的SQL语句,特别是产生SQL*Loader控制文件时,POSITION起始、结束位置经常弄错,当需要加载大量的数据时,不但烦琐,而且效率比较低。我们在实践中利用Borland C++ 5.0编制了一个C++实用程序load.cpp,自动产生SQL*Loader的数据文件、控制文件和产生CREATE TABLE的SQL语句。运用load,我们只需:
    ---- * load <数据库名>
    ---- *登录Oracle,运行产生Oracle表(CREATE TABLE)的SQL语句
    ---- *运行SQL*Loader,加载数据
    ----在实践中,我们通过这种方法,在实现从Foxpro到Oracle for Digital UNIX +中文Windows 95的client/server平台的数据加载过程中提高了效率。 
     

示例:sqlldr userid=用户名/密码@un199  control=input.ctl

原创粉丝点击