尝试了很多办法,都不好用
sqluldr2简介与使用
sqluldr2是一款Oracle数据快速导出工具,包含32、64位程序,sqluldr2在大数据量导出方面速度超快,能导出亿级数据为excel文件,另外它的导入速度也是非常快速,功能是将数据以TXT/CSV等格式导出。
sqluldr2下载地址:http://www.pc6.com/softview/SoftView_516318.html
下载完sqluldr解压后,文件夹内容如下:
sqluldr2.exe 用于32位windows平台;
sqluldr2_linux32_10204.bin 适用于linux32位操作系统;
sqluldr2_linux64_10204.bin 适用于linux64位操作系统;
sqluldr264.exe 用于64位windows平台。
使用方法
1、首先将sqluldr2.exe复制到执行目录下,即可开始使用
2、查看help 帮助
3、执行数据导出命令
3.1、常规导出
sqluldr2 hr/hr123@127.0.0.1:1521/XE query="select * from bb_user_t" head=yes file=D:\sqluldr2\File\tmp001.csv
说明:head=yes 表示输出表头
3.2、使用sql参数
sqluldr2 hr/hr123@127.0.0.1:1521/XE sql=query.sql head=yes file=D:\sqluldr2\File\tmp002.csv
或
sqluldr2 hr/hr123@127.0.0.1:1521/XE sql=D:\sqluldr2\query.sql head=yes file=D:\sqluldr2\File\tmp002.csv
query.sql的内容为:
select * from bb_user_t
3.4、大数据量操作
对于大表可以输出到多个文件中,指定行数分割或者按照文件大小分割,例如:
. sqlldr的使用,常见异常
安装ORACLE客户端中有SQLLDR命令
我的sqlldr位置:C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlldr.exe
注:导入数据字段,表中必须包含(>=)导入数据中字段;
导入数据时遇到的问题:
异常1:SQL*Loader-522: 文件(temp_004_sqlldr.log)的lfiopn失败
异常2:SQL*Loader-350: 语法错误位于第 15 行。
异常3:SQL*Loader-601: 对于 INSERT 选项, 表必须为空。表 BB_USER_T 上出错
异常4:SQL*Loader-941: 在描述表 BB_USER_T_1 时出错
SQL*Loader-522: 文件(temp_004_sqlldr.log)的lfiopn失败
原因可能两种
1.路径和文件名 不正确或不存在
2.权限不足
解决:将C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlldr.exe的sqlldr.exe粘贴到temp_004_sqlldr.ctl文件的目录下,继续执行;
连接数据的方法:
本地连接方式:
./sqluldr2linux64.bin user=gltest/gltest query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv
客户端连接:TNS方式
./sqluldr2linux64.bin user=gltest/gltest@orcl query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv
客户端连接:直接连接方式
./sqluldr2linux64.bin user=gltest/gltest@192.168.128.98:1521/orcl query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv
1. 导出文件里有中文显示乱码,需要设置参数charset=UTF8
2. ORA-24345: A Truncation or null fetch error occurred,设置参数safe=yes
这个so文件,在安装oracle后,肯定是有的,如果没有可以用软连接 ln -s xxxx libclntsh.so.10.1
1.下面只需配置 LD_LIBRARY_PATH
export ORACLE_HOME=/u01/app/Oracle/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin
2.source /etc/profile
Oracle提供了高效的文本装载工具(sqlldr)来装载格式化文本文件(如CSV文件)里的数据到Oracle中,却不提供一个文本导出工具来做不同数据库之间的数据交换。特别是在各种大数据技术(Hadoop/Greenplum等)兴起的年代,文件文件是最好的数据交搞方式,看来是必须得自己写程序或脚本来做这个工具了。SQLULDR2就是为此目的而用OCI接口编写的高效工具,并且已经被全世界的Oracle DBA使用超过10年了。
Oracle占据了绝大部份传统应用,而MySQL则占据了新应用领域,一般来讲DBA需要同时管理和操作这两种数据库了,因此会从Oracle和MySQL中导出数据进行交换。为了少记几个参数,又编写了MySQLULDR2来支持MySQL数据库,这两个工具有相同的命令行参数(以后也许会整合成一个),以方便大家使用。
sqluldr2没有输出
这个得用PL/SQL DEV这个工具才行。
1、打开PL/SQL DEV,然中要进行导出的表,点击右键,在弹出的菜单中,选中Export data(如下图所示)。单击Export data后,在右侧就出现了导出设置的窗口,如下图所示:
在窗口下方,选中SQL Inserts标签页,设置导出条件。
3、设置完成后,点击Export按钮,即可导出。
这个工具不能指定多个sql语句导出
1.文本文件student数据如下
1001,李三,90
1002,王五,87
1002,李四,86
2.在oracle数据库中scott用户创建表student表
create table student (id int ,name varchar2(20),grade int);
.编写sqlldr控制文件student.ctl
load data
infile 'e:\student.txt'
into table student
fields terminated by ','
(
id,
name,
grade
)
4.导入数据
C:\>sqlldr scott/tiger control=e:\student.ctl log=e:\log.log
select
'INSERT INTO B_STATTEMPLATE ( N_ID,C_NAME, C_KBH, N_PRINT, N_TYPE, N_APP, N_VALID ) '
|| 'Values (' || To_Char(N_ID) ||',''' || C_NAME || ''', ''' || C_KBH || ''', '
|| To_Char( N_PRINT ) || ', ' || To_Char( N_TYPE ) || ', ' || '0, 0 );'
from b_stattemplate
.去掉环境变量NLS_LANG;
2.在执行语句前加上unset NLS_LANG;
环境变量本来就NLS_LANG 没有,不起作用
最后说下有关SQL Loader的性能与并发操作
(1)ROWS的默认值为64,你可以根据实际指定更合适的ROWS参数来指定每次提交记录数。
(2)常规导入可以通过使用INSERT语句来导入数据。Direct导入可以啵过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能。当然,在很多情况下,不能使用此参数。
(3)通过指UNRECOVERABLE选项,可以关闭数据库的日志,这个选项必须与direct一起使用。
(4)对于超大数据文件的导入就要用并发操作,即同时运行多个导入任务。
sqlldr userid=/ control=result1.ctl direct=true parallel=true
使用sqluldr2在oracle bin目录下执行后,没有任何效果,没有日志也没有数据。是在/etc/profile 或者.bash_profile 文件中配置了 NLS_LANG的问题,注释掉或者换一个值试试看背景是需要把ORACLE中的历史数据导出做数据备份存储,由于ORACLE配置的字符集是AMERICAN.AMERICA_WE8ISO8859P1,
select parameter, value from nls_database_parameters;
查询以下三个参数值:
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CHARACTERSET AL32UTF8
查询NLS_LANG的组成规则为NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'