读书笔记:用数据泵和SQLLDR轻松搞定Oracle数据迁移
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
用数据泵和SQLLDR轻松搞定Oracle数据迁移
在日常的数据库管理中,我们经常需要把数据从一个数据库迁移到另一个数据库。Oracle提供了两种强大的工具来帮我们完成这个任务:数据泵和SQLLDR。
数据泵卸载:数据库的"打包神器"
想象一下,你要搬家,需要把物品打包成箱子。数据泵就是Oracle的"打包神器",它能把数据打包成专门的二进制格式文件。
使用方法超简单:
- 准备存储位置
create or replace directory tmp as '/tmp';
这就好比告诉Oracle:"请把打包好的箱子放在/tmp这个文件夹里"
- 开始打包数据
create table all_objects_unload
organization external
(
type oracle_datapump
default directory TMP
location('allobjects.dat')
)
as
select * from all_objects;
这个命令的意思是:"请把all_objects视图中的所有数据打包,存成allobjects.dat文件"
数据泵的强大之处:
- 可以打包任意复杂的数据,包括多表关联的结果
- 可以添加条件,只打包需要的数据
- 支持压缩和加密(需要企业版)
安全提醒: 这个功能很强大,但也要注意安全管理,确保只有授权人员才能使用。
- 在目标数据库恢复数据
insert /*+ append */ into some_table
select * from all_objects_unload;
SQLLDR:数据导入的"高速通道"
如果说数据泵是专业的打包工具,那么SQLLDR就是高效的"搬运工",特别擅长处理文本格式的数据。
SQLLDR的两种工作模式:
- 常规路径:使用标准的SQL插入语句,稳妥可靠
- 直接路径:绕过SQL引擎,直接操作数据块,速度极快
基础使用方法:
- 准备控制文件(比如demo1.ctl)
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO, DNAME, LOC)
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia
这个控制文件很好理解:
LOAD DATA:我要加载数据啦INFILE *:数据就在本文件内INTO TABLE DEPT:要导入到DEPT表FIELDS TERMINATED BY ',':字段用逗号分隔- 后面的就是具体数据了
- 执行导入
sqlldr userid=eoda/foo@PDB1 control=demo1.ctl
数据加载的四种策略:
- INSERT:默认方式,要求表必须是空的
- APPEND:在现有数据后追加
- REPLACE:先删除所有现有数据,再插入
- TRUNCATE:先清空表,再插入(比REPLACE更快)
SQLLDR快速模式:更智能的数据导入
Oracle还提供了更智能的快速模式,它会自动选择最佳导入方式。
自动选择策略:
- 如果有创建目录的权限,就用外部表方式
- 如果没有权限,就用直接路径方式
使用方法极其简单:
sqlldr eoda/foo@PDB1 table=dept
系统会自动检测dept.dat文件,并完成整个导入过程。你甚至可以让它只生成导入脚本而不执行:
sqlldr eoda/foo@PDB1 table=dept external_table=generate_only
实践建议
- 数据泵适合:数据库之间的数据迁移,特别是大量数据
- SQLLDR适合:从文本文件导入数据,特别是CSV格式
- 快速模式适合:简单的数据导入任务,让Oracle自动选择最佳方案
无论选择哪种工具,记得每次操作后都要检查日志文件,确保操作成功完成。这些工具虽然强大,但也要谨慎使用,特别是在生产环境中。
------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
浙公网安备 33010602011771号