KFS Oracle源端不停机迁移三种方案

发布时间:2026/10/11 14:38:17

KFS Oracle源端不停机迁移三种方案 在数据库国产化迁移过程中如何在不停止业务的前提下将Oracle中的存量数据完整、高效地迁移到目标数据库是每个DBA和架构师面临的核心挑战。本文基于金仓KFSKingbase FlySync数据同步工具详细介绍三种Oracle源端不停机迁移方案涵盖适用场景、架构设计、关键步骤及验证方法。一、方案概览1.1 迁移核心目标在数据库迁移项目中我们追求三大核心目标目标 说明零业务停机 确保在迁移过程中业务不受影响实现无缝迁移数据一致性保障 通过多种校验手段确保源端与目标端数据完全一致TB级数据高效迁移 支持大规模数据的快速迁移优化迁移效率1.2 三大方案对比针对不同的业务场景和数据规模KFS提供了三种不停机迁移方案方案 特点 适用数据量 适用场景ADG备库迁移 利用ADG主备库分离进行存量数据迁移 TB级以上 Oracle源库已有ADG备库环境RMAN中间库迁移 通过RMAN物理备份创建中间库规避ORA-01555 大于1TB 现场可提供中间库服务器无中间库直连迁移 减少中间环节直接从源库迁移 1TB以内 快速迁移无额外服务器资源1.3 KFS核心作用KFS在整个迁移过程中扮演着增量数据同步引擎的角色其核心能力包括1.增量日志解析解析Oracle的Redo/Archive Log实现增量数据的实时同步。2.断点续传与一致性同步基于SCNSystem Change Number的断点续传机制确保数据迁移的连续性和一致性。即使迁移过程中出现中断也能从指定SCN位置恢复同步不会丢失数据。二、迁移前置条件2.1 环境要求在开始迁移之前必须确保Oracle源库满足以下三个前置条件① Oracle版本兼容性要求Oracle版本为 10g及以上确保系统兼容性。② 补全日志启用需要验证补全日志Supplemental Logging已启动确保迁移过程中数据的完整记录。补全日志分为最小补全日志和主键补全日志两者均需开启。③ 归档模式启用必须启用归档模式ARCHIVELOG以保证数据的完整性和可恢复性。归档模式是增量同步的基础KFS需要通过归档日志来获取增量数据。2.2 关键配置检查在正式迁移前需要进行以下关键配置检查检查归档与附加日志是否开启通过查询 v$database 视图检查 log_mode、supplemental_log_data_min 和 supplemental_log_data_pk 的状态期望结果log_mode ARCHIVELOGsupplemental_log_data_min YESsupplemental_log_data_pk YES如果未开启可通过以下命令设置。先关闭数据库并启动到 MOUNT 状态切换为归档模式打开数据库开启最小补全日志开启主键补全日志确认归档日志是否正常生成检查归档日志是否正常产生保证数据迁移的连续性和一致性或查询归档日志信息三、ADG备库迁移方案3.1 适用场景ADG备库迁移方案适用于满足以下条件的场景✅ Oracle源库有大量存量数据✅ Oracle源库已有ADG备库环境✅ 业务不能停机3.2 架构设计整体架构如下ADG备库迁移架构图核心思路利用ADG备库暂停同步的时间窗口先在暂停窗口内记录主库最小活跃事务SCNstart_scn与备库当前SCNcurrent_scn再通过KDTS工具从备库导出存量数据最后利用KFS从指定SCN开始增量同步实现存量与增量的无缝衔接。3.3 关键步骤ADG备库迁移方案的关键步骤如下Step 1ADG主备库暂停同步⚠️ 注意暂停同步期间主库的Redo日志会持续累积需关注归档日志空间是否充足。Step 2主库查询最小活跃事务SCNStep 3备库获取当前SCN 要点start_scn 取自主库最小活跃事务的SCN确保不遗漏任何在途事务current_scn 取自备库当前SCN作为存量迁移与增量同步的衔接点。在暂停窗口内先记录好这两个SCN后续KDTS存量迁移与KFS增量同步均以此为准。Step 4KDTS从备库迁移存量数据使用KDTS工具从备库 current_scn 导出的存量数据迁移到目标数据库。Step 5ADG恢复同步存量数据迁移完成后恢复ADG同步Step 6KFS从指定SCN开始增量同步使用KFS的 fsrepctl 命令从 start_scn 和 current_scn 开始增量同步KFS会解析从 start_scn 到 current_scn 之间的所有Redo/Archive Log将增量数据同步到目标库。四、RMAN中间库迁移方案4.1 核心优势RMAN中间库迁移方案的核心优势在于1.彻底规避ORA-01555错误RMAN备份数据文件和归档不占用undo表空间大数据量下也不会产生 ORA-01555 错误。2.无需指定SCN备份备份时无需指定SCN只需在恢复时查询RMAN所备份归档日志的SCN号即可实现基于SCN的不完全恢复。3.备份还原速度快物理备份效率远高于逻辑备份适合TB级数据。需要注意的不足1.操作相对复杂2.只能整库备份还原不能实现单用户、单表的备份还原。4.2 适用场景✅ 数据库有大于1TB的存量数据✅ 业务不能停机✅ 现场可以提供中间库服务器4.3 关键流程整体流程分为三个阶段RMAN备份与中间库搭建迁移存量到中间库→ KDTS存量迁移 → KFS增量同步。RMAN中间库迁移架构图阶段一RMAN备份与中间库搭建Step 1源端查询最小活跃事务SCNstart_scn查询源库当前活跃事务的最小起始SCN作为KFS增量同步的起点。如果查出来有多条使用SCN号最小的那条 例如查出的最小start_scn为 12345678901234后续KFS增量同步命令将用到。Step 2源端RMAN全量备份备份数据库、归档日志、控制文件和spfile多通道并行提升备份速度Step 3备份文件传输到中间库服务器Step 4中间库还原spfile文件若中间库服务器上尚无静态参数文件执行 startup nomount; 时此处会报错可先忽略继续执行还原Step 5生成pfile并修改对应路径利用spfile生成pfile编辑pfile修改数据库相关路径pfile中配置的目录需手工在操作系统上创建Step 6从pfile重新生成spfile并启动到nomount先关闭数据库否则RMAN会进入DUMMY模式再从pfile重新生成spfile并启动到nomountStep 7还原控制文件并挂载数据库Step 8注册备份集到新库的控制文件如果目标库的备份文件位置与源库的文件位置一致此步可以忽略否则需要将备份集注册到控制文件。注册单个备份片使用 catalog backuppiece注册整个目录使用 CATALOG START WITH本地目录路径末尾必须加 /有多个备份目录时注册多次Step 9确定要还原的SCN找到最大seq序列号归档日志对应的 lowscn该SCN即为中间库的还原点同时也是KFS源端解析的 current_scn。⚠️ 例如查到的最大SCN为 17383296735847后续 set until scn 与KFS增量同步命令均使用此值。Step 10定义数据文件新路径可选如果数据文件路径改变需要重新定义文件路径。先查找数据文件号与对应数据文件再执行 set newname若中间库与源库的数据文件目录一致此步可跳过Step 11恢复数据库不完全恢复至指定SCN其余数据文件与 Step 10 保持一致set newname 完整列出所有数据文件后执行恢复Step 12重置日志打开数据库版本升级处理如果数据库前后版本不一致需要重新编译无效对象 备注如果不是作为中间库而是直接迁移到Oracle在增量同步之前需要关闭目标库待同步用户的触发器和Job。阶段二KDTS存量迁移使用KDTS工具将中间库的存量数据迁移至KES目标库步骤略。由于中间库的数据是静态的不完全恢复后不再变化可以安全地进行全量迁移无需担心数据一致性。阶段三KFS增量同步① 源端服务启动 命令中第一个SCN12345678901234是 Step 1 查到的 start_scn第二个SCN17383296735847是 Step 9 中 list backup of archivelog all 查到的SCN即 current_scn。② 目标端服务启动 关键点中间库的还原SCN必须与KFS增量同步的 current_scn 保持一致均为Step 9查到的SCNstart_scn 与 current_scn 严格对齐才能确保存量数据与增量数据的无缝衔接。五、无中间库直连迁移方案无中间库直连迁移方案直接从源库读取数据进行迁移省去了中间库搭建的环节。整体思路是KDTS 指定 SCN 迁移存量数据 KFS 从指定 SCN 开始增量同步实现存量与增量的无缝衔接。 以下流程参考腾讯文档《oracle无中间库不停机迁移》整理。无中间库直连迁移流程图5.1 源库准备ORA-01555 规避KDTS 迁移需要防止出现 ORA-01555 快照太旧 问题。Oracle 需要根据预计迁移时间配置好 undo_retention 和 undo 表空间并且 undo 表空间需要配置 guarantee以保证迁移期间 undo 数据不会被覆盖。如果存在 LOB 大字段表大字段表所在的表空间也需要留有足够的空间。undo_retention 和 undo 表空间(1) 根据预估存量数据迁移时间设置 undo_retention 参数单位秒。先查询当前 undo_retention再设置 undo_retention示例4小时 14400秒(2) 根据 undo_retention 参数和 Oracle 系统统计的每秒需要的撤销块大小使用下面语句统计需要的 undo 表空间大小。第一步查询 undo_retention 与 db_block_size 参数第二步统计 UNDO 表空间已用空间单位MB需要的 undo 表空间大小 ≈ undo_retention秒 × 每秒撤销块数 × db_block_size建议在此基础上再多留 20% 的余量。(3) 如果表空间不足使用以下语句扩大 undo 表空间。先查询 undo 表空间数据文件位置再为 undo 表空间增加数据文件扩大表空间(4) 将 undo 表空间配置为 guarantee以保证迁移期间 undo 数据不会被覆盖⚠️ 重要提示迁移完成后需要将 undo 表空间改回 noguaranteeLOB 大对象表空间如果有 LOB 大对象大对象表所在的表空间需要保留 10% 的剩余空间。(1) 查询表空间利用率。第一步查询各表空间总大小MB第二步查询各表空间剩余空间MB以 TMS 表空间为例利用率 (total_mb - free_mb) / total_mb × 100%若剩余空间不足 10% 则需要扩容通常 UNDOTBS1、SYSAUX、SYSTEM、USER 等系统表空间不在检查范围内。(2) 如果 LOB 数据所在表空间剩余空间不足使用下面语句进行扩容。a. 查看迁移用户的表空间b. 查看用户表空间是否是大文件表空间c. 如果是大文件表空间先查询数据文件信息resize 的数据量要大于上面查的原来的表空间的数据容量再增加表空间大小d. 如果是小文件表空间增加表空间大小5.2 KDTS 指定 SCN 迁移存量数据Step 1查询当前 SCN 及 start_scn在源库执行以下 PL/SQL查询最小活跃事务 SCNstart_scn和当前 SCNcurrent_scn。若使用 SQL*Plus 需先执行 set serveroutput on; 开启输出PL/SQL Developer 中可省略 SCN 含义 - current_scnOracle 当前的 SCN。 - start_scnOracle 当前 SCN 之前已开始未提交事务的最小 SCN指定这个 SCN 防止从 current_scn 开始解析会有数据漏解析。Step 2KDTS 指定 current_scn 进行数据迁移使用 KDTS 工具指定上面查询到的 current_scn 进行存量数据迁移。5.3 KFS 从指定 SCN 开始增量数据同步Step 1安装部署 KFS略参考《KFS安装部署手册》Step 2启动 KFS 到 offline 状态Step 3KFS 服务进行重置先源端后目标端Step 4源端服务从指定 SCN 开始解析指定 SCN 就是上面 KDTS 步骤查到的 current_scn 和 start_scn 要点 - current_scnOracle 当前的 SCN - start_scnOracle 当前 SCN 之前已开始未提交事务的最小 SCN指定这个 SCN 防止从 current_scn 开始解析会有数据漏解析 - 源端解析可以与 KDTS 存量数据迁移同时进行。Step 5目标端服务 online目标端服务需要等 KDTS 存量数据迁移完成后才能 online⚠️ 注意目标端必须在 KDTS 存量数据迁移完成后再启动避免存量数据与增量数据冲突。六、迁移验证方案迁移完成后数据一致性验证是确保迁移质量的关键环节。KFS提供四种验证方式可组合使用验证方式 说明 适用场景精简比对 只比对两边表数据量的差异 快速验证发现明显数据缺失详细比对 比对表详细数据的差异 精确验证每条记录的一致性增量比对 比对指定时间点之后的增量数据差异 验证增量同步的准确性不停机比对 业务不停机情况下进行数据比对并修复 生产环境持续验证建议验证流程1.先精简比对快速定位数据量差异较大的表。2.再详细比对对差异表进行逐条数据比对。3.增量比对验证增量同步链路的正确性。4.不停机比对在业务持续运行期间进行最终的一致性确认。七、总结三种方案选型决策树三种方案选型决策树各方案核心要点回顾方案 核心原理 优势 注意事项ADG备库迁移 利用ADG备库暂停窗口导出存量 无需额外服务器利用现有环境 需有ADG备库暂停期间需关注归档空间RMAN中间库迁移 RMAN不完全恢复创建中间库 彻底规避ORA-01555无需指定SCN备份备份还原快中间库数据静态可安全迁移 需额外中间库服务器只能整库备份还原、操作复杂还原SCN须与KFS的current_scn精确对齐无中间库直连迁移 KDTS指定SCN迁移存量 KFS从指定SCN增量同步 架构简单减少中间环节无额外服务器 需配置undo_retention/guarantee规避ORA-01555LOB表空间预留10%余量适合1TB以内数据迁移通用原则无论选择哪种方案都需要遵循以下通用原则1.SCN对齐存量迁移的SCN与增量同步的起始SCN必须严格对齐这是数据一致性的基石。2.增量日志保留从存量迁移开始到KFS增量同步启动期间Oracle的归档日志必须保留完整不能被清理。3.充分验证迁移完成后务必通过精简比对 → 详细比对 → 增量比对的流程确保数据完全一致。4.回滚预案迁移前制定详细的回滚预案确保在出现问题时能够快速回退。本文总结Oracle不停机迁移的核心思路是存量迁移 增量同步的组合拳。通过KDTS完成存量数据的批量迁移利用KFS基于SCN的断点续传能力衔接增量数据最终实现业务零感知的数据迁移。根据数据规模和环境条件选择合适的方案是迁移成功的关键。参考资料金仓KFSKingbase FlySyncOracle源端不停机迁移方案
延伸阅读

更多相关文章

2026/10/11 14:38:17

中南大学数据库真题解析:关系设计、SQL优化与事务实战

简介:本资源为中南大学数据库课程历年典型试题汇编,面向计算机专业本科生、考研备考学生及数据库初学者,聚焦数据库原理核心考点的系统性复习与应试训练。压缩包含1个DOC文档(164KB),完整覆盖DBMS基础、三级…

2026/10/11 14:33:17

穿线工程实战:快速连接系统与综合布线全流程指南

做了这么多年综合布线和网络工程,最怕听到的一句话就是“线已经放好了,就是穿不过去”。很多项目看着不起眼的穿线环节,真正干起来才知道处处是坑。最近在工地上反复提到“ks connx穿线”这个词,其实就是把穿线和接线当成一套快速…

2026/10/11 14:33:17

基于HALCON与C++的芯片缺陷检测系统设计与实现

简介:一套基于Halcon与C开发的芯片缺陷检测系统完整源码,专为毕业设计、课程设计与项目开发场景打造,适合有一定C基础、希望学习机器视觉工程落地的学习者。资源共73个文件,压缩包约42.77MB,核心内容包括C源文件&#…

2026/10/11 18:58:31

Linux基础IO全解析:从文件描述符到缓冲区与重定向

1. 先搞清楚:printf 的背后到底发生了什么如果你写过几年代码,大概率遇到过这种场景:程序跑着跑着突然崩了,日志却少了几行;或者调了半天 bug,发现数据明明已经“写进”了文件,重启进程后内容却…

2026/10/11 18:58:31

Linux进程详解:从内核结构到僵尸进程排查实战

第一次接触 Linux 进程概念时,我最先的困惑其实是:我把一条命令敲进终端,回车之后,屏幕上那些输出到底是谁在执行?后来才明白,从命令落到内核眼里那一刻起,一个叫“进程”的东西就开始承载整个执…

2026/10/11 18:58:31

麒麟桌面Linux用户组全解析:加组不生效的排查与实操

最近帮一位同事排查串口设备权限问题,他把自己的账号加进了dialout组,id命令也确认了,但手里的串口工具仍然报“Permission denied”。这种“组加了却不生效”的情况,我在麒麟桌面系统V10-SP1 2503里见过不止一次。用户组是Linux权…

2026/10/11 18:58:31

OpenClaw 安装与运行教程 | 从零跑通第一个任务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 18:53:31

Win7换Win11文件迁移实战:2款工具搞定新旧电脑数据搬家

自己的Win7老笔记本用了整整一个世代,前几天终于到了退休的时候。新电脑装的是Win11,系统倒是干净清爽,可真正让人头疼的从来不是系统本身,而是那台旧机器里攒下的东西——桌面上的工作文档、几个G的家庭照片、下载了再也没整理过…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑