简述数据库导入OracleSQL*Loader指南

 我来答
机器1718
2022-09-27 · TA获得超过6827个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:160万
展开全部

  SQL*Loader是Oracle数据库导入外部数据的一个工具 它和DB 的Load工具相似 但有更多的选择 它支持变化的加载模式 可选的加载及多表加载

  

   如何使用 SQL*Loader 工具

  我们可以用Oracle的sqlldr工具来导入数据 例如:

  sqlldr scott/tiger control=loader ctl

  控制文件(loader ctl) 将加载一个外部数据文件(含分隔符)loader ctl如下:

  

  load data infile c:\data\mydata csv into table emp fields terminated by optionally enclosed by ( empno empname sal deptno )

  mydata csv 如下:

  

   Scott Tiger Frank Naude

  下面是一个指定记录长度的示例控制文件 * 代表数据文件与此文件同名 即在后面使用BEGINDATA段来标识数据

  

  load data infile * replace into table departments ( dept position ( : ) char( ) deptname position ( : ) char( ) ) begindata COSC PUTER SCIENCE ENGL ENGLISH LITERATURE MATH MATHEMATICS POLY POLITICAL SCIENCE

   Unloader这样的工具

  Oracle 没有提供将数据导出到一个文件的工具 但是 我们可以用SQL*Plus的select 及 format 数据来输出到一个文件

  

  set echo off newpage space pagesize feed off head off trimspool on spool oradata txt select col || || col || || col from tab where col = XYZ ; spool off

  另外 也可以使用使用 UTL_FILE PL/SQL 包处理:

  

  rem Remember to update initSID ora utl_file_dir= c:\oradata parameter declare fp utl_file file_type; begin fp := utl_file fopen( c:\oradata tab txt w ); utl_file putf(fp %s %s\n TextField ); utl_file fclose(fp); end; /

  当然你也可以使用第三方工具 如SQLWays TOAD for Quest等

  

  加载可变长度或指定长度的记录

  

  LOAD DATA INFILE * INTO TABLE load_delimited_data FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY TRAILING NULLCOLS ( data data ) BEGINDATA AAAAAAAAAA A B C D 下面是导入固定位置(固定长度)数据示例 LOAD DATA INFILE * INTO TABLE load_positional_data ( data POSITION( : ) data POSITION( : ) ) BEGINDATA AAAAAAAAAA BBBBBBBBBB

  跳过数据行 可以用 SKIP n 关键字来指定导入时可以跳过多少行数据 如

  

  LOAD DATA INFILE * INTO TABLE load_positional_data SKIP ( data POSITION( : ) data POSITION( : ) ) BEGINDATA AAAAAAAAAA BBBBBBBBBB

  导入数据时修改数据

  在导入数据到数据库时 可以修改数据 注意 这仅适合于常规导入 并不适合 direct导入方式 如

  

  LOAD DATA INFILE * INTO TABLE modified_data ( rec_no my_db_sequence nextval region CONSTANT time_loaded to_char(SYSDATE HH :MI ) data POSITION( : ) :data / data POSITION( : ) upper(:data ) data POSITION( : ) to_date(:data YYMMDD ) ) BEGINDATA AAAAAAAAAA BBBBBBBBBB LOAD DATA INFILE mail_orders txt BADFILE bad_orders txt APPEND INTO TABLE mailing_list FIELDS TERMINATED BY ( addr city state zipcode mailing_addr decode(:mailing_addr null :addr :mailing_addr) mailing_city decode(:mailing_city null :city :mailing_city) mailing_state )

  将数据导入多个表

  如:

  

  LOAD DATA INFILE * REPLACE INTO TABLE emp WHEN empno != ( empno POSITION( : ) INTEGER EXTERNAL ename POSITION( : ) CHAR deptno POSITION( : ) CHAR mgr POSITION( : ) INTEGER EXTERNAL ) INTO TABLE proj WHEN projno != ( projno POSITION( : ) INTEGER EXTERNAL empno POSITION( : ) INTEGER EXTERNAL )

  导入选定的记录

  如下例 ( ) 代表第一个字符 ( : ) 代表 到 之间的字符:

  

  LOAD DATA INFILE mydata dat BADFILE mydata bad DISCARDFILE mydata dis APPEND INTO TABLE my_selective_table WHEN ( ) <>; H and ( ) <>; T and ( : ) = ( region CONSTANT service_key POSITION( : ) INTEGER EXTERNAL call_b_no POSITION( : ) CHAR )

  导入时跳过某些字段

  可用 POSTION(x:y) 来分隔数据在Oracle i中可以通过指定FILLER字段实现 FILLER 字段用来跳过 忽略导入数据文件中的字段 如

  

  LOAD DATA TRUNCATE INTO TABLE T FIELDS TERMINATED BY ( field field FILLER field )

  导入多行记录

  可以使用下面两个选项之一来实现将多行数据导入为一个记录:

  

  CONCATENATE: use when SQL*Loader should bine the same number of physical records together to form one logical record CONTINUEIF use if a condition indicates that multiple records should be treated as oneEgby having a # character in column

   SQL*Loader 数据的提交

  一般情况下是在导入数据文件数据后提交的 也可以通过指定 ROWS= 参数来指定每次提交记录数

  

  提高 SQL*Loader 的性能

  ( ) 一个简单而容易忽略的问题是 没有对导入的表使用任何索引和/或约束(主键) 如果这样做 甚至在使用ROWS=参数时 会很明显降低数据库导入性能

  ( ) 可以添加 DIRECT=TRUE来提高导入数据的性能 当然 在很多情况下 不能使用此参数

  ( ) 通过指定 UNRECOVERABLE选项 可以关闭数据库的日志 这个选项只能和 direct 一起使用

  ( ) 可以同时运行多个导入任务

  

  常规导入与direct导入方式的区别

lishixinzhi/Article/program/Oracle/201311/18244

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式