资讯

展开

oracle数据库SPOOL缓冲池导出数据,SQLLDR-导入数据

作者:快盘下载 人气:

SPOOL缓冲池导出数据;

1.数据泵虽然功能强大;但有一点非常尴尬;就是它面向的对象仍为Oracle;
导出的文件不能直接导入到其他种类的数据;且导出文件为二进制文件;
也不能直接查看导出内容。为了给下游系统提供数据;或某些时候以表格形式为业务人员提供大量数据;可以采用SPOOL缓冲池技术。
2.SPOOL缓冲池需要在SQLPLUS工具中使用;为了导出格式正确;需要提前设置一些参数

;数据泵导入导出可以在我的博客里面看;

--设置SQLPLUS参数 只在当前SQLPLUS工具中有效
set trimspool on --是否删除每行后的空白字符;建议on
set trimout on --是否允许每行后的空格;建议on
set echo off --是否显示执行命令的内容;建议off
set newpage none --一页中空行的数量;建议无空行
set feedback off --是否显示“返回n行”;建议off
set linesize 200 --每行的字符长度;一定要根据数据行的长度设置;过少自动换行;过长文件过大 
set pagesize 0 --每页的间隔;建议无间隔
set heading off --是否打印列标题;建议off
set term off --控制当使用;、;;或START命令执行一个命令文件时;是否显示中间结果;建议off
set timing off --是否显示命令时间;建议off

--启动spool 并设置导出路径和文件名称及类型(常用;.txt或.csv或.dat)
spool D:pathfilename.txt

--设置查询内容 
SELECT col1||;|;||col2||;|;||col3||;|;||col4... FROM tb_name;

--结束spool
spool off

我们导出还是以emp表为例;写一个.sql脚本;脚本内容如下;并将其封装。

set trimspool on 

set trimout on 

set echo off 

set newpage none 

set feedback off 

set linesize 200 

set pagesize 0 

set heading off 

set term off 

set timing off 

SPOOL D:DIR1EMP.DAT

SELECT EMPNO||;|;||ENAME||;|;||JOB||;|;||MGR||;|;||TO_CHAR(HIREDATE,;YYYY-MM-DD;)||;|;||SAL||;|;||COMM||;|;||DEPTNO FROM EMP;

spool off

==========================================

SPOOL D:DIR1EMP.DAT  --导出为EMP.DAT文件;存放在D:DIR87里

我是把脚本放在D盘的dir1文件里;D:DIR1;;这个是实际路径

执行导出命令;导出为一个.DAT文件;调用脚本;

;进入SQL的方法;cmd打开命令行窗口;输入sqlplus / as sysdba 登录数据库;

输入conn scott/scott --连接scott用户;我是在scott用户下执行的;;

SQL>;D:DIR1EMP.SQL

oracle数据库SPOOL缓冲池导出数据,SQLLDR-导入数据

这是执行成功了;如果失败会报错。

然后我们去路径 ;D:DIR1;看一下

 我们可以发现EMP.sql就是用来导出数据的数据库脚本;内容与上面的一致;而EMP.DAT就是我们导出的数据文件;其内容如下

oracle数据库SPOOL缓冲池导出数据,SQLLDR

这是根据我们的查询语句导出的数据;一会导入的时候可以以这个文件为数据文件导入数据

SQLLDR导入数据

介绍;

SQLLDR是ORACLE另一项非常方便的工具;它常用来接收其它种类数据库导出的文本文件。
它的命令组成中常包括以下几项内容;
数据文件;即接收到的文本文件;常见.dat.txt;
控制文件;一种控制数据如何加载的控制文件;.ctl;
日志文件;记录sqlldr的加载过程、执行情况、报错信息等;.log;
错误文件;记录数据加载过程中因各种问题导入失败的数据;.bad;

SQLLDR导入数据必须的文件是.dat数据文件和.ctl控制文件;而日志文件和错误文件是在执行时创建的

数据文件我们用上面导出的EMP.DAT文件就行;现在就需要编写一个控制文件

语法如下;

--ctl文件配置;
OPTIONS (skip=1,rows=128) --skip决定跳过的行;rows决定每加载多少行提交一次数据
LOAD DATA --数据加载
CHARACTERSET ZHS16GBK --设置编码 ZHS16GBK或 ;UTF8;
INTO TABLE tb_name --目标表
INSERT|APPEND|REPLACE|TRUNCATE --数据加载模式
FIELDS TERMINATED BY ;|; --字段间分隔符设置
OPTIONALLY ENCLOSED BY ;;; --数据括起方式;没有可以忽略
TRAILING NULLCOLS --字段无对应数据时允许为空
( col_1  ;trim(:col_1); ,
  col_2  ;trim(:col_2); ,
  col_3  ;trim(:col_3); ,
  col_4  ;to_date(:col_4,;YYYY-MM-DD;); ,
  TS       ;to_char(sysdate,;YYYY-MM-DD HH24:MI:SS;) )

--数据加载模式
类似于IMPDP功能;SQLLDR进行数据加载时也提供了不同的加载方式
1;INSERT;直接插入数据;但是要求目标表中不能有数据存在;该方式也是默认方式;--;一般不用;
2;APPEND;增量加载数据;表中原数据保留;将新数据加载到目标表;
3;REPLACE;覆盖旧数据;类似于加载数据前对目标表执行了删除数据操作;DELETE FROM tb_name;
4;TRUNCATE;覆盖旧数据;类似于加载数据前对目标表执行了清空数据操作;TRUNCATE TABLE tb_name; 这种方式是最常用的一种。

编写控制文件;

OPTIONS (skip=0,rows=128)
LOAD DATA
CHARACTERSET ZHS16GBK
INTO TABLE EMP
TRUNCATE
FIELDS TERMINATED BY ;|;
TRAILING NULLCOLS
(EMPNO    ; TRIM(:EMPNO   );,                               
ENAME    ; TRIM(:ENAME   );,                               
JOB      ; TRIM(:JOB     );,                               
MGR      ; TRIM(:MGR     );,                               
HIREDATE ; TO_DATE(TRIM(:HIREDATE),;YYYY-MM-DD;);  ,       
SAL      ; TRIM(:SAL     );,                               
COMM     ; TRIM(:COMM    );,                               
DEPTNO   ; TRIM(:DEPTNO  );
)

--将其封装成.CTL文件放到;D:DIR1;路径下

-sqlldr命令;--不需要连接数据库用户;但需要进入安装了数据库的计算机用户

语法;
sqlldr --sqlldr启动
user_name/pwd;ip:1521/db_name --指定用户名、密码、IP和实例名称
data=pathfilename.dat --数据文件路径;可txt、dat、csv等文本文件
control=pathfilename.ctl --控制文件路径
bad=pathfilename.bad --错误文件路径;存储导入失败的数据
log=pathfilename.log --日志文件路径;记录导入过程
errors=0 --允许失败数据量;一般设为0;即一旦出现失败即停止

--在cmd窗口运行以下命令导入数据 (以下命令是一行;不可以分行)

sqlldr SCOTT/scott;192.168.2.72:1521/orcl data=D:DIR1EMP.DAT control=D:DIR1EMP.ctl bad=D:DIR1EMP.bad log=D:DIR1EMP1.log errors=0

执行结果;

oracle数据库SPOOL缓冲池导出数据,SQLLDR
 

 运行成功;提交了14条数据

我们再来看看DIR1文件夹里都有什么现在

导入数据

 ;里头EMP.DMP和EMP.LOG是我之前用数据泵导出的数据文件和日志文件;

所以我们可以发现EMP.sql是我们编写用来导出EMP.DAT;数据文件;的脚本;而EMP.CTL则是上面编写的控制文件;EMP1.LOG是导入数据时生成的日志文件;因为没有错误;所以没有错误文件。

我们可以看一下导入数据时生成的日志文件

oracle数据库SPOOL缓冲池导出数据,SQLLDR

里面就是一些信息和运行的时间。

至此;数据的导出导入就是成功了。 

 

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!