当前位置: 首页 > news >正文

7. Oracle数据加载和卸载

  在日常工作中;经常会遇到这样的需求:

    • Oracle 数据表跟文本或者文件格式进行交互;即将指定文件内容导入对应的 Oracle 数据表中;或者从 Oracle 数据表导出。
    • 其他数据库中的表跟Oracle数据库进行交互。

  若是少量数据;可选择的解决方案有很多。常用的用 Pl/SQL developer工具,或者手动转换为 INSERT 语句,或者通过API。但数据量大;用上面的方法效率太烂了。本文来说说 Oracle 数据的加载和卸载。

    • Oracle中的DBLINK
    • Oracle加载数据-外部表
    • Oracle加载数据-sqlldr工具
    • Oracle卸载数据-sqludr

一. Oracle 中的 DBLINK

  在日常工作中;会遇到不同的数据库进行数据对接;每个数据库都有着功能;像Oracle有 DBLINK ; PostgreSQL有外部表。

1.1 Oracle DBlink 语法

CREATE [PUBLIC] DATABASE LINK link 
CONNECT TO username 
IDENTIFIED BY password
USING 'connectstring'

1.2 Oracle To Mysql

  在oracle配置mysql数据库的dblink

二.Oracle加载数据-外部表

  ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件。因此,建立外部表时不会产生段、区、数据块等存储结构,只有与表相关的定义放在数据字典中。外部表,顾名思义,存储在数据库外面的表。当存取时才能从ORACLE专属格式文件中取得数据,外部表仅供查询,不能对外部表的内容进行修改(INSERT、UPDATE、DELETE操作)。不能对外部表建立索引。

2.1 创建外部表需要的目录

# 创建外部表需要的目录
SQL> create or replace directory DUMP_DIR as '/data/ora_ext_lottu'; 

Directory created.
# 给用户授予指定目录的操作权限
SQL> GRANT READ,WRITE ON DIRECTORY DUMP_DIR TO lottu;

Grant succeeded.

2.2 外部表源文件lottu.txt

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

2.3 创建外部表

drop table dept_external purge;

CREATE TABLE dept_external (
   deptno     NUMBER(6),
   dname      VARCHAR2(20),
   loc        VARCHAR2(25) 
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY DUMP_DIR
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  BADFILE 'lottu.bad'
  LOGFILE 'lottu.log'
  FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
  (
   deptno     INTEGER EXTERNAL(6),
   dname      CHAR(20),
   loc        CHAR(25)
  )
 )
 LOCATION ('lottu.txt')
)
REJECT LIMIT UNLIMITED;

查看数据

SQL> select * from dept_external;

    DEPTNO DNAME  LOC
---------- -------------------- -------------------------
 10 ACCOUNTING  NEW YORK
 20 RESEARCH  DALLAS
 30 SALES  CHICAGO
 40 OPERATIONS  BOSTON

三. Oracle加载数据-sqlldr工具

3.1 准备实验对象

  创建文件lottu.txt;和表tbl_load_01。

[oracle@oracle235 ~]$ seq 1000|awk -vOFS="," '{print $1,"lottu",systime()-$1}' > lottu.txt
[oracle@oracle235 ~]$ sqlplus lottu/li0924

SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 13 22:58:34 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


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

SQL> create table tbl_load_01 (id number,name varchar2(10),accountid number);

Table created.

3.2 创建控制文件lottu.ctl

load data
characterset utf8
        infile '/home/oracle/lottu.txt'
        truncate into table tbl_load_01
        fields terminated by ','
        trailing nullcols
  optionally enclosed by ' ' TRAILING NULLCOLS
(
 id ,
 name,
 accountid
)

3.3 执行sqlldr

[oracle@oracle235 ~]$ sqlldr 'lottu/"li0924"' control=/home/oracle/lottu.ctl log=/home/oracle/lottu.log bad=/home/oracle/lottu.bad

SQL*Loader: Release 11.2.0.4.0 - Production on Mon Aug 13 23:10:12 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 64
Commit point reached - logical record count 128
Commit point reached - logical record count 192
Commit point reached - logical record count 256
Commit point reached - logical record count 320
Commit point reached - logical record count 384
Commit point reached - logical record count 448
Commit point reached - logical record count 512
Commit point reached - logical record count 576
Commit point reached - logical record count 640
Commit point reached - logical record count 704
Commit point reached - logical record count 768
Commit point reached - logical record count 832
Commit point reached - logical record count 896
Commit point reached - logical record count 960
Commit point reached - logical record count 1000

四.Oracle卸载数据-sqludr

  sqludr是将Oracle数据表导出到文本中;是牛人楼方鑫开发的。并非Oracle自带工具;需要下载安装才能使用。

4.1 sqludr安装

[oracle@oracle235 ~]$ unzip sqluldr2linux64.zip 
Archive:  sqluldr2linux64.zip
  inflating: sqluldr2linux64.bin     
[oracle@oracle235 ~]$ mv sqluldr2linux64.bin $ORACLE_HOME/bin/sqludr

4.2 查看sqludr帮助

[oracle@oracle235 ~]$ sqludr -?

SQL*UnLoader: Fast Oracle Text Unloader (GZIP, Parallel), Release 4.0.1
(@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.

License: Free for non-commercial useage, else 100 USD per server.

Usage: SQLULDR2 keyword=value [,keyword=value,...]

Valid Keywords:
   user    = username/password@tnsname
   sql     = SQL file name
   query   = select statement
   field   = separator string between fields
   record  = separator string between records
   rows    = print progress for every given rows (default, 1000000) 
   file    = output file name(default: uldrdata.txt)
   log     = log file name, prefix with + to append mode
   fast    = auto tuning the session level parameters(YES)
   text    = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).
   charset = character set name of the target database.
   ncharset= national character set name of the target database.
   parfile = read command option from parameter file 

  for field and record, you can use '0x' to specify hex character code,
  \r=0x0d \n=0x0a |=0x7c ,=0x2c, \t=0x09, :=0x3a, #=0x23, "=0x22 '=0x27 

4.3 执行sqludr

[oracle@oracle235 ~]$ sqludr lottu/li0924 query="tbl_load_01" file=lottu01.txt field=","
           0 rows exported at 2018-08-13 23:47:55, size 0 MB.
        1000 rows exported at 2018-08-13 23:47:55, size 0 MB.
         output file lottu01.txt closed at 1000 rows, size 0 MB.

转载于:https://www.cnblogs.com/lottu/p/9541300.html

相关文章:

  • 工作的第6个年头发现DateFormat是not synchronized
  • JAVA自学笔记18
  • android 9 patch
  • C#中string.format用法详解
  • session共享问题解决方案
  • C#编程(六十)----------LINQ的概述
  • 使用 Zipkin 和 Brave 实现分布式系统追踪
  • 让XCode自动CodeReview你的代码-OCLint使用
  • 对话翁志:京东大数据如何让技术真正落地
  • Logstash+FileBeat+MongoDB+Flask打造的日志系统(三)
  • 【SignalR学习系列】5. SignalR WPF程序
  • 使用UAC白名单让指定的程序不受UAC限制
  • 无痕浏览的坑
  • 自动化执行 - 钉钉机器人通知
  • 想了解概率图模型?你要先理解图论的基本定义与形式
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【翻译】babel对TC39装饰器草案的实现
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Angular6错误 Service: No provider for Renderer2
  • canvas绘制圆角头像
  • CentOS从零开始部署Nodejs项目
  • Hexo+码云+git快速搭建免费的静态Blog
  • jquery ajax学习笔记
  • Making An Indicator With Pure CSS
  • Node项目之评分系统(二)- 数据库设计
  • Ruby 2.x 源代码分析:扩展 概述
  • spring security oauth2 password授权模式
  • vue 个人积累(使用工具,组件)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 力扣(LeetCode)56
  • 前端临床手札——文件上传
  • 嵌入式文件系统
  • 人脸识别最新开发经验demo
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 1.Ext JS 建立web开发工程
  • Java总结 - String - 这篇请使劲喷我
  • raise 与 raise ... from 的区别
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #QT项目实战(天气预报)
  • #Spring-boot高级
  • #控制台大学课堂点名问题_课堂随机点名
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (10)STL算法之搜索(二) 二分查找
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (力扣)循环队列的实现与详解(C语言)
  • (转)可以带来幸福的一本书
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /bin/rm: 参数列表过长"的解决办法