读书笔记:数据搬运工:Oracle数据库的导入导出技巧
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
数据搬运工:Oracle数据库的导入导出技巧
数据搬运的两种神器
在日常数据库工作中,我们经常需要把数据搬进搬出Oracle数据库。这就好比给数据库做"进出口贸易":
数据进口工具:
- 外部表 - 能把普通文件当成数据库表来用
- SQL*Loader - Oracle的老牌数据加载工具
数据出口工具:
- Data Pump - Oracle的专用数据导出格式
- 平面文件导出 - 生成CSV等通用格式文件
外部表:新一代数据搬运利器
想象一下,你能直接查询一个文本文件就像查询数据库表一样,这就是外部表的魔力!
为什么选择外部表?
虽然SQLLoader还有很多人在用,但外部表正在成为新宠。只有在两种情况下还需要用SQLLoader:
- 需要从网络其他位置加载数据时
- 多个用户要同时处理不同文件时
外部表的超能力:
- 能用复杂的查询条件筛选要加载的数据
- 能直接更新现有数据库记录
- 加载时能关联其他表进行数据校验
- 能对数据排序后再加载
- 一个指令就能往多个表插入数据
- 支持在读取数据前执行系统命令
- 对于懂SQL的人来说几乎零学习成本
手把手教你用外部表
三步轻松搞定:
第一步:创建目录对象
create or replace directory ext_tab_dir as '/tmp';
这就好比告诉数据库:"请记住,/tmp这个文件夹很重要!"
第二步:准备数据文件
创建一个dept_ext.csv文件,内容如下:
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
第三步:创建外部表
CREATE TABLE dept_ext(
DEPTNO number(2),
DNAME varchar2(14),
LOC varchar2(13)
) ORGANIZATION EXTERNAL (
default directory ext_tab_dir
location ('dept_ext.csv')
);
大功告成! 现在你可以像查普通表一样查询这个文件:
select * from dept_ext;
高级玩法:数据转换
现实中的数据往往不是那么规整。比如你拿到这样的数据:
10|ACCOUNTING|NEW YORK|12/04/1962
20|RESEARCH|DALLAS|08/10/1966
注意这里:
- 用|而不是,分隔
- 日期是mm/dd/yyyy格式
没问题,外部表轻松应对:
CREATE TABLE dept_ext(
DEPTNO number(2),
DNAME varchar2(14),
LOC varchar2(13),
CRE_DATE date
) ORGANIZATION EXTERNAL (
type ORACLE_LOADER
default directory ext_tab_dir
access parameters (
records delimited by newline
fields terminated by '|'
(DEPTNO,
DNAME,
LOC,
CRE_DATE char date_format date mask "mm/dd/yyyy")
)
location ('dept_ext.csv')
);
看,日期自动转换成了标准的DATE类型!
总结
外部表就像给数据库装上了"文件阅读器",让数据导入变得简单直观。无论是简单的CSV文件,还是需要复杂转换的数据,它都能轻松应对。下次你需要往数据库里导入数据时,不妨试试这个强大的工具,你会发现数据搬运原来可以如此优雅!
记住:好的工具让工作事半功倍,选择合适的数据搬运方式,让你的数据库工作更加高效顺畅!
------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
浙公网安备 33010602011771号