本文档风哥主要介绍DM数据库数据迁移与同步,包括数据迁移概述、数据同步概述、迁移工具、迁移规划、DM到DM迁移、其他数据库到DM迁移、数据同步、迁移验证、迁移优化、实际案例和最佳实践等内容,风哥教程参考DM官方文档DM8数据迁移指南、DM8数据同步指南,适合数据库技术人员在学习和生产环境中使用。
Part01-基础概念与理论知识
1.1 数据迁移概述
数据迁移是将数据从一个数据库系统移动到另一个数据库系统的过程,是数据库管理的重要工作。
# 数据迁移的定义
数据迁移是将数据从一个数据库系统移动到另一个数据库系统的过程,包括数据结构迁移、数据迁移、数据验证等步骤。
# 数据迁移的类型
1. 同构迁移
– DM到DM迁移
– 版本升级迁移
– 跨平台迁移
2. 异构迁移
– Oracle到DM迁移
– MySQL到DM迁移
– SQL Server到DM迁移
– PostgreSQL到DM迁移
# 数据迁移的场景
– 数据库升级:从旧版本升级到新版本
– 数据库迁移:从其他数据库迁移到DM
– 跨平台迁移:从一个平台迁移到另一个平台
– 数据整合:将多个数据库整合到一个数据库
– 数据分发:将数据分发到多个数据库
# 数据迁移的步骤
1. 迁移规划
– 分析源数据库
– 分析目标数据库
– 制定迁移方案
– 制定迁移计划
2. 迁移准备
– 准备源数据库
– 准备目标数据库
– 准备迁移工具
– 准备迁移脚本
3. 迁移实施
– 迁移数据结构
– 迁移数据
– 迁移存储过程
– 迁移触发器
4. 迁移验证
– 验证数据结构
– 验证数据完整性
– 验证数据一致性
– 验证应用功能
5. 迁移切换
– 停止源数据库
– 切换到目标数据库
– 验证应用功能
– 处理异常情况
数据迁移是将数据从一个数据库系统移动到另一个数据库系统的过程,包括数据结构迁移、数据迁移、数据验证等步骤。
# 数据迁移的类型
1. 同构迁移
– DM到DM迁移
– 版本升级迁移
– 跨平台迁移
2. 异构迁移
– Oracle到DM迁移
– MySQL到DM迁移
– SQL Server到DM迁移
– PostgreSQL到DM迁移
# 数据迁移的场景
– 数据库升级:从旧版本升级到新版本
– 数据库迁移:从其他数据库迁移到DM
– 跨平台迁移:从一个平台迁移到另一个平台
– 数据整合:将多个数据库整合到一个数据库
– 数据分发:将数据分发到多个数据库
# 数据迁移的步骤
1. 迁移规划
– 分析源数据库
– 分析目标数据库
– 制定迁移方案
– 制定迁移计划
2. 迁移准备
– 准备源数据库
– 准备目标数据库
– 准备迁移工具
– 准备迁移脚本
3. 迁移实施
– 迁移数据结构
– 迁移数据
– 迁移存储过程
– 迁移触发器
4. 迁移验证
– 验证数据结构
– 验证数据完整性
– 验证数据一致性
– 验证应用功能
5. 迁移切换
– 停止源数据库
– 切换到目标数据库
– 验证应用功能
– 处理异常情况
1.2 数据同步概述
数据同步是将数据从一个数据库系统复制到另一个数据库系统的过程,保持数据的一致性。
# 数据同步的定义
数据同步是将数据从一个数据库系统复制到另一个数据库系统的过程,保持数据的一致性。
# 数据同步的类型 风哥提示:
1. 实时同步
– 基于日志的实时同步
– 基于触发器的实时同步
– 基于CDC的实时同步
2. 定时同步
– 基于时间的定时同步
– 基于事件的定时同步
– 基于增量的定时同步
3. 双向同步
– 主主同步
– 双向数据复制
– 冲突处理
# 数据同步的场景
– 数据备份:将数据同步到备份库
– 数据分发:将数据同步到多个库
– 数据整合:将多个库的数据同步到一个库
– 数据容灾:将数据同步到容灾库
– 读写分离:将数据同步到读库
# 数据同步的步骤
1. 同步规划
– 分析源数据库
– 分析目标数据库
– 制定同步方案
– 制定同步计划
2. 同步配置
– 配置同步源
– 配置同步目标
– 配置同步规则
– 配置同步策略
3. 同步实施 学习交流加群风哥微信: itpux-com
– 初始化同步
– 启动同步
– 监控同步
– 处理异常
4. 同步验证
– 验证数据完整性
– 验证数据一致性
– 验证同步延迟
– 验证应用功能
数据同步是将数据从一个数据库系统复制到另一个数据库系统的过程,保持数据的一致性。
# 数据同步的类型 风哥提示:
1. 实时同步
– 基于日志的实时同步
– 基于触发器的实时同步
– 基于CDC的实时同步
2. 定时同步
– 基于时间的定时同步
– 基于事件的定时同步
– 基于增量的定时同步
3. 双向同步
– 主主同步
– 双向数据复制
– 冲突处理
# 数据同步的场景
– 数据备份:将数据同步到备份库
– 数据分发:将数据同步到多个库
– 数据整合:将多个库的数据同步到一个库
– 数据容灾:将数据同步到容灾库
– 读写分离:将数据同步到读库
# 数据同步的步骤
1. 同步规划
– 分析源数据库
– 分析目标数据库
– 制定同步方案
– 制定同步计划
2. 同步配置
– 配置同步源
– 配置同步目标
– 配置同步规则
– 配置同步策略
3. 同步实施 学习交流加群风哥微信: itpux-com
– 初始化同步
– 启动同步
– 监控同步
– 处理异常
4. 同步验证
– 验证数据完整性
– 验证数据一致性
– 验证同步延迟
– 验证应用功能
1.3 迁移工具
DM数据库提供了多种迁移工具,帮助数据库管理员完成数据迁移工作。
# 1. DTS(Data Transfer Service)
– DTS是DM提供的数据迁移工具
– 支持多种数据库之间的数据迁移
– 支持数据结构迁移
– 支持数据迁移
– 支持存储过程迁移
– 支持触发器迁移
# 2. dexp/dimp
– dexp是DM提供的数据导出工具
– dimp是DM提供的数据导入工具
– 支持数据导出和导入
– 支持数据结构导出和导入
– 支持增量导出和导入
– 支持并行导出和导入
# 3. SQL脚本迁移
– 使用SQL脚本进行数据迁移
– 支持自定义迁移脚本
– 支持复杂的数据转换
– 支持批量数据处理
# 4. 第三方工具
– 使用第三方工具进行数据迁移
– 支持多种数据库之间的数据迁移
– 支持数据转换和数据清洗
– 支持可视化操作
– DTS是DM提供的数据迁移工具
– 支持多种数据库之间的数据迁移
– 支持数据结构迁移
– 支持数据迁移
– 支持存储过程迁移
– 支持触发器迁移
# 2. dexp/dimp
– dexp是DM提供的数据导出工具
– dimp是DM提供的数据导入工具
– 支持数据导出和导入
– 支持数据结构导出和导入
– 支持增量导出和导入
– 支持并行导出和导入
# 3. SQL脚本迁移
– 使用SQL脚本进行数据迁移
– 支持自定义迁移脚本
– 支持复杂的数据转换
– 支持批量数据处理
# 4. 第三方工具
– 使用第三方工具进行数据迁移
– 支持多种数据库之间的数据迁移
– 支持数据转换和数据清洗
– 支持可视化操作
风哥提示:数据迁移和同步是数据库管理的重要工作,掌握迁移工具的使用,是完成数据迁移的关键。根据业务需求选择合适的迁移方案,是保证迁移成功的重要手段。 学习交流加群风哥QQ113257174
Part02-生产环境规划与建议
2.1 迁移规划
2.1.1 迁移需求分析
# 1. 业务需求分析
– 迁移原因:分析迁移的原因和目的
– 迁移范围:分析迁移的数据范围和对象范围
– 迁移时间:分析迁移的时间窗口
– 迁移风险:分析迁移的风险和影响
# 2. 技术需求分析
– 源数据库分析
– 数据库类型:Oracle、MySQL、SQL Server等
– 数据库版本:源数据库的版本
– 数据量大小:源数据库的数据量
– 数据结构:源数据库的数据结构
– 数据类型:源数据库的数据类型
– 目标数据库分析
– 数据库类型:DM数据库
– 数据库版本:目标数据库的版本
– 存储容量:目标数据库的存储容量
– 性能要求:目标数据库的性能要求
– 兼容性:目标数据库的兼容性
# 3. 迁移方案设计
– 迁移方式选择
– 在线迁移:不停机迁移,影响较小
– 离线迁移:停机迁移,影响较大
– 混合迁移:在线和离线结合
– 迁移工具选择
– DTS:适用于大多数迁移场景
– dexp/dimp:适用于数据导出导入
– SQL脚本:适用于复杂迁移场景
– 第三方工具:适用于特殊迁移场景
– 迁移策略设计
– 全量迁移:一次性迁移所有数据
– 增量迁移:分批迁移数据
– 混合迁移:全量和增量结合
# 4. 迁移计划制定
– 迁移时间计划
– 迁移准备时间:迁移前准备工作 更多视频教程www.fgedu.net.cn
– 迁移实施时间:迁移实施时间
– 迁移验证时间:迁移验证时间
– 迁移切换时间:迁移切换时间
– 迁移资源计划
– 人力资源:迁移所需的人员
– 硬件资源:迁移所需的硬件
– 网络资源:迁移所需的网络
– 存储资源:迁移所需的存储
– 迁移风险计划
– 风险识别:识别迁移的风险
– 风险评估:评估风险的影响
– 风险应对:制定风险应对措施
– 风险监控:监控风险的发生
– 迁移原因:分析迁移的原因和目的
– 迁移范围:分析迁移的数据范围和对象范围
– 迁移时间:分析迁移的时间窗口
– 迁移风险:分析迁移的风险和影响
# 2. 技术需求分析
– 源数据库分析
– 数据库类型:Oracle、MySQL、SQL Server等
– 数据库版本:源数据库的版本
– 数据量大小:源数据库的数据量
– 数据结构:源数据库的数据结构
– 数据类型:源数据库的数据类型
– 目标数据库分析
– 数据库类型:DM数据库
– 数据库版本:目标数据库的版本
– 存储容量:目标数据库的存储容量
– 性能要求:目标数据库的性能要求
– 兼容性:目标数据库的兼容性
# 3. 迁移方案设计
– 迁移方式选择
– 在线迁移:不停机迁移,影响较小
– 离线迁移:停机迁移,影响较大
– 混合迁移:在线和离线结合
– 迁移工具选择
– DTS:适用于大多数迁移场景
– dexp/dimp:适用于数据导出导入
– SQL脚本:适用于复杂迁移场景
– 第三方工具:适用于特殊迁移场景
– 迁移策略设计
– 全量迁移:一次性迁移所有数据
– 增量迁移:分批迁移数据
– 混合迁移:全量和增量结合
# 4. 迁移计划制定
– 迁移时间计划
– 迁移准备时间:迁移前准备工作 更多视频教程www.fgedu.net.cn
– 迁移实施时间:迁移实施时间
– 迁移验证时间:迁移验证时间
– 迁移切换时间:迁移切换时间
– 迁移资源计划
– 人力资源:迁移所需的人员
– 硬件资源:迁移所需的硬件
– 网络资源:迁移所需的网络
– 存储资源:迁移所需的存储
– 迁移风险计划
– 风险识别:识别迁移的风险
– 风险评估:评估风险的影响
– 风险应对:制定风险应对措施
– 风险监控:监控风险的发生
2.1.2 迁移方案设计
# 1. 数据结构迁移方案
– 表结构迁移
– 创建表结构
– 创建索引
– 创建约束
– 创建视图
– 数据类型映射
– Oracle数据类型到DM数据类型映射
– MySQL数据类型到DM数据类型映射
– SQL Server数据类型到DM数据类型映射
– PostgreSQL数据类型到DM数据类型映射
– 存储过程迁移
– 迁移存储过程
– 迁移函数
– 迁移触发器
– 迁移包
# 2. 数据迁移方案
– 全量数据迁移
– 导出源数据库数据
– 转换数据格式
– 导入目标数据库
– 验证数据完整性
– 增量数据迁移
– 导出增量数据 更多学习教程公众号风哥教程itpux_com
– 转换数据格式
– 导入目标数据库
– 验证数据一致性
– 数据清洗
– 清洗重复数据
– 清洗错误数据
– 清洗不完整数据
– 清洗不一致数据
# 3. 迁移验证方案
– 数据结构验证
– 验证表结构
– 验证索引
– 验证约束
– 验证视图
– 数据完整性验证
– 验证数据行数
– 验证数据内容
– 验证数据关系
– 验证数据一致性
– 应用功能验证
– 验证应用功能
– 验证应用性能
– 验证应用兼容性
– 验证应用稳定性
# 4. 迁移切换方案
– 迁移切换策略
– 停机切换:停机后切换
– 在线切换:在线切换
– 混合切换:在线和停机结合
– 迁移切换步骤 from DB视频:www.itpux.com
– 停止源数据库
– 验证数据同步
– 切换到目标数据库
– 验证应用功能
– 迁移回滚方案
– 回滚策略
– 回滚步骤
– 回滚验证
– 回滚监控
– 表结构迁移
– 创建表结构
– 创建索引
– 创建约束
– 创建视图
– 数据类型映射
– Oracle数据类型到DM数据类型映射
– MySQL数据类型到DM数据类型映射
– SQL Server数据类型到DM数据类型映射
– PostgreSQL数据类型到DM数据类型映射
– 存储过程迁移
– 迁移存储过程
– 迁移函数
– 迁移触发器
– 迁移包
# 2. 数据迁移方案
– 全量数据迁移
– 导出源数据库数据
– 转换数据格式
– 导入目标数据库
– 验证数据完整性
– 增量数据迁移
– 导出增量数据 更多学习教程公众号风哥教程itpux_com
– 转换数据格式
– 导入目标数据库
– 验证数据一致性
– 数据清洗
– 清洗重复数据
– 清洗错误数据
– 清洗不完整数据
– 清洗不一致数据
# 3. 迁移验证方案
– 数据结构验证
– 验证表结构
– 验证索引
– 验证约束
– 验证视图
– 数据完整性验证
– 验证数据行数
– 验证数据内容
– 验证数据关系
– 验证数据一致性
– 应用功能验证
– 验证应用功能
– 验证应用性能
– 验证应用兼容性
– 验证应用稳定性
# 4. 迁移切换方案
– 迁移切换策略
– 停机切换:停机后切换
– 在线切换:在线切换
– 混合切换:在线和停机结合
– 迁移切换步骤 from DB视频:www.itpux.com
– 停止源数据库
– 验证数据同步
– 切换到目标数据库
– 验证应用功能
– 迁移回滚方案
– 回滚策略
– 回滚步骤
– 回滚验证
– 回滚监控
2.2 DM到DM迁移
2.2.1 使用dexp/dimp迁移
# 1. 使用dexp导出数据
– 导出整个数据库
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 导出指定用户
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_user.dmp LOG=fgedu_user.log OWNER=fgedu
– 导出指定表
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_table.dmp LOG=fgedu_table.log TABLES=fgedu_user,fgedu_order
– 导出指定表空间
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_tablespace.dmp LOG=fgedu_tablespace.log TABLESPACE=fgedu
# 2. 使用dimp导入数据
– 导入整个数据库
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 导入指定用户
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_user.dmp LOG=fgedu_user.log OWNER=fgedu
– 导入指定表
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_table.dmp LOG=fgedu_table.log TABLES=fgedu_user,fgedu_order
– 导入指定表空间
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_tablespace.dmp LOG=fgedu_tablespace.log TABLESPACE=fgedu
# 3. 实际示例
– 导出数据
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
# 输出结果
# 导出开始…
# 导出完成,共导出1000个表,1000000行数据
– 导入数据
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
# 输出结果
# 导入开始…
# 导入完成,共导入1000个表,1000000行数据
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
– 导出整个数据库
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 导出指定用户
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_user.dmp LOG=fgedu_user.log OWNER=fgedu
– 导出指定表
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_table.dmp LOG=fgedu_table.log TABLES=fgedu_user,fgedu_order
– 导出指定表空间
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_tablespace.dmp LOG=fgedu_tablespace.log TABLESPACE=fgedu
# 2. 使用dimp导入数据
– 导入整个数据库
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 导入指定用户
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_user.dmp LOG=fgedu_user.log OWNER=fgedu
– 导入指定表
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_table.dmp LOG=fgedu_table.log TABLES=fgedu_user,fgedu_order
– 导入指定表空间
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_tablespace.dmp LOG=fgedu_tablespace.log TABLESPACE=fgedu
# 3. 实际示例
– 导出数据
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
# 输出结果
# 导出开始…
# 导出完成,共导出1000个表,1000000行数据
– 导入数据
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
# 输出结果
# 导入开始…
# 导入完成,共导入1000个表,1000000行数据
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
2.2.2 使用DTS迁移
# 1. 配置DTS迁移任务
– 创建迁移任务
– 任务名称:fgedu_migration
– 源数据库:DM数据库
– 目标数据库:DM数据库
– 迁移对象:表、索引、约束、视图、存储过程
– 配置源数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.100
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
# 2. 配置迁移对象
– 选择迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
– 配置迁移规则
– 数据结构迁移:迁移表结构
– 数据迁移:迁移表数据
– 索引迁移:迁移索引
– 约束迁移:迁移约束
# 3. 执行迁移任务
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实际示例
– 创建迁移任务
– 任务名称:fgedu_migration
– 源数据库:192.168.1.100:5236/fgedudb
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
– 创建迁移任务
– 任务名称:fgedu_migration
– 源数据库:DM数据库
– 目标数据库:DM数据库
– 迁移对象:表、索引、约束、视图、存储过程
– 配置源数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.100
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
# 2. 配置迁移对象
– 选择迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
– 配置迁移规则
– 数据结构迁移:迁移表结构
– 数据迁移:迁移表数据
– 索引迁移:迁移索引
– 约束迁移:迁移约束
# 3. 执行迁移任务
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实际示例
– 创建迁移任务
– 任务名称:fgedu_migration
– 源数据库:192.168.1.100:5236/fgedudb
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
2.3 其他数据库到DM迁移
2.3.1 Oracle到DM迁移
# 1. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:Oracle
– 主机地址:192.168.1.100
– 端口号:1521
– 用户名:system
– 密码:oracle
– 服务名:orcl
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 2. 数据类型映射
– Oracle数据类型到DM数据类型映射
– NUMBER -> DECIMAL
– VARCHAR2 -> VARCHAR
– CHAR -> CHAR
– DATE -> TIMESTAMP
– CLOB -> CLOB
– BLOB -> BLOB
# 3. 存储过程迁移
– 迁移Oracle存储过程到DM
– 修改存储过程语法
– 修改函数调用
– 修改数据类型
– 修改SQL语句
# 4. 实际示例
– 配置迁移任务
– 任务名称:oracle_to_dm
– 源数据库:192.168.1.100:1521/orcl
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
– 配置源数据库连接
– 数据库类型:Oracle
– 主机地址:192.168.1.100
– 端口号:1521
– 用户名:system
– 密码:oracle
– 服务名:orcl
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 2. 数据类型映射
– Oracle数据类型到DM数据类型映射
– NUMBER -> DECIMAL
– VARCHAR2 -> VARCHAR
– CHAR -> CHAR
– DATE -> TIMESTAMP
– CLOB -> CLOB
– BLOB -> BLOB
# 3. 存储过程迁移
– 迁移Oracle存储过程到DM
– 修改存储过程语法
– 修改函数调用
– 修改数据类型
– 修改SQL语句
# 4. 实际示例
– 配置迁移任务
– 任务名称:oracle_to_dm
– 源数据库:192.168.1.100:1521/orcl
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
2.3.2 MySQL到DM迁移
# 1. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:MySQL
– 主机地址:192.168.1.100
– 端口号:3306
– 用户名:root
– 密码:mysql
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 2. 数据类型映射
– MySQL数据类型到DM数据类型映射
– INT -> INT
– VARCHAR -> VARCHAR
– CHAR -> CHAR
– DATETIME -> TIMESTAMP
– TEXT -> CLOB
– BLOB -> BLOB
# 3. 存储过程迁移
– 迁移MySQL存储过程到DM
– 修改存储过程语法
– 修改函数调用
– 修改数据类型
– 修改SQL语句
# 4. 实际示例
– 配置迁移任务
– 任务名称:mysql_to_dm
– 源数据库:192.168.1.100:3306/fgedudb
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
– 配置源数据库连接
– 数据库类型:MySQL
– 主机地址:192.168.1.100
– 端口号:3306
– 用户名:root
– 密码:mysql
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 2. 数据类型映射
– MySQL数据类型到DM数据类型映射
– INT -> INT
– VARCHAR -> VARCHAR
– CHAR -> CHAR
– DATETIME -> TIMESTAMP
– TEXT -> CLOB
– BLOB -> BLOB
# 3. 存储过程迁移
– 迁移MySQL存储过程到DM
– 修改存储过程语法
– 修改函数调用
– 修改数据类型
– 修改SQL语句
# 4. 实际示例
– 配置迁移任务
– 任务名称:mysql_to_dm
– 源数据库:192.168.1.100:3306/fgedudb
– 目标数据库:192.168.1.101:5236/fgedudb
– 迁移对象:fgedu_user, fgedu_order, fgedu_product
– 执行迁移任务
– 启动迁移任务
– 查看迁移进度
– 查看迁移日志
– 验证迁移结果
SQL> SELECT COUNT(*) FROM fgedu_user;
SQL> SELECT COUNT(*) FROM fgedu_order;
SQL> SELECT COUNT(*) FROM fgedu_product;
# 输出结果
# COUNT(*)
# ———-
# 1000000
# 1000000
# 1000000
生产环境建议:根据业务需求和迁移要求,选择合适的迁移方案和工具。在迁移前进行充分的测试,确保迁移的可靠性和稳定性。建立完善的监控体系,及时发现和解决迁移问题。
Part03-生产环境项目实施方案
3.1 数据同步
3.1.1 实时同步
# 1. 配置Data Guard实时同步
– 配置主库
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置备库
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置Data Guard
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
SQL> SP_START_GUARD(‘standby1’);
# 2. 配置实时同步模式
– 配置实时同步模式
SQL> ALTER SYSTEM SET ‘GUARD_SYNC_MODE’ = ‘REALTIME’ BOTH;
– 查看同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 3. 监控实时同步
– 查看同步延迟
SQL> SELECT * FROM V$GUARD_SYNC_DELAY;
– 查看同步统计信息
SQL> SELECT * FROM V$GUARD_SYNC_STATS;
# 4. 实际示例
– 配置Data Guard实时同步
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
SQL> ALTER SYSTEM SET ‘GUARD_SYNC_MODE’ = ‘REALTIME’ BOTH;
– 配置备库
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置Data Guard
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
SQL> SP_START_GUARD(‘standby1’);
– 验证同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 输出结果
# GUARD_NAME SYNC_MODE SYNC_STATUS SYNC_DELAY APPLIED_SCN
# ———– ———- ———— ———– ————
# standby1 REALTIME SYNCED 0 123456789
– 配置主库
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置备库
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置Data Guard
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
SQL> SP_START_GUARD(‘standby1’);
# 2. 配置实时同步模式
– 配置实时同步模式
SQL> ALTER SYSTEM SET ‘GUARD_SYNC_MODE’ = ‘REALTIME’ BOTH;
– 查看同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 3. 监控实时同步
– 查看同步延迟
SQL> SELECT * FROM V$GUARD_SYNC_DELAY;
– 查看同步统计信息
SQL> SELECT * FROM V$GUARD_SYNC_STATS;
# 4. 实际示例
– 配置Data Guard实时同步
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
SQL> ALTER SYSTEM SET ‘GUARD_SYNC_MODE’ = ‘REALTIME’ BOTH;
– 配置备库
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置Data Guard
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
SQL> SP_START_GUARD(‘standby1’);
– 验证同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 输出结果
# GUARD_NAME SYNC_MODE SYNC_STATUS SYNC_DELAY APPLIED_SCN
# ———– ———- ———— ———– ————
# standby1 REALTIME SYNCED 0 123456789
3.1.2 定时同步
# 1. 配置定时同步任务
– 创建同步存储过程
SQL> CREATE PROCEDURE sp_sync_data()
AS
BEGIN
INSERT INTO fgedu_user_backup SELECT * FROM fgedu_user WHERE create_time > SYSDATE – 1;
COMMIT;
END;
– 创建定时任务
SQL> CREATE JOB job_sync_data
AS
BEGIN
sp_sync_data();
END;
– 配置定时任务
SQL> SP_ADD_JOB(‘job_sync_data’, ‘1’, ‘0’, ’00:00:00′, NULL, ‘SYSDATE’, ‘1’, ‘SYSDATE + 1’, ‘sp_sync_data();’);
# 2. 监控定时同步
– 查看定时任务状态
SQL> SELECT * FROM USER_JOBS;
– 查看定时任务执行历史
SQL> SELECT * FROM USER_JOB_HISTORY;
# 3. 验证同步结果
– 查看同步数据
SQL> SELECT COUNT(*) FROM fgedu_user_backup;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
SQL> SELECT * FROM fgedu_user_backup WHERE user_id = 1;
# 4. 实际示例
– 创建同步存储过程
SQL> CREATE PROCEDURE sp_sync_data()
AS
BEGIN
INSERT INTO fgedu_user_backup SELECT * FROM fgedu_user WHERE create_time > SYSDATE – 1;
COMMIT;
END;
– 创建定时任务
SQL> SP_ADD_JOB(‘job_sync_data’, ‘1’, ‘0’, ’00:00:00′, NULL, ‘SYSDATE’, ‘1’, ‘SYSDATE + 1’, ‘sp_sync_data();’);
– 验证同步结果
SQL> SELECT COUNT(*) FROM fgedu_user_backup;
# 输出结果
# COUNT(*)
# ———-
# 10000
– 创建同步存储过程
SQL> CREATE PROCEDURE sp_sync_data()
AS
BEGIN
INSERT INTO fgedu_user_backup SELECT * FROM fgedu_user WHERE create_time > SYSDATE – 1;
COMMIT;
END;
– 创建定时任务
SQL> CREATE JOB job_sync_data
AS
BEGIN
sp_sync_data();
END;
– 配置定时任务
SQL> SP_ADD_JOB(‘job_sync_data’, ‘1’, ‘0’, ’00:00:00′, NULL, ‘SYSDATE’, ‘1’, ‘SYSDATE + 1’, ‘sp_sync_data();’);
# 2. 监控定时同步
– 查看定时任务状态
SQL> SELECT * FROM USER_JOBS;
– 查看定时任务执行历史
SQL> SELECT * FROM USER_JOB_HISTORY;
# 3. 验证同步结果
– 查看同步数据
SQL> SELECT COUNT(*) FROM fgedu_user_backup;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
SQL> SELECT * FROM fgedu_user_backup WHERE user_id = 1;
# 4. 实际示例
– 创建同步存储过程
SQL> CREATE PROCEDURE sp_sync_data()
AS
BEGIN
INSERT INTO fgedu_user_backup SELECT * FROM fgedu_user WHERE create_time > SYSDATE – 1;
COMMIT;
END;
– 创建定时任务
SQL> SP_ADD_JOB(‘job_sync_data’, ‘1’, ‘0’, ’00:00:00′, NULL, ‘SYSDATE’, ‘1’, ‘SYSDATE + 1’, ‘sp_sync_data();’);
– 验证同步结果
SQL> SELECT COUNT(*) FROM fgedu_user_backup;
# 输出结果
# COUNT(*)
# ———-
# 10000
3.2 迁移验证
3.2.1 数据结构验证
# 1. 验证表结构
– 查看表结构
SQL> DESC fgedu_user;
– 对比表结构
SQL> SELECT column_name, data_type, data_length, nullable
FROM user_tab_columns
WHERE table_name = ‘FGEDU_USER’;
# 2. 验证索引
– 查看索引
SQL> SELECT index_name, column_name FROM user_ind_columns WHERE table_name = ‘FGEDU_USER’;
– 对比索引
SQL> SELECT index_name, column_name
FROM user_ind_columns
WHERE table_name = ‘FGEDU_USER’
ORDER BY index_name, column_position;
# 3. 验证约束
– 查看约束
SQL> SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = ‘FGEDU_USER’;
– 对比约束
SQL> SELECT constraint_name, constraint_type
FROM user_constraints
WHERE table_name = ‘FGEDU_USER’
ORDER BY constraint_name;
# 4. 实际示例
– 验证表结构
SQL> DESC fgedu_user;
# 输出结果
# Name Type Nullable
# ———— ———— ——–
# USER_ID INT N
# USER_NAME VARCHAR(50) N
# USER_EMAIL VARCHAR(100) Y
# USER_STATUS INT Y
# CREATE_TIME TIMESTAMP Y
– 验证索引
SQL> SELECT index_name, column_name FROM user_ind_columns WHERE table_name = ‘FGEDU_USER’;
# 输出结果
# INDEX_NAME COLUMN_NAME
# ——————– ————
# PK_FGEDU_USER USER_ID
# IDX_FGEDU_USER_NAME USER_NAME
# IDX_FGEDU_USER_EMAIL USER_EMAIL
– 验证约束
SQL> SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = ‘FGEDU_USER’;
# 输出结果
# CONSTRAINT_NAME CONSTRAINT_TYPE
# —————– —————
# PK_FGEDU_USER P
# UK_FGEDU_USER_EMAIL U
– 查看表结构
SQL> DESC fgedu_user;
– 对比表结构
SQL> SELECT column_name, data_type, data_length, nullable
FROM user_tab_columns
WHERE table_name = ‘FGEDU_USER’;
# 2. 验证索引
– 查看索引
SQL> SELECT index_name, column_name FROM user_ind_columns WHERE table_name = ‘FGEDU_USER’;
– 对比索引
SQL> SELECT index_name, column_name
FROM user_ind_columns
WHERE table_name = ‘FGEDU_USER’
ORDER BY index_name, column_position;
# 3. 验证约束
– 查看约束
SQL> SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = ‘FGEDU_USER’;
– 对比约束
SQL> SELECT constraint_name, constraint_type
FROM user_constraints
WHERE table_name = ‘FGEDU_USER’
ORDER BY constraint_name;
# 4. 实际示例
– 验证表结构
SQL> DESC fgedu_user;
# 输出结果
# Name Type Nullable
# ———— ———— ——–
# USER_ID INT N
# USER_NAME VARCHAR(50) N
# USER_EMAIL VARCHAR(100) Y
# USER_STATUS INT Y
# CREATE_TIME TIMESTAMP Y
– 验证索引
SQL> SELECT index_name, column_name FROM user_ind_columns WHERE table_name = ‘FGEDU_USER’;
# 输出结果
# INDEX_NAME COLUMN_NAME
# ——————– ————
# PK_FGEDU_USER USER_ID
# IDX_FGEDU_USER_NAME USER_NAME
# IDX_FGEDU_USER_EMAIL USER_EMAIL
– 验证约束
SQL> SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = ‘FGEDU_USER’;
# 输出结果
# CONSTRAINT_NAME CONSTRAINT_TYPE
# —————– —————
# PK_FGEDU_USER P
# UK_FGEDU_USER_EMAIL U
3.2.2 数据完整性验证
# 1. 验证数据行数
– 查看数据行数
SQL> SELECT COUNT(*) FROM fgedu_user;
– 对比数据行数
SQL> SELECT table_name, num_rows FROM user_tables WHERE table_name = ‘FGEDU_USER’;
# 2. 验证数据内容
– 查看数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
– 对比数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id IN (1, 2, 3);
# 3. 验证数据关系
– 查看外键关系
SQL> SELECT constraint_name, r_constraint_name FROM user_constraints WHERE constraint_type = ‘R’;
– 验证外键关系
SQL> SELECT u.user_id, u.user_name, o.order_id, o.order_amount
FROM fgedu_user u
INNER JOIN fgedu_order o ON u.user_id = o.user_id
WHERE u.user_id = 1;
# 4. 实际示例
– 验证数据行数
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
– 验证数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 输出结果
# USER_ID USER_NAME USER_EMAIL USER_STATUS CREATE_TIME
# ——– ———- ——————– ———— ——————-
# 1 fgedu_user1 fgedu_user1@fgedu.net.cn 1 2024-01-01 10:00:00
– 验证数据关系
SQL> SELECT u.user_id, u.user_name, o.order_id, o.order_amount
FROM fgedu_user u
INNER JOIN fgedu_order o ON u.user_id = o.user_id
WHERE u.user_id = 1;
# 输出结果
# USER_ID USER_NAME ORDER_ID ORDER_AMOUNT
# ——– ———- ——— ————-
# 1 fgedu_user1 1001 100.00
# 1 fgedu_user1 1002 200.00
– 查看数据行数
SQL> SELECT COUNT(*) FROM fgedu_user;
– 对比数据行数
SQL> SELECT table_name, num_rows FROM user_tables WHERE table_name = ‘FGEDU_USER’;
# 2. 验证数据内容
– 查看数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
– 对比数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id IN (1, 2, 3);
# 3. 验证数据关系
– 查看外键关系
SQL> SELECT constraint_name, r_constraint_name FROM user_constraints WHERE constraint_type = ‘R’;
– 验证外键关系
SQL> SELECT u.user_id, u.user_name, o.order_id, o.order_amount
FROM fgedu_user u
INNER JOIN fgedu_order o ON u.user_id = o.user_id
WHERE u.user_id = 1;
# 4. 实际示例
– 验证数据行数
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
– 验证数据内容
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 输出结果
# USER_ID USER_NAME USER_EMAIL USER_STATUS CREATE_TIME
# ——– ———- ——————– ———— ——————-
# 1 fgedu_user1 fgedu_user1@fgedu.net.cn 1 2024-01-01 10:00:00
– 验证数据关系
SQL> SELECT u.user_id, u.user_name, o.order_id, o.order_amount
FROM fgedu_user u
INNER JOIN fgedu_order o ON u.user_id = o.user_id
WHERE u.user_id = 1;
# 输出结果
# USER_ID USER_NAME ORDER_ID ORDER_AMOUNT
# ——– ———- ——— ————-
# 1 fgedu_user1 1001 100.00
# 1 fgedu_user1 1002 200.00
3.3 迁移优化
3.3.1 迁移性能优化
# 1. 优化dexp/dimp性能
– 使用并行导出
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
– 使用并行导入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
– 使用批量插入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y BATCH_SIZE=10000
# 2. 优化DTS性能
– 配置并行迁移
– 设置并行度:4
– 设置批量大小:10000
– 设置网络超时:300秒
– 配置网络优化
– 增加网络带宽
– 优化网络配置
– 减少网络延迟
# 3. 优化数据库参数
– 优化内存参数
SQL> ALTER SYSTEM SET ‘MEMORY_POOL’ = 8192 BOTH;
SQL> ALTER SYSTEM SET ‘BUFFER’ = 16384 BOTH;
– 优化IO参数
SQL> ALTER SYSTEM SET ‘MAX_BUFFER_SIZE’ = 1024 BOTH;
SQL> ALTER SYSTEM SET ‘IO_THROTTLE_THRESHOLD’ = 1000 BOTH;
# 4. 实际示例
– 使用并行导出
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
# 输出结果
# 导出开始…
# 导出完成,共导出1000个表,1000000行数据,耗时100秒
– 使用并行导入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
# 输出结果
# 导入开始…
# 导入完成,共导入1000个表,1000000行数据,耗时120秒
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
– 使用并行导出
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
– 使用并行导入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
– 使用批量插入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y BATCH_SIZE=10000
# 2. 优化DTS性能
– 配置并行迁移
– 设置并行度:4
– 设置批量大小:10000
– 设置网络超时:300秒
– 配置网络优化
– 增加网络带宽
– 优化网络配置
– 减少网络延迟
# 3. 优化数据库参数
– 优化内存参数
SQL> ALTER SYSTEM SET ‘MEMORY_POOL’ = 8192 BOTH;
SQL> ALTER SYSTEM SET ‘BUFFER’ = 16384 BOTH;
– 优化IO参数
SQL> ALTER SYSTEM SET ‘MAX_BUFFER_SIZE’ = 1024 BOTH;
SQL> ALTER SYSTEM SET ‘IO_THROTTLE_THRESHOLD’ = 1000 BOTH;
# 4. 实际示例
– 使用并行导出
$ dexp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
# 输出结果
# 导出开始…
# 导出完成,共导出1000个表,1000000行数据,耗时100秒
– 使用并行导入
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y PARALLEL=4
# 输出结果
# 导入开始…
# 导入完成,共导入1000个表,1000000行数据,耗时120秒
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
3.3.2 迁移错误处理
# 1. 查看迁移错误
– 查看dexp错误日志
$ cat fgedu_full.log
– 查看dimp错误日志
$ cat fgedu_full.log
– 查看DTS错误日志
– 打开DTS工具
– 查看迁移日志
– 查看错误信息
# 2. 处理迁移错误
– 处理数据类型错误
– 修改数据类型映射
– 转换数据格式
– 清洗数据内容
– 处理数据长度错误
– 增加字段长度
– 截断数据内容
– 修改数据类型
– 处理约束错误
– 修改约束定义
– 清洗数据内容
– 删除冲突数据
# 3. 重试迁移
– 重试失败的迁移
– 修复错误后重试
– 使用增量迁移
– 使用部分迁移
# 4. 实际示例
– 查看迁移错误
$ cat fgedu_full.log
# 输出结果
# 错误:数据长度超长
# 表:fgedu_user
# 字段:user_name
# 错误数据:user_name长度超过50
– 处理迁移错误
SQL> ALTER TABLE fgedu_user MODIFY user_name VARCHAR(100);
– 重试迁移
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
– 查看dexp错误日志
$ cat fgedu_full.log
– 查看dimp错误日志
$ cat fgedu_full.log
– 查看DTS错误日志
– 打开DTS工具
– 查看迁移日志
– 查看错误信息
# 2. 处理迁移错误
– 处理数据类型错误
– 修改数据类型映射
– 转换数据格式
– 清洗数据内容
– 处理数据长度错误
– 增加字段长度
– 截断数据内容
– 修改数据类型
– 处理约束错误
– 修改约束定义
– 清洗数据内容
– 删除冲突数据
# 3. 重试迁移
– 重试失败的迁移
– 修复错误后重试
– 使用增量迁移
– 使用部分迁移
# 4. 实际示例
– 查看迁移错误
$ cat fgedu_full.log
# 输出结果
# 错误:数据长度超长
# 表:fgedu_user
# 字段:user_name
# 错误数据:user_name长度超过50
– 处理迁移错误
SQL> ALTER TABLE fgedu_user MODIFY user_name VARCHAR(100);
– 重试迁移
$ dimp USERID=SYSDBA/SYSDBA FILE=fgedu_full.dmp LOG=fgedu_full.log FULL=Y
– 验证数据
SQL> SELECT COUNT(*) FROM fgedu_user;
# 输出结果
# COUNT(*)
# ———-
# 1000000
风哥提示:数据迁移和同步是数据库管理的重要工作,掌握迁移工具的使用和优化方法,是完成数据迁移的关键。建立完善的监控体系,及时发现和解决迁移问题。
Part04-生产案例与实战讲解
4.1 Oracle到DM迁移案例
4.1.1 案例描述
某企业需要将Oracle数据库迁移到DM数据库,实现数据库国产化替代。
4.1.2 迁移步骤
# 1. 迁移准备
– 分析Oracle数据库
– 数据库版本:Oracle 11g
– 数据量大小:1TB
– 表数量:1000个
– 存储过程数量:100个
– 准备DM数据库
– 数据库版本:DM8
– 存储容量:2TB
– 内存:32GB
– CPU:8核
# 2. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:Oracle
– 主机地址:192.168.1.100
– 端口号:1521
– 用户名:system
– 密码:oracle
– 服务名:orcl
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 3. 执行迁移
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实施结果
– 迁移成功
– 数据结构迁移成功
– 数据迁移成功
– 存储过程迁移成功
– 应用功能验证成功
– 分析Oracle数据库
– 数据库版本:Oracle 11g
– 数据量大小:1TB
– 表数量:1000个
– 存储过程数量:100个
– 准备DM数据库
– 数据库版本:DM8
– 存储容量:2TB
– 内存:32GB
– CPU:8核
# 2. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:Oracle
– 主机地址:192.168.1.100
– 端口号:1521
– 用户名:system
– 密码:oracle
– 服务名:orcl
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 3. 执行迁移
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实施结果
– 迁移成功
– 数据结构迁移成功
– 数据迁移成功
– 存储过程迁移成功
– 应用功能验证成功
4.2 MySQL到DM迁移案例
4.2.1 案例描述
某企业需要将MySQL数据库迁移到DM数据库,实现数据库国产化替代。
4.2.2 迁移步骤
# 1. 迁移准备
– 分析MySQL数据库
– 数据库版本:MySQL 8.0
– 数据量大小:500GB
– 表数量:500个
– 存储过程数量:50个
– 准备DM数据库
– 数据库版本:DM8
– 存储容量:1TB
– 内存:32GB
– CPU:8核
# 2. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:MySQL
– 主机地址:192.168.1.100
– 端口号:3306
– 用户名:root
– 密码:mysql
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 3. 执行迁移
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实施结果
– 迁移成功
– 数据结构迁移成功
– 数据迁移成功
– 存储过程迁移成功
– 应用功能验证成功
– 分析MySQL数据库
– 数据库版本:MySQL 8.0
– 数据量大小:500GB
– 表数量:500个
– 存储过程数量:50个
– 准备DM数据库
– 数据库版本:DM8
– 存储容量:1TB
– 内存:32GB
– CPU:8核
# 2. 使用DTS迁移
– 配置源数据库连接
– 数据库类型:MySQL
– 主机地址:192.168.1.100
– 端口号:3306
– 用户名:root
– 密码:mysql
– 数据库名:fgedudb
– 配置目标数据库连接
– 数据库类型:DM
– 主机地址:192.168.1.101
– 端口号:5236
– 用户名:SYSDBA
– 密码:SYSDBA
– 数据库名:fgedudb
– 配置迁移对象
– 表:选择需要迁移的表
– 索引:选择需要迁移的索引
– 约束:选择需要迁移的约束
– 视图:选择需要迁移的视图
– 存储过程:选择需要迁移的存储过程
# 3. 执行迁移
– 启动迁移任务
– 点击启动按钮
– 查看迁移进度
– 查看迁移日志
– 监控迁移任务
– 查看迁移状态
– 查看迁移进度
– 查看迁移错误
# 4. 验证迁移结果
– 验证数据结构
SQL> DESC fgedu_user;
– 验证数据完整性
SQL> SELECT COUNT(*) FROM fgedu_user;
– 验证数据一致性
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
# 5. 实施结果
– 迁移成功
– 数据结构迁移成功
– 数据迁移成功
– 存储过程迁移成功
– 应用功能验证成功
4.3 数据同步案例
4.3.1 案例描述
某企业需要配置DM数据库Data Guard,实现主备数据同步,保障数据库的连续性和可靠性。
4.3.2 同步步骤
# 1. 配置主库
– 配置归档模式
SQL> ALTER DATABASE ARCHIVELOG;
– 配置归档路径
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
– 配置归档日志格式
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置归档日志大小
SQL> ALTER SYSTEM SET ‘ARCH_FILE_SIZE’ = 1024 BOTH;
# 2. 配置备库
– 配置备库参数
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_SIZE’ = 1024 BOTH;
# 3. 配置Data Guard
– 在主库上配置备库
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
– 启动Data Guard
SQL> SP_START_GUARD(‘standby1’);
# 4. 验证同步状态
– 查看Data Guard状态
SQL> SELECT * FROM V$GUARD_STATUS;
– 查看同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 5. 测试同步功能
– 在主库上创建测试表
SQL> CREATE TABLE fgedu_test (id INT, name VARCHAR(50));
SQL> INSERT INTO fgedu_test VALUES (1, ‘fgedu1’);
SQL> COMMIT;
– 在备库上查询测试表
SQL> SELECT * FROM fgedu_test;
# 6. 实施结果
– Data Guard配置成功
– 主备数据同步正常
– 同步延迟为0
– 主备切换功能正常
– 配置归档模式
SQL> ALTER DATABASE ARCHIVELOG;
– 配置归档路径
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
– 配置归档日志格式
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
– 配置归档日志大小
SQL> ALTER SYSTEM SET ‘ARCH_FILE_SIZE’ = 1024 BOTH;
# 2. 配置备库
– 配置备库参数
SQL> ALTER SYSTEM SET ‘STANDBY_MODE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_DEST’ = ‘/dm/arch’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_FORMAT’ = ‘ARCH_%T_%S.ADB’ BOTH;
SQL> ALTER SYSTEM SET ‘ARCH_FILE_SIZE’ = 1024 BOTH;
# 3. 配置Data Guard
– 在主库上配置备库
SQL> SP_CREATE_GUARD_CONFIG(‘standby1’, ‘192.168.1.101’, 5236, ‘dmhr’, ‘dmhr123456’);
– 启动Data Guard
SQL> SP_START_GUARD(‘standby1’);
# 4. 验证同步状态
– 查看Data Guard状态
SQL> SELECT * FROM V$GUARD_STATUS;
– 查看同步状态
SQL> SELECT * FROM V$GUARD_SYNC_STATUS;
# 5. 测试同步功能
– 在主库上创建测试表
SQL> CREATE TABLE fgedu_test (id INT, name VARCHAR(50));
SQL> INSERT INTO fgedu_test VALUES (1, ‘fgedu1’);
SQL> COMMIT;
– 在备库上查询测试表
SQL> SELECT * FROM fgedu_test;
# 6. 实施结果
– Data Guard配置成功
– 主备数据同步正常
– 同步延迟为0
– 主备切换功能正常
生产环境建议:在数据迁移和同步完成后,要进行充分的测试,确保迁移和同步的可靠性和稳定性。建立完善的监控体系,及时发现和解决问题。定期进行数据备份,确保数据安全。
Part05-风哥经验总结与分享
5.1 数据迁移最佳实践
DM数据库数据迁移最佳实践:
- 充分准备:在迁移前进行充分的准备,包括需求分析、方案设计、测试验证
- 选择合适的工具:根据迁移需求选择合适的迁移工具
- 充分测试:在迁移前进行充分的测试,确保迁移的可靠性
- 分步实施:分步实施迁移,降低迁移风险
- 监控迁移:实时监控迁移过程,及时发现和解决问题
- 验证数据:迁移完成后验证数据的完整性和一致性
- 备份恢复:在迁移前进行数据备份,确保数据安全
- 制定回滚方案:制定回滚方案,应对迁移失败的情况
- 文档记录:记录迁移过程和结果,便于后续维护
- 团队协作:与团队协作,共同完成迁移工作
5.2 常见问题与解决方案
# 1. 数据类型不兼容问题
– 症状:数据类型不兼容,迁移失败
– 原因:源数据库和目标数据库的数据类型不兼容
– 解决方案:修改数据类型映射,转换数据格式
# 2. 数据长度超长问题
– 症状:数据长度超长,迁移失败
– 原因:源数据库的数据长度超过目标数据库的字段长度
– 解决方案:增加字段长度,截断数据内容
# 3. 约束冲突问题
– 症状:约束冲突,迁移失败
– 原因:源数据库的数据违反目标数据库的约束
– 解决方案:修改约束定义,清洗数据内容
# 4. 存储过程不兼容问题
– 症状:存储过程不兼容,迁移失败
– 原因:源数据库的存储过程语法与目标数据库不兼容
– 解决方案:修改存储过程语法,重写存储过程
# 5. 迁移性能问题
– 症状:迁移速度慢,影响迁移进度
– 原因:网络带宽不足、数据库性能不足、迁移工具配置不合理
– 解决方案:优化网络配置、优化数据库性能、优化迁移工具配置
– 症状:数据类型不兼容,迁移失败
– 原因:源数据库和目标数据库的数据类型不兼容
– 解决方案:修改数据类型映射,转换数据格式
# 2. 数据长度超长问题
– 症状:数据长度超长,迁移失败
– 原因:源数据库的数据长度超过目标数据库的字段长度
– 解决方案:增加字段长度,截断数据内容
# 3. 约束冲突问题
– 症状:约束冲突,迁移失败
– 原因:源数据库的数据违反目标数据库的约束
– 解决方案:修改约束定义,清洗数据内容
# 4. 存储过程不兼容问题
– 症状:存储过程不兼容,迁移失败
– 原因:源数据库的存储过程语法与目标数据库不兼容
– 解决方案:修改存储过程语法,重写存储过程
# 5. 迁移性能问题
– 症状:迁移速度慢,影响迁移进度
– 原因:网络带宽不足、数据库性能不足、迁移工具配置不合理
– 解决方案:优化网络配置、优化数据库性能、优化迁移工具配置
5.3 数据迁移检查清单
DM数据库数据迁移检查清单:
- 需求分析检查:迁移需求是否明确,迁移范围是否确定
- 方案设计检查:迁移方案是否合理,迁移工具是否合适
- 测试验证检查:测试是否充分,测试结果是否正常
- 数据结构检查:数据结构是否迁移成功,是否与源数据库一致
- 数据完整性检查:数据是否完整,数据行数是否一致
- 数据一致性检查:数据是否一致,数据内容是否正确
- 应用功能检查:应用功能是否正常,应用性能是否满足要求
- 备份恢复检查:数据备份是否完成,恢复功能是否正常
- 回滚方案检查:回滚方案是否完善,回滚功能是否正常
- 文档记录检查:迁移过程是否记录,迁移结果是否文档化
持续改进:数据迁移和同步是一个持续的过程,需要根据业务需求和系统运行情况,不断调整和优化迁移方案,确保迁移和同步的成功。建立完善的监控体系,是保障迁移和同步成功的关键。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
