ORACLE导入TXT文件数据的处理思路51CTO博客 - 超凡娱乐

ORACLE导入TXT文件数据的处理思路51CTO博客

2019-03-06 10:19:58 | 作者: 振平 | 标签: 数据,运用,咱们 | 浏览: 598

需求场景:

data.txt源数据: 

[INFO] 2012-12-01 00:01:17 1610 FHR "行号=24. 检查指定方案的钢卷数据. 方案号=121200102."
[INFO] 2012-12-01 00:03:13 1610 FHR "行号=24. 检查指定方案的钢卷数据. 方案号=121200103."
[INFO] 2012-12-01 00:20:21 7362 RICC "IntervalTime=0,RollingTime=0"
[INFO] 2012-12-01 00:20:21 7363 RICC "WRTFMOff:   24.5,   24.8,   24.9,   25.1,   25.3,   25.3,   25.4,   26.5[C]."
[INFO] 2012-12-01 00:20:21 7362 RICC "IntervalTime=0, RollingTime=0, WRTFMOff:fT=24.632685"

 拿到这一份源数据后,第一眼咱们看到像这种类型的数据就是应该运用sql*loader东西。把该源文件的数据导入到oracle数据库。


那么,咱们先来了解一下这个东西:
一、sql*loader的概述

    许多状况之下,咱们的数据需求批量处理传输到库,或许在库之间批量传输数据。其间,常见
的景象是用从事务处理体系提取的数据填充数据仓库,或将数据从实时体系复制到测验开发环境。对
大规模操作而言,运用规范的INSERT句子刺进数据并不总是最佳办法,而oracle自身附带了SQL*Loader和Data Pump功能来支撑批量操作。经过运用外部表,还能够在不将数据刺进数据库的状况下读取数据。
    从体系结构上讲,SQL*Loader进程与其他用户进程类似:它经过服务器进程连接到数据库。
要刺进行,能够选用两种技能:惯例办法或直接途径读取。惯例办法是运用INSERT。SQL*Loader用户进程结构values子句中包括绑定变量的insert句子,然后读取源数据文件,为每一个要刺进的行履行
一次insert。此办法运用数据库缓冲区缓存,并生成吊销(undo)和重做数据(redo log),这些insert
句子与其他同类句子类似,经过一般的提交处理完结数据永久化。
    直接途径是避开了database buffer,sql*loader读取源数据文件,并将内容发送到服务器进程。
尔后,服务器进程在其PGA中拼装表数据中的块,并将它们直接写入数据文件。写操作在表的高水位
线上完结,称为数据保存(data save)。高水位线是表段中的一个符号,其上未写入任何数据:高水
位线上的空间是分配给没有运用的表的空间。加载完结后,sql*loader移动高水位线,然后包括最新
写入的数据块,而且其他用户都能够当即看见这些数据块内的行。上述操作相当于一个commit指令。
此刻不会生成吊销,也能够自动的撤销重做日志的生成。所以说,直接途径加载是很方便的。
二、SQL*Loader直接途径缺陷
直接途径也存在以下缺陷:
1、履行操作期间,有必要删去或禁用引证完整性束缚(只能施行unique、primary key、not null束缚)。
2、会将针对其他会话的DML确定表
3、不会激活insert触发器
4、无法为群集表运用

 

sql*loader体系结构:


三、实际操作演示

好了,这儿没办法说得太细节化,相关的常识咱们自己弥补。

新建一个测验表TEST(咱们要把源数据导入这个表):
SQL>conn hr/oracle@testdb

SQL> create table test(
  2  name varchar2(10),
  3  indate varchar2(20),
  4  intime varchar2(20),
  5  num int,
  6  source varchar2(10),
  7  description varchar2(128)
  8  );

准备好data.txt、data_test.ctl(加载所要运用的操控文件,界说数据规矩的)
data_test.ctl: 

LOAD DATA
INFILE "E:\oracle\exercises\data.txt"
TRUNCATE INTO TABLE TEST
FIELDS TERMINATED BY " " optionally enclosed by "
(NAME,INDATE,INTIME,NUM,SOURCE,DESCRIPTION)

 

sqlldr这个指令就是sql*loader东西,是在$ORACLE_HOME/bin目录下
C:\Documents and Settings\Administrator>sqlldr hr/oracle@testdb  control=E:\oracle\exercises\data_test.ctl  log=E:\oracle\exercises\data_test.log

3 小时前 上传下载附件(39.43 KB)



查询下成果:

3 小时前 上传下载附件(39.34 KB)



到此为止,提出的需求现已完结。关于操控文件里边的指令是什么意思,有时间的话下次解释一下或许留点给咱们自己去学习吧。期望咱们能够彼此参加到评论傍边,彼此进步自己!




 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章