SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。
1.上传oracle精简版客户端到服务器/tmp目录下,解压到/opt目录下,改名为oracleclient
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53894687
针对之前在生产环境中使用sql*loader的性能问题,最近一直在想使用外部表的oracle_datapump来替代它。 昨天下午做了大量数据的测试,比较了这两种方案。最后发现在一定的限定条件下,从很多细节来看 oracle_datapump要更胜一筹。 首先使用sql*loader对于clob,blob的数据相比普通表的处理要一些额外的工作,但是这些限制或者额外工作再oracle_datapump中就可以很方便的使用,oracle_datapump支持的数据类型要更丰富。 在生产环境中,迁移数据的时候,
sqlldr是在处理大数据量的操作中建议采用的方式,它有许多性能想关的开关,能最大程度的减少redo,undo的生成,控制数据的处理方式(insert,append,replace,truncate) 因为项目需要,对比datapump性能还是不理想,所以还是希望采用sqlldr来做。个人做了简单的测试。 根据thomas kyte的介绍,并行执行路径加载时最快的方式,能够直接写只格式化的数据块,最大限度的减少redo,undo的生成。 先写了如下的脚本。可以动态的从某个用户的表中生成元数据。 sqlp
bindsize -- 常规路径绑定数组的大小 (以字节计) (默认 256000)
今天,系统中的一个业务处理莫名地执行了6个小时都没有结束,正常处理也就是3分钟左右,对原因进行定位,发现是在Oracle客户端上同步执行一个命令没有响应。今天来分享一下这个问题,让更多的人避开这个坑。
使用sql*loader是大型项目中数据迁移的利器。如果是外部系统,其他数据库到oracle的数据迁移,使用文本式文件是最兼容的方式。 sqlldr的加载效率是很高的,同时在oracle 10g以后推出的oracle_loader效率也不容小视。 sqlldr提供了额外的功能来生成external_table的创建和insert脚本,不过control file是关键,今天尝试的时候就出现了一些问题。 > sqlldr n1/n1 control=NAME_DATA_sqlldr.ctl externa
环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 客户端:WIN10 + Oracle 11.2.0.1 client 目录:
今天说的这个案例发生在年初,某银行的一个数仓系统整体性能不佳,其中还有个奇怪的问题就是,两个结构比较类似的表,用sqlldr加载4000万左右的数据,一个需要1.5小时,另一个就要4.5小时,这对一个跑批业务来说影响是非常大的。客户自查了挺长时间也没找到原因。
SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括
exp/imp 对于数据结构的复制和同步,还是比较理想的工具。 在数据量比较小的情况下,这个工具的性能要远远好于datapump,而且重点推荐,他对于各种常用数据类型的支持还是很不错的。 有一些特性,在某种程度上要好于datapump,在做数据迁移的时候,commit特性还是很重要的。因为通过datapump碰到了很多undo空间不足带来的问题。 datapump 在10g版本开始,就开始推荐使用的datapump,算是对exp/imp的补充说明。在使用数据量中等的数据迁移中,是比较好的方案,它有几个亮
SQL> create user oracle identified by oracle;
1.创建序列 CREATE SEQUENCE SEQ_ROAD_NETWORK_PLAN MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 10 NOORDER NOCYCLE ; 2.查看建表DDL语句 SELECT DBMS_METADATA.GET_DDL('TABLE','表名大写','用户大写') FROM DUAL; 同理可以更换第一个参数的名字查看其他对象的DDL。 3
在生产环境的数据迁移中,发生误操作真是很不愿意看到,今天自己总结了一下,从个人的经验来看有以下的几种操作或者是失误导致的问题。有一些错误自己已经犯过。 外键 不管是使用imp/impdp,sqlldr还是使用Insert append的方式导入数据,如果存在外键的约束,在数据导入前最好都设置为disable,要不数据导入的时候很可能发生冲突,因为批量的数据导入很可能开启多个并发进程,如果你不能完全控制导入的先后顺序,最好还是disable掉。 触发器 触发器在数据导入前最好和开发组确认,如果忽略了这个
前面一文简单介绍了 Oracle 大数据量导出工具——sqluldr2 的安装与使用,sqluldr2 的诞生主要是用于将大批量的 Oracle 数据快速导出成 CSV/Text 文本格式,方便导入到其他数据库中,如今国产化进行的如火如荼,这个工具也是在国产数据库迁移中使用比较广泛的工具,值得大家去学习与使用,今天要说的是 Oracle 数据库自带的数据导入工具 SQL*Loader(sqlldr),只要你安装了 Oracle 数据库,那么这个工具就存在于 ORACLE_HOME/bin 目录下,它的功能是将从其他数据库中导出的 DAT/CSV/Text 文件加载到 Oracle 数据库中。数据泵导入需要 dmp 文件才可以,执行 insert 语句插入需要 .sql 文件才行,当然外部表的形式也可以,但外部表没法编辑且文件位于数据库外,不能 update 编辑数据则考虑 sqlldr 直接加载到 Oracle 数据库中更为方便。
最近根据业务需要加载一批数据,在生产环境中不到半个小时就完了,可是到了测试环境,竟然跑了6个多小时,另外测试环境和生产环境的数据情况都基本差不多,主机配置也基本类似。 大家的注意力都集中到了sqlldr的加载性能上。等到他们找到我时,已经讨论了不少关于direct,convention加载的各种情况了,看似工作也做了不少了。 然后我通过邮件历史记录看到大家还讨论了可能是index导致的结果。 等到邮件转到我这的时候,已经问题算升了一个等级了。我首先要确定的就是具体的环境,在那台服务器上跑sqlldr,要把
外部表只能在Oracle 9i 之后来使用。简单地说,外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们
在测试环境中做了3轮数据迁移的演练,最终到了生产环境中,还是出现了不少问题,经过大半夜的奋战,终于是数据都迁移成功了。 1)共享存储的配置问题 共享存储使用NFS来共享存储,但是在实际操作中发现配置出了问题,原因是因为两台服务器上的用户不同在,目标机器上没有任何写权限。 -rw-r--r-- 1 3160 dba 6608 Jun 26 23:35 tmp_gunzip.sh -rw-r--r-- 1 3160 dba 624 Jun 26 23:30 tmp_gzip
使用root用户创建目录 示例:mkdir /orctmp 将目录授权给oracle用户 示例:chown -R oracle:oracle /orctmp
接着续上次提到的sqlldr的性能问题,加载一个表数据400多万条记录,竟然用了6个多小时。最后大家争论不休的时候,我发现应该是网络的问题。 http://blog.itpub.net/23718752/viewspace-1182534/ 今天客户IT的同事把网络做了调整,他们就想看看到底改进有多大。 下面是测试的一些记录。 àoriginal logs for issue table, loading around 6 hours. Total logical records skipped:
今年以来,在某客户现场遇到了2次HPUX IA64平台11g及12c某些版本登陆速度缓慢的问题(包含本地及远程sqlplus/jdbc登陆都慢),经过大量测试分析,最终确定Oracle的某些PSU存在缺陷,导致在HPUX IA64平台上登陆时间大幅增加。
有多种方式可以将文本文件的数据导入到数据库中,例如,利用PLSQL Developer软件进行复制粘贴,利用外部表,利用SQL*Loader等方式。至于EXCEL中的数据可以另存为csv文件(csv文件其实是逗号分隔的文本文件),然后导入到数据库中。
ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程
今天需要导一些数据,从excel导入到数据库中。 没有装现成的plsqldev,只能用sql*loader来弄了。 首先我把excel文件的内容转换成csv文件,以逗号分隔,在另存外excel文件的时候有那个选项。 然后我在目标库中创建了如下的表。 create table sql_summary(sql_time varchar2(100),sql_id varchar2(100),cpu_time varchar2(100),disk_time varchar2(100),exec_time varch
一直以来我们想要推进内部的自动化系统,但是总是会遇到各种各样具体的问题,有时候我们准备好了,但是总是会有一些因素的干扰,再加上工作时间的安排,有些事情就一拖再拖。《人民的名义》里说得好,打铁还需自身硬
若是少量数据;可选择的解决方案有很多。常用的用 Pl/SQL developer工具,或者手动转换为 INSERT 语句,或者通过API。但数据量大;用上面的方法效率太烂了。本文来说说 Oracle 数据的加载和卸载。
在数据迁移中,sql*loader和datapump总是作为一些常用的数据迁移方案,自己在经历了一些项目之后,优点就不说了,说点这些方案的缺点,批评不自由,则赞美无意义,所以我在提出了一些失败错误的经验后,会在下一篇中给出这些缺点的解决方案。毕竟解决问题才是最重要的。 使用sql*loader的缺点 可能存在潜在的乱码问题,尤其是对于特定字符集的数据,因为sqlldr可以从客户端导出,如果客户端的语言设置不当,导出的文件会有乱码的隐患。 数据问题,这个是sql*loader使用比较头疼的地方,因为这
在昨天讨论了关于目前遇到的多系统交互中关于推送文件的一些基本的要求,http://blog.itpub.net/23718752/viewspace-1814410/ 虽然感觉已经提了不少的要求,基本能够做到全面的把握,但是说归说,计划归计划,实际要做的时候,问题就很具体了,有时候很可能会和自己的想法有一些出入。 #难点1 sqlldr加载数据的格式解析 首先是碰到的问题就是解析csv文件,把它包装成sqlldr可以执行的格式。 比如表的结构如下: SQL> desc AREA
导入sql表结构 • 用sqlplus命令登录Oracle sqlplus system/password@orcl • 使用@命令导入sql文件 SQL> @/path/to/file/sample.sql 导入数据 • 导入ctl文件 在命令行中,执行 sqlldr userid=username/password control=sample.ctl ---- Previous Oracle数据库列出所有表
You want to access employee details contained in flat files created by an application.
本文介绍了如何使用 Oracle 的 sqlldr 导入工具,将日期列正确地导入到目标表中。首先,作者介绍了如何使用 sqlldr 导入数据,并指出了在遇到日期列时需要采取的特殊处理方式。接下来,作者演示了如何使用 sqlldr 的控制文件来指定日期列的格式。通过使用这种控制文件,可以轻松地将日期列导入到目标表中。
sqlldr userid=showdata@prod control=data.ctl
作者:eygle 原文链接: http://www.eygle.com/archives/2007/02/dul_vs_aul.html ----
Oracle的数据恢复处理,有各种方法工具支持,在这方面,我算是一个新手,也是处于不断的学习中。
本文介绍了如何使用ODU(Oracle Data User)从快照中恢复数据,并使用ODU将数据导出为CSV文件。通过使用ODU,可以方便地恢复被删除的数据,并将其导出为CSV文件,方便后续使用。
数据库表: • 表输出 • 更新,删除,插入/更新 • 批量加载(mysql,oracle) • 数据同步 文件: • SQL 文件输出 • 文本文件输出 • XML 输出 • Excel Output/Excel Writer 其他(报表、应用)
在平时的工作中接触到的分区表一般都比较大,而且分区也少则几十,多则几百,上千。 在数据迁移的时候,分区表的迁移更是块大骨头,因为数据量太大,而且有些分区表中还有一些lob字段,想直接通过sqlldr来迁移还是需要做一些额外的工作。 如果通过datapump分区导出数据,批量导入,也是一种思路,不过需要考虑好并发的进程。 通过oracle_datapump来做数据的导入,可能更为灵活,但是不是绝对的。最近就做了一些相关的数据导入测试,感触不少。 比如,目前我们需要导入的两个大表,一个是memo,一个是cha
今天有个同学问我一个问题,也是一个实际的案例,我简单分析了一下,发现还是有很多可以考究的地方。仅做参考。 问题是,系统里目前有一个大表,因为历史数据的沉淀,目前有60多亿的数据,不是分区表,现在得到反馈说insert的操作比较满,想优化一下,同时把部分历史数据需要做一些清理。 对于这类操作,要求停机时间尽可能短,有什么好的办法。 对于这个问题看起来问题似乎是很明显的。 目前反应出的问题是Insert慢,可能有下面的几个原因。 1.表索引巨大,索引维护管理要复杂一些 2.表中可能含有一些冗余索引,或者多个索引
本文将介绍SQL*Loader用户配置文件的参数中,传统常规路径(Conventional Path)情况下和性能有关的参数:ROWS、BINDSIZE和READSIZE。
最近碰到这样一个问题,类似下面的架构形式。 目前应用1是一个另外一个网段的系统,负责一块业务,而应用2是目前我所负责的数据库所在的环境里。 现在因为业务需要,需要从应用1来推送一部分数据到应用2,只在
SQL*Loader 是用于将外部数据进行批量高速加载的数据库的最高效工具,可用于将多种平面格式文件加载到Oracle数据库。SQL*Loader支持传统路径模式以及直接路径这两种加载模式
近期在做一些国产数据库的 POC 工作,在数据迁移导出时用到了数据导出工具 sqluldr2,它是一款十分不错的 oracle 数据导出工具,还支持导出时同时生成 sqlldr 的控制文件,它可以将数据以 TXT/CSV 等格式导出,能导出亿级数据为 excel 文件,包含32、64 位程序,不仅在大数据量导出方面速度超快,导入速度也是非常快速。
说起数据迁移,感觉也算是有些感受了,但是最近参与的几个迁移案例还是和以前大大不同,以前的迁移项目是比拼停机维护时间,尽可能在短时间诶导入大批量的 数据,有参与表空间传输的场景,还有跨平台的数据迁移,数据库迁移式升级等等,相对难度大一些的算是增量数据的迁移场景。为此也算把 sqlldr,datapump和exp/imp玩了一圈,最后写了一个小的工具使用外部表迁移,也算是有了一些谈资。 最近的迁移项目还是有些特殊,有schema级别的迁移,这种情况数据库版本的影响就没有那么大了,基本就是schema级别
源码:tbuldr.c摘自网络 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <oci.h> #include <oratypes.h> #include <ocidfn.h> #ifdef __STDC__ #include <ociapr.h> #else #include <ocikpr.h> #endif #include <ocidem.h> #if defined(_
预告: 下一次培训主要面向DBA, 讲一下ora工具的用法与用途,大概需要一天时间.
Oracle创建数据库时指定字符集,一般不能修改,整个数据库都是一个字符集。虽然还支持指定国家字符集,用于nvarchar2类型,不过很少用到。常用的字符集:AL32UTF8和ZHS16GBK,其中AL32UTF8与UTF8几乎是等价的。一个汉字在AL32UTF8中占三个字节,而在ZHS16GBK中占用两个字节。
DBA和开发都是两个可爱的团队,如果合作起来,那战斗力可是杠杠的。如果合作不愉快,那就是一件简单至极的事情都能扯皮几天几夜,而且还解决不了。 今天出公司的时候碰见一个开发同事,因为最近和开发同事打交道太多了,我都分不清到底他到底是哪个team的,然后就迷迷糊糊搭上了话,然后简单问了几句话,发现我潜意识里认错人了。不过最近碰到的有些开发同事都还比较配合。值得赞扬,但是还是有一些代沟的。 案例1: 偶尔会接到开发同事的紧急求助 开发同事 [10:46]: 建荣 10月20号xxxx给你下过工单开通数据库访问
最近想做一个简单的地理位置分析,比如获取一些城市公交站点对应的geohash,geohash其实是将平时常见的经纬度进行了降维,这样可以进行类似附近的餐馆等内容的分析。
在测试环境中进行了多轮测试,使用sqlldr批量加载数据,csv文件大概有120G左右,在一致的数据量的情况下,测试环境都在一个小时左右,但是在生产环境中竟然跑了将近2个小时,性能差了一倍。而且生产环境的服务器配置还要好一些。对于这个奇怪的问题,尽管说数据第一轮数据迁移已经完成了,对于之后的数据迁移还是很好的参考和经验借鉴。 今天对生产环境和测试环境中的信息进行了比对。先拿到对应的awr报告。 测试环境的数据库情况如下。 Host NamePlatformCPUsCoresSocketsMemory (GB
领取专属 10元无门槛券
手把手带您无忧上云