liuziyi

liuziyi

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 数据泵工作流程

  1. 命令行执行命令
  2. 调用dbms_datapump PL/SQL包
  3. 自动选择数据传输机制(direct path或external table)
  4. 元数据通过dbms_metadata包以XML格式存储
  5. 支持客户端断开后服务端继续执行

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 性能优化建议

  1. 使用并行处理:设置PARALLEL参数提升导出导入速度
  2. 合理设置文件大小:避免单个文件过大影响处理效率
  3. 选择合适压缩:根据存储和网络情况选择压缩级别
  4. 预创建表空间:确保目标端有足够的存储空间

4.2 错误处理策略

  1. 监控无效对象:迁移前后检查对象状态
  2. 验证数据完整性:对比源端和目标端数据量
  3. 处理字符集问题:确保字符集一致性
  4. 备份控制文件:保留重要的配置参数

4.3 安全注意事项

  1. 权限管理:严格控制目录对象的读写权限
  2. 数据加密:敏感数据使用加密选项
  3. 网络安全:dblink迁移确保网络连接安全
  4. 日志管理:妥善处理包含敏感信息的日志文件

posted on 2025-11-21 10:27  刘子毅  阅读(0)  评论(0)    收藏  举报

导航