oracle导出多CSV文件的靠谱的

高效数据迁移:利用kettle实现CSV与Excel文件快速导入数据库 本文详细介绍了如何利用Kettle这一强大的ETL工具,高效地将CSV和Excel文件数据快速导入数据库。通过对比传统PLSQL方法的低效,文章以实战案例展示了Kettle在数据迁移中的显著优势,包括可视化拖拽操作、无需编码以及处理海量数据时的卓越性能,是提升数据搬运效率的实用指南。 阅读详情
 

oracle导出多CSV文件的问题


----------------------------------------------------------------------

用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv

我已经实现了一个方法,但80w要导5小时,用户没法接受。如下:
sqlplus -s user/pwd @${SqlDir}/select_log.sql >/tmp/a.tmp
然后每read 4000行到文件a_1.csv,并且每隔4000行换一个文件名。

大家有什么好方法吗?注意效率

----------------------------------------------------------------------

先一次性生成一个csv文件
再用split分割文件

--------------------------------------------------------

完全赞同楼上说的。

关于性能问题,用oracle spool出80万行纪录是非常快的,我刚试了一下,再hp-ux下,spool出某表中100万纪录(2列)耗时大约2分钟,输出文件80m, 用split命令分割为每个4000行的文件耗时数秒而已。 下附测试代码:

/* sql file:  spool_test.sql */
set pages 0
set head off
set echo off
set feedback off
spool spool_text.csv
select col1, col2 from my_table where rownum<1000000;
spool off
exit

## shell script to spool out:
sqlplus -s user/password @spool_test.sql > /dev/null

## split file:
split -l 4000 spool_text.csv splited


--------------------------------------------------------

export.sh

#Generate the sql language
echo "SET HEADING OFF;">${SqlDir}/select_log.sql
echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql
echo "SET LINESIZE 10000;">>${SqlDir}/select_log.sql
echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql
echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql
echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql
echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql
echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql
echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql
echo exit | ${ORACLE_HOME}/bin/sqlplus -s omc_sbardz812/omc_sbardz812 @${SqlDir}
/select_log.sql >/dev/null

split -l 4000 -a 5 ${SqlDir}/EXPORT_ALL.CSV log_20060606_
=============================================================

以上是我的脚本,80w数据我用了3个多小时还没完呢。有问题吗?
另外,很重要的一点,split后,再不是csv后缀了。看来还得文件遍历,然后一个一个的mv 成csv文件。



--------------------------------------------------------

先整个导出罢,然后在处理

--------------------------------------------------------

你的代码看起来没有问题,但80万条记录导3小时没完成很难让人理解。

你用sqlplus做一下测试,比如导出10000条记录需要多少时间,如果确实很慢,那可能是连接太慢(网络速度?)。

--------------------------------------------------------

导出为csv文件很快,就几分钟而已,但是split要花3个小时,共250个文件,每个文件4000行。我的机器是SUN Blade 150,还有我在server上运行的,不存在网络速度的问题。

--------------------------------------------------------

根据需要导出的列,单独建个临时表,比如:create table sales_range_tmp as select salesman_id,salesman_name,sales_amount,sales_date from sales;
再利用脚本导出来,看看速度应该有所提高。不过有一点必须明白,全扫描8w的表数据肯定不是几分钟可以完成的,何况要写成物理文件。


--------------------------------------------------------

KingSunSha(弱水三千),我用spool导出的文件大小为9G(8900828448byte on solaris),而你的才80M

--------------------------------------------------------

SELECT 中不要拼接字符串,非常影响速度

--------------------------------------------------------

大家还有好的办法吗?

--------------------------------------------------------

9GB = 9,216 MB = 9,437,184 KB = 9,663,676,416 Bytes
800,000 records
size of each record (line) = 9GB/800,000 = 12,079 Bytes

select 中只有 4 列(SALESMAN_ID, SALESMAN_NAME, SALES_AMOUNT, SALES_DATE
),你觉得每行纪录占12KB合理吗?

--------------------------------------------------------

问题是你在sqlplus中用了set linesize=100000,所以每行都会spool出100000bytes。
解决这个问题很简单,在spool开始之前加上两行set命令

set trimspool on
set termout off

第一个set是指定trim spool出的每行在行末的空格
第二个set是指定只spool而不回显,所以在运行sqlplus的时候不需要 >/dev/null。


--------------------------------------------------------

非常感谢KingSunSha(弱水三千),现在我把linesize改为100,非常快,2分钟就完成了。太好了。不过还有一个问题,导出的文件,每隔13行就会自动设置一个空行,能把这个去掉吗?因为我导出的文件会被我的程序打开的。

--------------------------------------------------------

just add 
set pagesize 0
before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.


--------------------------------------------------------

just add
set pagesize 0
before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.

--------------------------------------------------------

非常感谢KingSunSha(弱水三千),搞定了,贴出来吧,共享!

echo "SET HEADING OFF;">${SqlDir}/select_log.sql 
echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql 
echo "SET LINESIZE 500;">>${SqlDir}/select_log.sql 
echo "SET trimspool on;">>${SqlDir}/select_log.sql 
echo "SET termout off;" >>${SqlDir}/select_log.sql 
echo "SET NEWPAGE NONE;" >>${SqlDir}/select_log.sql 
echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql 
echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql 
echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql 
echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql 
echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql 
echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql 
echo exit | ${ORACLE_HOME}/bin/sqlplus -s user/pwd @${SqlDir}/select_log.sql 

split -l 4000 -a 3 ${SqlDir}/EXPORT_ALL.CSV log_20060606_ 

#mv these splitted file to be csv file 
for file in $(ls ./) 
do 
    echo $file | grep log_20060606_ > /dev/null 
    status=$? 
    if [ $status -eq 0 ]; then 
        mv $file $file.csv 
    fi 
    status=1 
done 

80万10分钟就可以搞定了。

ksh可以执行,由于有这句:$(ls ./),sh不支持。

--------------------------------------------------------

谢谢大家!
PL/SQL Developer数据导出全攻略:从表结构到批量处理 在Oracle数据库开发与维护中,数据迁移和结构同步是核心需求。掌握高效的导出技能,不仅能提升工作效率,更能确保数据的完整性和准确性。PL/SQL Developer作为Oracle开发者的首选IDE,其内置的导出功能远比手动编写SQL语句更可靠。从基础的数据导出原理出发,通过Oracle Export工具生成二进制.dmp文件,适用于完整迁移和大数据量场景;而DDL导出功能则能生成纯净的SQL脚本,便于版本控制和环境初始化。对于灵活的数据筛选和格式转换,结合SQL窗口的查询导出功能,可以轻松将结果保存为C 阅读详情

相关推荐

DBF文件怎么打开?结构原理、查看工具与MySQL导入实战

数据库表文件是许多离线业务系统的数据载体,其中.dbf作为dBASE系列衍生格式,至今仍在测绘成果、GIS属性表等场景大量存在。这种二进制格式将字段定义与记录数据封装在同一个文件,通过文件头、字段描述区和记录区组织信息,读取时需要关注版本、字段类型以及中文GBK编码。掌握其底层原理,能帮助数据分析者快速解决文件打不开、乱码和导入异常等问题。在工程实践中,WPS、DBF Viewer Plus等工具可辅助人工查看,而Python dbfread结合类型映射,更适合批量迁移到MySQL。围绕用户常搜的“dbf文

weixin_34275734的博客 895

oracle导出千万级数据为csv格式

当数据量小时(20万行内),plsqldev、sqlplus的spool都能比较方便进行csv导出,但是当数据量到百万千万级,这两个方法非常慢而且可能中途客户端就崩溃,需要使用其他方法。 一、 sqluldr2工具 1. 优缺点 优点:高效;支持功能较多;用户只需有对应表查询权限;可以在从库执行 缺点:目前已没有再维护,只能找到基于oracle 10.2的版本(高版本目前还可以用);密码必须要跟在用户名后面输,安全性不足 2. 下载安装 百度云链接:https://pan.baidu.com.

Hehuyi_In的博客 1万+

SQL Developer解压版Oracle连接、JDK与DDL导出避坑

Oracle数据库连接通常依赖客户端、JDBC驱动与正确的连接描述符。SQL Developer解压版通过指定JDK启动,用Basic/TNS等方式解析主机、端口、SID或服务名,从而在跳板机和只读账号场景下完成临时查询、DDL导出与结构核对。其技术价值在于免安装、低依赖和可快速排障,适合测试库、准生产库之间的版本对齐与数据搬运。实际使用中,JDK路径、字符集NLS_LANG、抓取大小和自动提交等默认值常引发闪退、乱码与大结果集卡死。围绕SQL Developer 4.0.3.16.84 x64解压版,梳理

weixin_31421613的博客 224

oracle导出 导入大量数据 几百万的数据 用 csv文件

oracle导出 导入大量数据 几百万的数据 用 csv文件

Java&Develop的博客 1289

Oracle跟踪器实战:Toad for Oracle汉化版会话监控与锁分析

数据库性能波动时,会话状态与等待事件是关键的诊断入口。Oracle通过动态性能视图记录会话运行轨迹,锁等待和SQL执行效率直接影响业务响应。掌握会话跟踪与锁分析,能帮助DBA快速定位阻塞源头,降低故障处理成本。在实际运维中,图形化工具能大幅提升排查效率。Toad for Oracle汉化版提供的Oracle跟踪器,将会话监控、锁分析、SQL跟踪等功能集成于一体,是处理性能故障的常用利器。围绕环境准备、跟踪操作与结果分析,系统梳理了使用该工具进行会话监控与锁等待排查的完整路径,并针对汉化版常见问题给出解决方案

weixin_33831196的博客 297

oracle 快速导出数据至cvs文件

非常好用的,速度超快,免费的。请支持原作者,微博名:云计算民工。我只是搬运工。教程请自行去搜。

oracle生成csv数据的脚本

生成csv数据的脚本,同时也生成了control文件

q195136130的专栏 640

Oracle导出成csv格式后显示乱码的解决方法

Oracle导出成csv格式后显示乱码的解决方法,自己总结的

shell脚本实现Oracle数据库表数据的导出(文本文件)和导入

使用sqlldr命令把文本文件导入到导入到新的Oracle环境

luzhiji的博客 2823

oracle使用sql脚本生成csv文件案例学习

脚本内容如下: 代码如下: set linesize 3000; set heading off; set feedback off; set term off; set pagesize 0; set trimspool on; spool a.csv; select c1_name||’,’||c2_name from dual; select c1||’,’||c2 from tbtest spool off; 您可能感兴趣的文章:把CSV文件导入到SQL Server表中的方法MySQL 导出数据为csv格式的方法php将csv文件导

从零开始:面板数据熵值法的Stata实现与常见陷阱解析

本文详细介绍了面板数据熵值法在Stata中的实现步骤与常见陷阱解析。通过熵值法客观赋权特性,科学构建综合指数,特别适合处理多维面板数据。文章涵盖数据预处理、标准化方法选择、Stata代码实现及结果可视化,并针对常见问题提供实用解决方案,助力研究者避免分析误区。

study的专栏 616

java oracle导出csv_oracle导出多CSV文件的靠谱的

oracle导出多CSV文件的问题----------------------------------------------------------------------用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,....,a_200.csv我已经实现了一个方法,但80w要...

weixin_39906130的博客 391

SIMetrix教程-001.SIMetrix软件简介与安装

  由于某些原因需要用到SIMetrix仿真软件,然而网上的资料并不是特别多,故在此记录一下这款仿真软件的学习过程,也给有需要的人提供一些参考,免走弯路。如果使用过Pspice或者LTspice软件,学习SIMetrix会很容易入门,仿真软件都是大同小异的,会一样后都可以快速入门其他软件。   SIMetrix是一款以SPICE模型为基础的仿真软件,集成了SIMetrix和SIMPLIS两款内核,为工程师提供了可靠的、易于使用的、并完美结合了速度与精度的电路仿真方式。官方的话不多说,和LTspice一样,优

gaoyong_wang的博客 2万+

安装Oracle、Navacat连接Oracle、dmp文件导入Oracle数据库、Oracle数据库导出为CSV等文件全套教程!

(1)获得Oracle 11g、Navacat 16及其他小工具下载链接 (2)解决Oracle安装过程出现的:`未找到wfmlrsvcapp.ear` (3)解决连接Oracle时出现的:`ORA-12541:TNS:无监听程序` (4)解决数据入库时出现的:`ORA-39143:转储文件“**”可能是原始的导出转储文件`、`IMP-00010:不是有效的导出文件,标头验证失败`、`ORA-01031: insufficient privileges`、`没有DBA权限`、`表空间不足`等问题

qq_36665508的博客 2070

ROS2机械臂实战:从基础控制到视觉抓取

本文详细介绍了ROS2机械臂从仿真环境搭建到视觉抓取的全流程实战指南。内容涵盖使用Gazebo搭建仿真环境、编写基础控制节点、集成视觉感知进行目标检测与坐标变换,并设计状态机逻辑实现自动化抓取。通过系统集成与联调,帮助开发者掌握ROS2机械臂开发的核心技能。

weixin_29197699的博客 447

基于h5端的视频录制和回溯功能的实现

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

发果叁 3190

oracle 11 g, 无法导出空表解决方案

oracle 11 g挺蛋疼的,用exp导dmp文件的时候,不能把空表导出来,在网上查了些解决方案,感觉都不大靠谱,只好丑中选优,选了下面这种方案。 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 执行上面那条语句,会得到一些alter语句,看语句的意思,应该

hejinwei_1987的专栏 848

PowerDesigner 数据库建模使用详解

PowerDesigner 数据库建模使用详解

congge 7081

oracle导出文本或文本导入 oracle(转)

经常有需求向表中导入大量的数据,使用insert不靠谱,太慢oracle提供了sqlldr的工具 也有时需要讲数据导入到文本,oracle的spool可以轻松实现 方便的实现oracle导出数据到txt、txt导入数据到oracle 一、导出数据到txt 这里用all_objects表做测试 SQL&gt; desc all_objects; Name ...

Move Fast! 231

学Simulink——十二脉波整流电路(移相变压器)谐波抵消仿真

Y:Δ = 1:√3(若 DC 同压)— 此处同相电压故 220V(Y)=220V(Δ phase)Y(相电压=220V)、Δ(线电压=380V ⇒ 相=220V,30° 移相)可经 Lbal​=0.5mH(平衡电抗)或直接短(大 L_dc 下均流尚可)✅ 直流输出纹波频率 = 12·f_line(vs 6·f_line)直流输出 → Ldc​=50mH→Cdc​=2200µF→R=30Ω。Line‑Line RMS = 380 V(⇒ 相=220V)Vdc​≈1.35⋅380≈513V(同 6‑脉波)

xiaoheshang_123的博客 59

高项备考论文:规划绩效域

高项备考论文:规划绩效域

liuxu324的博客 1126

微信聊天记录导出全攻略:WeChatMsg 工具实操与长期归档方案

聊天记录备份与数据归档是个人数据管理中的基础需求,其核心原理在于对本地加密数据库进行解析与格式转换。通过将私密数据解密并导出为通用格式,用户可实现对重要沟通内容的长期保存、离线检索与二次分析,技术价值在于打破平台封闭生态、保障数据自主权。典型应用场景包括工作证据留存、家庭记录保存及个人知识库构建。WeChatMsg 作为一款开源微信聊天记录导出工具,支持 HTML、Word、CSV 等多种格式,配合合理的筛选与归档策略,能有效解决聊天记录迁移与备份难题,适合职场人、家长及内容工作者使用。

weixin_34347651的博客 334

SAP 集成泛微 OA Open API 新建流程申请接口

《SAP ERP 与泛微 OA 的系统集成》系列文章。泛微 Open API 是基于 HTTPS 的 Restful 接口,上篇文章,我已经完成了调用业务接口之前的准备工作,这篇文章我以新建流程申请这个系统集成最重要的接口为例,讲解接口设计、泛微 API 调用的过程、遇到的问题、解决的办法。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 3555

sqlldr实战:Excel海量数据高效导入Oracle全攻略

数据库运维中,大批量数据导入一直是性能瓶颈之一。与逐条INSERT不同,批量加载工具通过减少SQL解析与日志开销,显著提升写入效率。Oracle自带的SQL*Loader(sqlldr)正是此类场景的利器,配合文本格式的CSV文件与控制文件,可高效完成百万级数据入库。本文从Excel预处理、控制文件编写、direct模式等角度,系统梳理sqlldr的实践要点与性能调优经验,为DBA和数据工程师提供可落地的操作指南。

weixin_32932149的博客 259

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

linux下大文件编码转码及将oracle中数据导入mysql

这篇文章有不少废话,只是为了发泄一下。如果读者找需要解决的问题的办法,直接无视这些废话。 本文章为原创,转载文章请注明出处: http://blog.youkuaiyun.com/tianxiagongzheng/article/details/71812876 最近做的项目要将Oracle中数据导入Mysql, 数据量约有两千万条,庆幸的是只...

tianxiagongzheng的专栏 1605

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: oracle spool用法
下一篇: 如何将数据库的数据导入到csv文件中
火星种萝卜
博客等级 码龄19年 438粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值