快速导入导出Oracle数据demo(sqlldr、UTL_FILE)
本文演示快速sqlldr导入、UTL_FILE导出Oracle表数据实例
表结构如下,演示数据约112万,可自行准备。
create table MemberPointDemo
(
MEMBERID NUMBER(20) not null ,--会员ID
PointType VARCHAR2(20) not null,--积分类型
Points VARCHAR2(20),--积分
SDate VARCHAR2(20) not null,--积分记账日期
Notes VARCHAR2(60)--备注 );
-- Create/Recreate indexes
create index IDX_MEMBERID on MemberPointDemo (MEMBERID);
alter table MemberPointDemo
add constraint PK_MEMBER_OUT primary key (MEMBERID, PointType, SDate );
1、快速导入sqlldr
#### *******************最快导入***********************************************/
su - oracle
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
--装载源表数据
sqlldr dbusrdms/******@DBDMS control=/home/oracle/memberpoint.ctl log=/home/oracle/2017_12_06_162045.log
memberpoint.ctl文件内容:
load data
infile '/home/oracle/2017_12_06_162045.CSV'
into table dbusrdms.MemberPointDemo append
fields terminated by ','
(MEMBERID, PointType, Points, SDate, Notes)
csv文件格式:
MEMBERID,PointType,Points,SDate,Notes
9281776,1,219,2015-01-01,2015增加
8758055,1,356.00,2015-01-01,2015增加
以上导入112万记录大约在50秒内完成。

2、快速导出UTL_FILE.FOPEN
/* ******************************* 导出为csv文件最快******************/
DECLARE
VSFILE UTL_FILE.FILE_TYPE; --定义用于接收文件句柄的类型
V_CNT NUMBER; --统计每个文件加载行数
V_Date Varchar(20);
--字段列表
MEMBERID NUMBER(20);
PointType VARCHAR2(20);
Points VARCHAR2(20);
SDate VARCHAR2(20);
Notes VARCHAR2(60); BEGIN
--DBMS_OUTPUT.ENABLE(1000000); -->避免报错ORA-20000: ORU-10027: BUFFER OVERFLOW, LIMIT OF 10000 BYTES --文件命名规则..把表数据时间当做文件命名...
V_Date := TO_CHAR(sysdate, 'YYYY_MM_dd_hh24MiSS');
--开始打开文件,EXP_DIR为对应的目录
VSFILE := UTL_FILE.FOPEN('EXP_DIR', V_Date || '.CSV', 'W'); --文件字段标头打印
UTL_FILE.PUT_LINE(VSFILE,'MEMBERID,PointType,Points,SDate,Notes');
--UTL_FILE.PUT_LINE(VSFILE, '会员ID,积分类型,积分,记账日期,备注'); --每个文件加载行数[每次进入循环都赋值为0].排除标头部分
V_CNT := 0;
--将FOR循环查询的内容
FOR SQL_ IN (SELECT MEMBERID, PointType, Points, SDate, Notes FROM MemberPointDemo) LOOP
--字段列表
MEMBERID := SQL_.MEMBERID;
PointType := SQL_.PointType;
Points := SQL_.Points;
SDate := SQL_.SDate;
Notes := SQL_.Notes; ----UTL_FILE.PUT_LINE 若需要EXCEL格式,需要每字段用逗号隔开,,WINDOWS EXCEL工具打开默认就是EXCEL格式
UTL_FILE.PUT_LINE(VSFILE, MEMBERID || ',' || PointType || ',' || Points || ',' || SDate || ',' || Notes );
--下面语句可以输出带引号的格式
--UTL_FILE.PUT_LINE(VSFILE, '"'||MEMBERID || '","' || PointType || '","' || Points || '","' || SDate || '","' || Notes || '"'); --计数器,每一条数据都循环+1
V_CNT := V_CNT + 1;
END LOOP; --打印每个文件 LOAD ROWS
DBMS_OUTPUT.PUT_LINE(V_Date || '.CSV文件LOAD ROWS:' || V_CNT); --放在LOOP 后,否则报错 ORA-29282: 文件 ID 无效/ORA-06512: 在 "SYS.UTL_FILE", LINE 878
--若不写如下 强制输出缓冲/关闭句柄,可能存在导出数据少于查询条目
UTL_FILE.FFLUSH(VSFILE);
UTL_FILE.FCLOSE(VSFILE); END;
以上,导出为指定目录下的CSV文件,112万记录,大约14秒。

快速导入导出Oracle数据demo(sqlldr、UTL_FILE)的更多相关文章
- 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法
如果在X64系统下我们想利用 MS SQL 的DTS导入导出 Oracle 数据,由 oracle 不支持路径中包含")",会引发 ORA-06413:连接未打开错误 解决的办法很 ...
- Oracle中用exp/imp命令快速导入导出数据
from: http://blog.csdn.net/wangchunyu11155/article/details/53635602 [用 exp 数 据 导 出]: 1 将数据库TEST完全导出, ...
- oracle创建表空间、创建用户、授权角色和导入导出用户数据
使用数据库管理员身份登录 -- log as sysdba sqlplus / as sysdba; 创建临时表空间 -- create temporary tablespace create tem ...
- PL/SQLDeveloper导入导出Oracle数据库方法
前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...
- PL/SQL Developer导入导出Oracle数据库方法
前一篇博客介绍了Navicat工具备份Oracle的方法.这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...
- 通过命令窗口导入导出oracle数据库到dmp文件
通过命令窗口导入导出oracle数据库到dmp文件 很多时候我们需要备份Oracle的数据库,然后将数据导入其他数据库,因为有大文本字段会导致insert无法完全导出,只能导出为dmp文件,前提是wi ...
- Mysql导入导出大量数据的方法、备份恢复办法
经常使用PHP+Mysql的朋友一般都是通过phpmyadmin来管理数据库的.日常的一些调试开发工作,使用phpmyadmin确实很方便.但是当我们需要导出几百兆甚至几个G的数据库时,phpmyad ...
- 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...
- 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
1. Java代码实现思路 BufferedWriter writefile = new BufferedWriter(new FileWriter(file)); writefile.write( ...
随机推荐
- MySQL 基本语句(1)
一.cmd命令行的常用命令: 当我们使用MySQL 5.5 Command Line Client这个客户端登陆时,只能登陆root用户.如果今后创建了别的用户,就很麻烦了,所以我们不用MySQL 5 ...
- 简易付XP版本无法获取server.xml配置文件处理方案
博客地址:https://blog.csdn.net/zdw_wym/article/details/40892535 把它添加到C:/WINDOWS/Microsoft.NET/Framework/ ...
- perfect-scrollbar在vue中的使用
1.下载perfect-scrollbar依赖包 npm install perfect-scrollbar 2.perfect-scrollbar特性 1)直接下载依赖包及包含css样式和js 2) ...
- Java线程相关的热门面试题
---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- c/c++ 编译器提供的默认6个函数
c/c++ 编译器提供的默认6个函数 1,构造函数 2,拷贝构造函数 3,析构函数 4,=重载函数 5,&重载函数 6,const&重载函数 #include <iostream ...
- Django中间件的使用
Django中间件的使用 中间件(middleware) 中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应 ...
- http协议与https协议
1.前言 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应用层分别为:物理层.链路层.网络层.传输层和应用层,如下图所示: 2.http协议简介 ...
- YYModel HandyJson
数学基础: 以类型集合空间为基础,多阶向量结构间的同构映射: 若两个数学结构之间存在同构映射,那么这两个结构叫做是同构的. 基于集合空间的映射: 原理: 1.根据类型名称获得类型的元信息: 2.根据映 ...
- UVA11059-Maximum Product(动态规划)
Problem UVA11059-Maximum Product Accept:4769 Submit:38713 Time Limit: 3000 mSec Problem Descriptio ...
- python入门学习:3.操作列表
python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表 循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...