Oracle逻辑备份与数据迁移技术详解
一、Oracle逻辑备份概念
1.1 物理备份概述
物理备份是所有物理文件的一个副本,包括数据文件、日志文件、控制文件、归档文件等。这些文件存储在本地磁盘或相应存储设备上,可分为:
- 冷备份:在非归档模式下进行,需要关闭数据库
- 热备份:在归档模式下进行,数据库可保持运行状态
1.2 逻辑备份
逻辑备份是通过导出表、索引、存储过程等对象到二进制文件的方式实现。使用Oracle的exp/expdp工具导出,再通过imp/impdp工具导入数据库。逻辑备份主要应用于数据迁移场景,是对物理备份的重要补充。
1.3 Oracle exp/imp工具介绍
作为Oracle最古老的命令行工具,exp/imp在以下场景中发挥重要作用:
- 小型数据库转储
- 表空间迁移
- 表数据抽取
- 逻辑和物理冲突检测
但随着TB级数据库和数据仓库的普及,exp/imp逐渐被RMAN和第三方工具取代。
1.4 Oracle expdp/impdp工具介绍
Oracle 10g引入的数据泵(expdp/impdp)工具,通过并行处理大幅提升了效率,现已基本替代传统的exp/imp工具。
1.5 数据泵实现功能
- 逻辑备份和逻辑恢复
- 数据库用户间对象迁移
- 数据库间对象迁移
- 表空间搬移
1.6 数据泵与传统导出导入的区别
| 特性 | exp/imp | expdp/impdp |
|---|---|---|
| 运行位置 | 客户端/服务端 | 仅服务端 |
| 文件兼容性 | 不兼容expdp文件 | 不兼容exp文件 |
| 导出方式 | 导出表、方案、表空间、数据库 | 四种导出方式 |
1.7 数据泵工作流程
- 命令行执行命令
- 调用dbms_datapump PL/SQL包
- 自动选择数据传输机制(direct path或external table)
- 元数据通过dbms_metadata包以XML格式存储
- 支持客户端断开后服务端继续执行
1.8 expdp/impdp命令参数详解
主要参数说明:
ATTACH
expdp scott/tiger attach=scott.export_job
在客户会话与已存在导出作业间建立关联。
CLUSTER
11gR2后worker进程会在多个instance启动,需确保DIRECTORY在共享磁盘上。
COMPRESSION
COMPRESSION=ALL # 压缩元数据和对象数据
COMPRESSION=DATA_ONLY # 仅压缩对象数据
COMPRESSION=METADATA_ONLY # 仅压缩元数据
COMPRESSION=NONE # 不压缩
CONTENT
CONTENT=ALL # 导出对象定义及数据
CONTENT=DATA_ONLY # 仅导出数据
CONTENT=METADATA_ONLY # 仅导出结构
DIRECTORY
CREATE OR REPLACE DIRECTORY backup AS '/opt/oracle/utl_file';
GRANT READ,WRITE ON DIRECTORY backup TO system;
重要参数列表:
DUMPFILE:指定转储文件名ENCRYPTION:数据加密选项ESTIMATE:估算磁盘空间方法EXCLUDE/INCLUDE:排除/包含特定对象PARALLEL:并行进程数(通常为CPU的2倍)QUERY:数据过滤条件REMAP_DATA:数据转换函数
二、项目案例实践
2.1 按用户迁移数据案例
源端环境分析
表空间信息:
SELECT DISTINCT tablespace_name
FROM dba_segments
WHERE owner IN ('SMP','SMP2','WGSMS');
数据量统计:
SELECT owner,tablespace_name,ROUND(SUM(bytes)/1024/1024,0) size_MB
FROM dba_segments
WHERE owner IN ('SMP','SMP2','WGSMS')
GROUP BY owner,tablespace_name
ORDER BY 1,3;
对象数量检查:
SELECT owner,COUNT(*)
FROM dba_objects
WHERE owner IN ('SMP','SMP2','WGSMS')
GROUP BY owner;
目标端准备
创建表空间示例:
-- 创建TS_EVENT_IDX1表空间
CREATE TABLESPACE TS_EVENT_IDX1
DATAFILE '+DATA/NGS4ADB/DATAFILE/ts_event_idx1001.dbf'
SIZE 30G AUTOEXTEND OFF;
-- 大表空间添加数据文件
ALTER TABLESPACE RA_TBS
ADD DATAFILE '+DATA/NGS4ADB/DATAFILE/ra_tbs002.dbf'
SIZE 30G AUTOEXTEND OFF;
数据迁移操作
源端导出:
expdp dw_wl/sweet_0807 directory=dump_dir dumpfile=WGSMS_20201103.dmp \
logfile=WGSMS_20201103.log schemas=wgsms cluster=no
expdp dw_wl/sweet_0807 directory=dump_dir dumpfile=SMP_20201103.dmp \
logfile=SMP_20201103.log schemas=SMP cluster=no parallel=4
目标端导入:
impdp dw_wl/sweet_0807 directory=dump_dir dumpfile=WGSMS_20201103.dmp \
logfile=IMWGSMS_20201103.log schemas=wgsms cluster=no
2.2 通过DBLINK数据不落地迁移
环境配置
创建DBLINK:
CREATE PUBLIC DATABASE LINK to_100
CONNECT TO VIDEO_MANAGE IDENTIFIED BY qwerasdf
USING 'rzasm';
测试连接:
SELECT * FROM tab@to_100 WHERE ROWNUM<=2;
参数文件配置
video_0827.par:
schemas=VIDEO_MANAGER
network_link=to_100
remap_tablespace=FRM_DATA:rz_data,VIDEO_MANAGER_DATA:rz_data
directory=dump_dir
执行迁移
nohup impdp system/qwerasdf logfile=schemas.20200827 \
parfile=video_0827.par &
三、SQL*Loader技术详解
3.1 基本概念
SQL*Loader是命令行工具,用于将文本格式数据(如Excel、TXT)导入Oracle数据库。
3.2 使用方法
sqlldr userid=dw_wl/sweet_0807 control=t0825.ctl \
bindsize=256000000 readsize=1048576000
3.3 控制文件结构
示例控制文件:
LOAD DATA
CHARACTERSET ZHS16GBK
INFILE '/home/oracle/data/tm.txt'
APPEND INTO TABLE MAYING.TMP_GROUP_NETGRID_CHANGE_20201105
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
REGION_ID,
COUNTRY_ID,
GROUP_ID,
GROUP_NAME,
NETGRID_ID
)
3.4 关键参数说明
| 参数 | 说明 |
|---|---|
userid |
数据库用户名/密码 |
control |
控制文件名 |
log |
日志文件名 |
bad |
错误文件名 |
direct |
使用直接路径加载 |
bindsize |
常规路径绑定数组大小 |
readsize |
读取缓冲区大小 |
3.5 数据类型处理技巧
处理日期和数字类型:
LOAD DATA
CHARACTERSET ZHS16GBK
INFILE '/home/oracle/walle/1116.csv'
APPEND INTO TABLE maying.tmp_vpmn_fix_number_20201117
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
MSISDN,
VPMNID,
REGIONCODE,
SHORTCODE,
MSISDN_CREATE_DATE DATE "yyyy-mm-dd",
VPMN_CREATE_DATE DATE "yyyy-mm-dd",
ISUSE TERMINATED BY WHITESPACE
)
3.6 文件类型说明
- 日志文件 (.log):记录加载统计信息
- 错误文件 (.bad):记录因数据规范问题导致的错误数据
- 废弃文件 (.dsc):记录未插入的数据(需显式指定)
四、最佳实践总结
4.1 性能优化建议
- 使用并行处理:设置PARALLEL参数提升导出导入速度
- 合理设置文件大小:避免单个文件过大影响处理效率
- 选择合适压缩:根据存储和网络情况选择压缩级别
- 预创建表空间:确保目标端有足够的存储空间
4.2 错误处理策略
- 监控无效对象:迁移前后检查对象状态
- 验证数据完整性:对比源端和目标端数据量
- 处理字符集问题:确保字符集一致性
- 备份控制文件:保留重要的配置参数
4.3 安全注意事项
- 权限管理:严格控制目录对象的读写权限
- 数据加密:敏感数据使用加密选项
- 网络安全:dblink迁移确保网络连接安全
- 日志管理:妥善处理包含敏感信息的日志文件
浙公网安备 33010602011771号