oracle导出数据到文本、从文本导入数据的详细步骤

 更新时间:2023年05月01日 00:05:24   作者:cycsa  
经常有需求向表中导入大量的数据,使用insert不靠谱,太慢了,oracle提供了sqlldr的工具,这里就为大家简单介绍一下

经常有需求向表中导入大量的数据,使用insert不靠谱,太慢了,oracle提供了sqlldr的工具

也有时需要讲数据导入到文本,oracle的spool可以轻松实现oracle导出数据到txt、txt导入数据到oracle

一、导出数据到txt

这里用all_objects表做测试

SQL> desc all_objects;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 OBJECT_NAME                               NOT NULL VARCHAR2(30)
 SUBOBJECT_NAME                                     VARCHAR2(30)
 OBJECT_ID                                 NOT NULL NUMBER
 DATA_OBJECT_ID                                     NUMBER
 OBJECT_TYPE                                        VARCHAR2(19)
 CREATED                                   NOT NULL DATE
 LAST_DDL_TIME                             NOT NULL DATE
 TIMESTAMP                                          VARCHAR2(19)
 STATUS                                             VARCHAR2(7)
 TEMPORARY                                          VARCHAR2(1)
 GENERATED                                          VARCHAR2(1)
 SECONDARY                                          VARCHAR2(1)

拿object_id,object_name做导出、导入测试
这里需要一些设置满足数据导出的样式

vi exp_table.sql

set line 1000         --设置行的长度
set pagesize 0        --输出不换页
set feedback off      --默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
set heading off       --不显示表头信息
set trimspool on      --如果trimspool设置为on,将移除spool文件中的尾部空
set trims on          --去掉空字符
set echo off;       --显示start启动的脚本中的每个sql命令,缺省为on
set colsep '|'         --设置分隔符
set termout off        --不在屏幕上显示结果
spool db1.txt          --记录数据到db1.txt
select object_id,object_name from all_objects;  --导出数据语句
spool off              --收集完毕
exit

一切就绪后导出数据

[oracle@centos5 ~]$ sqlplus test/test @exp_table.sql 

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jun 13 16:35:14 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@centos5 ~]$ sed -i 's/ //g' db1.txt  --可选,去除每行开头部分的空格
[oracle@centos5 ~]$ more db1.txt 20|ICOL$
44|I_USER1
28|CON$
15|UNDO$
29|C_COBJ#
3|I_OBJ#
25|PROXY_ROLE_DATA$

导出后检查数据的记录数是否正确

[oracle@centos5 ~]$ cat db1.txt |wc -l
49988
[oracle@centos5 ~]$ sqlplus test/test

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jun 13 16:36:21 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from all_objects;

  COUNT(*)
----------
     49988  --数据正确

二、从txt导入数据到oracle

sqlldr是通过一个control文件设定后,从文本导入数据

建立一张测试表

SQL> create table tb_sqlldr (id number,name varchar2(50));

Table created.

建立一个control文件

vi tb_sqlldr.ctl

load data                 
infile 'db1.txt'            --数据来源文本
append into table tb_sqlldr    --数据导入到表tb_sqldr中,导入方式为追加,如果想覆盖
fields terminated by "|"    --4、字段终止于X'09',是一个制表符(tab)
(id,name)                    --定义对应的字段名称,注意顺序

导入数据分成四种模式,可以根据需求选择:

APPEND // 原先的表有数据 就加在后面
INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值
REPLACE // 原先的表有数据 原先的数据会全部删除
TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
 

执行导入操作

sqlldr userid=test/test control=tb_sqlldr.ctl

差不多5w的数据短短2s解决

执行导入后验证数据

SQL> select count(*) from tb_sqlldr;

  COUNT(*)
----------
     49988

导入成功

再执行一次导入操作,由于设置为追加

SQL> select count(*) from tb_sqlldr;

  COUNT(*)
----------
     99976

记录翻倍

sqlldr还有很多参数供选择,比如log、bad这些,查看帮助即可

[oracle@centos5 ~]$ sqlldr

SQL*Loader: Release 10.2.0.4.0 - Production on Thu Jun 13 17:07:26 2013

Copyright (c) 1982, 2007, 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.

到此这篇关于oracle导出数据到文本、从文本导入数据的详细步骤的文章就介绍到这了,更多相关oracle导出数据到文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle重建控制文件的实例教程

    Oracle重建控制文件的实例教程

    前些天在做Oracle数据库恢复测试时,因为一些异常操作导致控制文件出了问题,数据库无法正常使用,下面这篇文章就来给大家介绍了关于Oracle重建控制文件的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-05-05
  • oracle中利用关键字rownum查询前20名员工信息及rownum用法

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    这篇文章主要介绍了oracle中利用关键字rownum查询前20名员工信息,本文通过代码给大家简单介绍了ORACLE 中ROWNUM用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • ORACLE数据库事务隔离级别介绍

    ORACLE数据库事务隔离级别介绍

    事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度
    2012-07-07
  • RPM包方式安装Oracle21c的方法详解

    RPM包方式安装Oracle21c的方法详解

    本次安装遇到了一个深坑,CentOS8.0安装时很多不兼容性,强行安装也失败了,提示缺少部分java方式,所以没办法,换用的Oracle Enterprise Linux 8.4 安装很顺畅,一个半小时就完成相应的工作了,具体操作过程一起看看吧
    2021-08-08
  • oracle中sql%rowcount的作用详解

    oracle中sql%rowcount的作用详解

    这篇文章主要介绍了oracle中sql%rowcount的作用,sql%rowcount来判断是否更新了记录的状态,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Oracle数据库产重启服务和监听程序命令介绍

    Oracle数据库产重启服务和监听程序命令介绍

    大家好,本篇文章主要讲的是Oracle数据库产重启服务和监听程序命令介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Oracle捕获问题SQL解决CPU过渡消耗

    Oracle捕获问题SQL解决CPU过渡消耗

    本文通过实际业务系统中调整的一个案例,试图给出一个常见CPU消耗问题的一个诊断方法.
    2007-03-03
  • Oracle 自定义split 函数实例详解

    Oracle 自定义split 函数实例详解

    这篇文章主要介绍了Oracle 自定义split 函数实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • oracle创建用户时报错ORA-65096:公用用户名或角色名无效解决方式

    oracle创建用户时报错ORA-65096:公用用户名或角色名无效解决方式

    这篇文章主要给大家介绍了关于oracle创建用户时报错ORA-65096:公用用户名或角色名无效的解决方式,ORA-65096错误意味着你在创建一个新的用户或角色时,使用了一个已经存在的公用用户名或角色名,需要的朋友可以参考下
    2024-05-05
  • Oracle中实现MySQL show index from table命令SQL脚本分享

    Oracle中实现MySQL show index from table命令SQL脚本分享

    这篇文章主要介绍了Oracle中实现MySQL show index from table命令SQL脚本分享,本文只是模拟了Mysql中的show index from table命令,需要的朋友可以参考下
    2014-10-10

最新评论