Oracle至金仓KingbaseES不停机迁移最佳实践

关键字:

金仓数据库、KingbaseFlySync、KFS、同步程序、replicator、数据同步、数据解析、增量同步、实时同步、KDTS、不停机迁移场景

、方案背景 

源端为Oracle数据库时,需要在不停业务的情况下,实现存量数据的搬迁和增量数据的实时同步。

前期准备

// 在进行下一步的详细部署工作开始前,一切需要提前准备好的内容,包括但不限于:部署设备、数据库用户权限、网络访问权限、KFS产品的部署安装等

2.1设备环境准备

名称

作用

IP

KFS/kdts安装用户名/密码

root用户密码

时效

kdts工具运行设备

运行kdts工具

10.10.5.140

kdts/1

可不提供

临时

KFS源端部署设备

运行KFS源端服务

10.10.5.101

flysync/1

可不提供

长期使用

KFS目标端部署设备

运行KFS目标端服务

10.10.5.102

flysync/1

可不提供

长期使用

2.2 KFS同步服务部署

2.3 KFS控制台服务部署

功能原理

通过使用kdts工具进行存量数据迁移,可以实现不停机将Oracle数据库中的数据迁移到人大金仓KingbaseES数据库中,操作流程如下:

1)存量数据迁移

使用kdts工具的基于SCN的数据搬迁功能,将Oracle数据库中的存量数据搬迁到目标端。

2)增量数据同步

在完成存量数据搬迁后,再使用KFS工具的基于SCN的实时同步功能,将Oracle数据库中新增的数据同步到目标端。

详细部署

4.1存量数据迁移

4.1.1存量迁移前置操作
4.1.1.1源端数据库(Oracle)的环境准备-参数确认

1、确认源端数据库Oracle的下列参数情况

SQL> show parameter undo;

NAME            TYPE                VALUE

--------------- ------------------ ------------------------------

undo_management  string    AUTO

undo_retention  integer   900

undo_tablespace  string    UNDOTBS1

需要关注的参数说明:

undo_retention: 该参数主要用于声明还原段中的事务提交后尽量保留[^注1]的时间,默认时间为900s(15min)。

undo_tablespace:该参数主要声明了undo的表空间(还原表空间)。

注1:还原表空间的使用会优先覆盖超过保留时间的事务,当还原表空间大小不足时,处于保留时间内的事务也有可能被覆盖,即尽量保留。若要强制保留,可执行如下命令。

SQL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name = 'UNDOTBS1';

SQL> alter tablespace UNDOTBS1 retention guarantee;

对表空间UNDOTBS1开启guarantee以后,当表空间不足且相关事务都处在保留时间时,会抛出误。

SQL> select tablespace_name,file_name,bytes/1024/1024 MB, autoextensible from dba_data_files where tablespace_name='UNDOTBS1';

TABLESPACE_NAME FILE_NAME          MB  AUTOEX

--------------- ----------------------------------------------- ------ -------

UNDOTBS1        /home/oracle/oracle/oradata/orcl/undotbs01.dbf       330      YES

需要关注的参数说明:

TABLESPACE_NAME:还原表空间名称

FILE_NAME“还原表空间所关联的数据文件

MB:还原表空间的数据文件大小

AUTOEX[^注2]:是否开启自动扩展

注2:在不开启自动扩展的情况下,进行后续的迁移操作,有极大概率报错:ora-01555:快照过旧:回退段号。当开启自动扩展,但是还原表空间设定较小时,也有极小的概率报错:ora-01555。此时需要保证自动扩展是开启的,并且还原表有足够的空间容纳较长时间所产生的redoLog信息。

4.1.1.2源端数据库(Oracle)的环境准备-参数修改

由于实际业务中存量数据迁移耗费的时间往往会大于undo_retention的默认值900S,因此需要根据待搬迁的数据量进行合适的时间预估,将该预估时间其作为undo_retention的新参数值。并且需要关注undo表空间的大小是否支持在修改undo_retention后能够存储相应的数据量。

1)修改undo_retention(单位:秒)

SQL> alter system set undo_retention = 5400;

2)修改还原表空间大小(单位:MB)

SQL> alter database datafile '/home/oracle/oracle/oradata/orcl/undotbs01.dbf' resize 4096M;

3)修改保留策略

SQL> alter tablespace UNDOTBS1 retention guarantee;

修改完成后依次执行下述命令查看执行结果

SQL> show parameter undo;

SQL> select tablespace_name,file_name,bytes/1024/1024 MB, autoextensible from dba_data_files where tablespace_name='UNDOTBS1';

SQL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name = 'UNDOTBS1';

4.1.2进行存量数据迁移

1、获取源端数据库(Oracle)的SCN,记为X,执行如下SQL语句获取SCN:

-- 开启输出功能

set serveroutput on

-- sql示例

declare

cursor start_scn_set is SELECT t.* FROM "V$TRANSACTION" t, v$session s WHERE s.saddr =t.ses_addr;

v_start_scn start_scn_set%rowtype;

c_scn number;

begin

for v_start_scn in start_scn_set loop

dbms_output.put_line('start_scn:  '||v_start_scn.start_scn);

end loop;

select current_scn into c_scn from v$database;

dbms_output.put_line('current_scn:  '||c_scn);

end;

/

该SQL中获取了两种SCN,一个是current_scn,表示当前的SCN号;另一个是start_scn,当查询其不为空时,表示当前数据库有未提交的长事务。使用原则如下:

1) 如果start_scn为空,则使用current_scn;

2) 如果start_scn不为空,则使用最小的start_scn(可能有多个未提交的事务);

2、使用KDTS指定SCN号将存量数据进行迁移,若数据库中不存在未提交长事务就使用上一步查询的current_scn,若数据库中存在未提交的长事务就使用上一步查询的start_scn。

1)登录访问kdts工具的管理控制台

2)在kdts工具控制台的【数据源管理】中,分别在【源数据库】中新建Oracle数据库和在【目标数据库】中新建人大金仓KingbaseES数据库

3)在kdts工具控制台的【搬迁任务管理】中的【搬迁任务】页面,新建搬迁任务,源端数据库选择Oracle数据库,目标端数据库选择人大金仓KingbaseES,点击【下一步】

4)勾选对应的源端模式和选择目标端的模式名称,对搬迁对象进行勾选,点击【下一步】

5)在【选择迁移对象】页面直接点击【下一步】

6)在【配置参数】-【迁移配置】-【源数据库配置】-【其他设置】中的【系统改变号SCN】输入框中输入前面查询到的SCN号

注:SCN号是该节第一步查出的SCN号(使用上:使用KDTS指定SCN号将存量数据进行迁移,若数据库中不存在未提交长事务就使用上一步查询的current_scn,若数据库中存在未提交的长事务就使用上一步查询的start_scn)。

 

图片.png

7)保存迁移任务,并在迁移任务管理页面点击【启动】进行数据搬迁

4.2增量数据补偿

注:若 KFS 之前已经部署运行,则源端和目标端需要先执行重置命令 fsrepctl -service XXX reset -all -y,

确认中间表、kufl 文件被清除。

4.2.1源端操作

先启动 KFS 到 offline 状态(replicator start offline)。若源端之前已经运行过 kfs 则先重置源端(fsrepctl -service oracle reset -all -y),再使用 ONLINE 命令,将源端的 KFS 完全启起来,执行 ONLINE 命令时需要指定-from-event 参数X,参数值X为数据迁移操作步骤(6.5.2 1)中查询的 scn 值。实例如下:

shell> replicator start offline

shell> fsrepctl -service oracle reset -all -y

shell> fsrepctl -service oracle online -from-event ora:X:X

4.2.2目标端操作

启动目标端 KFS,等待数据追平。

shell> replicator start offline

shell> fsrepctl -service oracle reset -all -y

shell> fsrepctl -service oracle online

4.2.3追平的判断方法

1、方法一:查询seqno是否相同

shell> fsrepctl services

Processing services command...

NAME VALUE

---- -----

appliedLastSeqno: 3 //若源端无新数据产生,则源端和目标端相同

appliedLatency : 0.297 //若源端无新数据产生,延迟时间为 0

role : master

serviceName : OracleToKes

serviceType : local

started : true

state : ONLINE

Finished services command...

由于数据解析同步受网络因素和其他外部因素影响,该seqno在一些场景下会出现永不相同的情况,此时需要通过方法二进行验证是否追平。

2、方法二:查看目标端的入库event的时间,是否已经超过源端开始迁移的时候的时间。

shell> fsrepctl status

Processing status command...

NAME                     VALUE

----                     -----

appliedLastLogPos      : ora:195806216:195806219

appliedLastTransno     : 86338

appliedLatency         : 5.158

autoRecoveryEnabled    : false

autoRecoveryTotal      : 0

channels               : 1

clusterName            : oracle

currentLogPos          : NONE

currentTimeMillis      : 1679990365591

dataServerHost         : flysync-2

extensions             :

host                   : flysync-2

latestEpochNumber      : 86305

masterConnectUri       : kufl://flysync-1:3112/

masterListenUri        : kufl://flysync-2:3112/

maximumStoredTransNo   : 86338

minimumStoredTransNo   : 0

offlineRequests        : NONE

pendingError           : NONE

pendingErrorCode       : NONE

pendingErrorLogPos     : NONE

pendingErrorTransno    : -1

pendingExceptionMessage: NONE

relativeLatency        : 4576.59

resourcePrecedence     : 99

rmiPort                : 19000

role                   : slave

serviceName            : OracleToKes

serviceType            : local

simpleServiceName      : OracleToKes

siteName               : default

sourceHost             : flysync-2

state                  : ONLINE

timeInStateSeconds     : 7547.14

timezone               : GMT+08:00

transitioningTo        :

transnoType            : java.lang.Long

uptimeSeconds          : 7552.701

useSSLConnection       : false

version                : Kingbase FlySync V002R002

workflowSource         : UNKNOWN

Finished status command...

关注属性currentTimeMillis,将其与搬迁开始时的时候进行比较,若其远超搬迁开始的时间,即源端目标端之间的数据均已追平。

功能验证

5.1数据一致性验证

通过Kingbase Flysync软件自带的数据比对功能,进行源端和目标端的数据一致性校验。

5.2业务切换

将客户的业务从oracle数据库切换到金仓Kingbase ES数据库,观察用户的业务是否运行正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值