Oracle数据库迁移至KingbaseES:完整实战指南

Oracle数据库迁移至KingbaseES:完整实战指南

KingbaseES内部提供了大量的Oracle兼容特性,因此,在实际的迁移过程中,一般只需对导出脚本做很少的修改,甚至在迁移对象功能全兼容的情况下可以不做任何修改。不仅如此,用户还可使用KDTS、KFS等多种工具简化迁移过程。

本节重点描述了将实际应用中使用的Oracle数据库迁移至KingbaseES数据库的完整过程,以及其中的主要迁移内容和关键迁移步骤。

主要迁移内容

在实际应用中,Oracle数据库的迁移包含数据库迁移、用户迁移、数据迁移和应用程序迁移,这些内容必须严格按照顺序进行迁移,否则可能会导致迁移受阻。

数据库是各种SQL和PL/SQL数据库对象的存放容器,用户是这些对象的管理者和使用者。因此,在进行数据迁移前,必须先迁移数据库、用户。

迁移应用程序前,需检查数据库对象迁移是否完成,完成后才能开始迁移应用程序,因为在应用程序中,可能会访问和操作前面迁移的数据库对象。

数据库、用户和模式迁移

启动目标数据库后,在目的数据库KingbaseES上创建与源数据库Oracle同名的数据库、用户,并授予新建用户使用该数据库和新建模式的权限。

另外,所创建数据库的字符集应与Oracle数据库字符集一致。如果KingbaseES已有同名数据库,则登录该数据库后,则只需创建同名用户。

Oracle数据迁移

确定使用在线迁移还是离线迁移,根据不同需要制定不同的迁移策略,使用KDTS和KFS完成数据库迁移。

应用程序移植

应用程序移植是指将Oracle API方式或嵌入式SQL方式的应用程序迁移至KingbaseES。它主要包括接口驱动程序和连接方法的迁移,以及Oracle扩展或私有的、且KingbaseES未兼容的API迁移。通常,该项任务的工作量较少。

在实际应用中,应用程序迁移与系统测试和调试通常交叉进行。

关键迁移步骤

应用系统从Oracle数据库迁移至KingbaseES数据库需要健全的项目团队和全面细致的项目执行过程。通常,将一个Oracle数据库迁移至KingbaseES主要包括迁移评估、迁移准备、数据迁移、应用迁移和测试与调试迁移后的系统这5个步骤。

迁移评估包含确定迁移目标、评估迁移任务、组建迁移团队三个阶段,迁移准备需要准备好迁移环境并进行数据库和用户迁移。

下面,分别对上述各个步骤进行详细说明。

迁移评估

确定迁移目标

开始迁移前,应根据用户的实际需求,确定迁移目标。这些目标诸如:

  • 迁移Oracle数据库的规模。
  • 迁移Oracle数据库对象的种类和特征,如简单和复杂迁移对象所占比例等。
  • 迁移的难易程度,如是否迁移大对象,是否迁移大量约束等。
  • 迁移的工期要求。
  • 迁移中业务系统是否可以处于停止服务状态。
  • 对目标系统的技术指标要求,诸如平台、版本、应用编程接口、工具、可用性、安全性和性能指标要求等。

明确迁移目标以后,即可开始迁移任务评估。

评估迁移任务

迁移前对迁移的可行性、工作量、难易程度和工作进度等进行充分评估是为了降低迁移过程中的未知风险。通常,迁移评估主要包括以下内容:

  • 迁移技术指标,如迁移业务压力和性能指标等。
  • 迁移数据规模,如迁移各类数据库对象的数量,PL/SQL程序的规模等。
  • 迁移中KingbaseES不支持功能的种类和数量。
  • 迁移的约束种类和数量。
  • 迁移过程中可能遇到的其他问题。

在Oracle迁移中常用的评估模板如下表所示:

项目 描述
Oracle数据库版本 8.1.7.4
操作系统版本 Windows 2000/2003 Server
服务器型号 CPU配置 内存(RAM) 磁盘(Disk Profile) 联想/SUN
服务器个数(# of Servers) 1或2
用户数/天(# Users/Day) 事务量/天(# Transactions /Day) 几十/天
当前数据库大小 数据库增长速率(#GB/month)目标用户(Schema) 几个GB
应用方式(OLTP/OLAP) OLTP
应用服务器(中间件) 无
客户端应用类型 (C/S,B/S) C/S
客户端应用编程语言 Delphi7
客户端应用连接接口 ODAC/ADO
是否深入SQL应用 无
监控工具 无
备份方式 Exp/imp
其它工具(备份软件等) 无
高可用要求 较高
高可用配置方案 VCS或单机
项目 描述
迁移分析日期 20220105下午
迁移分析人员KingbaseES版本 ABC
Oracle 版本 OracleSchema 11.1.7.4
Oracle DB Size (GB) 几个GB
Oracle Schema Size (MB) 几个GB
类型 小计 备注
Function 7 较少用
Index 有
LOB 有 最大到几十MB,主要是照片、word、视频(较少)
Materialized View 有>10
Procedure 25
Sequence 有>10
Table 1660 约束较多
Table Partition 无
Trigger <30
JOB 无
Package 无
Package Body 无
Type 无
View >200
Synonym >300
对象共计
类型 小计 备注
CHECK OR NOT NULL
FOREIGN KEY
PRIMARY KEY
UNIQUE KEY
OTHER
约束共计
特性 小计 备注
数据压缩 无
索引组织表 无
维度(Dimensions) 无
物化视图 无
存储概要 无
高级队列 无
空间数据管理 无
全文搜索 无
数据库链接 无
数据复制 无
RAC 无
逻辑Standby 无
物理Standby 无
自动存储管理 ASM 无
自动工作负载信息库 AWR 无
共计

组建迁移团队

Oracle数据库迁移团队的成员至少应具备以下的知识与技能:

  • 熟悉Oracle和KingbaseES的SQL语言和PL/SQL语言特性,以及相关的KingbaseES Oracle兼容特性。
  • 熟悉Oracle和KingbaseES的各种应用编程接口,以及相关的KingbaseES Oracle兼容特性。
  • 熟悉Oracle和KingbaseES的相关客户端工具,以及这些工具间的相同点和不同点。
迁移准备

准备迁移环境

在完成迁移评估后,迁移工程师需要开始准备迁移环境,这些准备工作诸如:

部署目的数据库服务器 ,部署目的数据库服务器应遵循以下原则:

  • 目的数据库服务器的CPU、内存、网络环境等硬件应尽量采用较高的配置。
  • 如果需要迁移的Oracle数据库系统规模较大,如超过1GB,则建议把Oracle和KingbaseES部署在不同的物理机器上。
  • 为确保迁移效率,应尽量把KingbaseES和Oracle服务器部署到同一局域网内。

获取并安装必要的软件,迁移前应获取并安装如下软件:Oracle数据库系统、KingbaseES数据库系统、PL/SQL Developer、JDBC和ODBC驱动程序、C语言开发工具、OCI软件、DCI软件、TPC-C测试工具、LoadRunner等。

如果迁移数据规模较大,建议对安装的KingbaseES数据库服务器进行适当的优化,如增大shared_buffer大小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。

完成上述准备工作后,迁移工程师便可开始Oracle数据库迁移工作了。

获取 Oracle数据库的相关信息,迁移前,应获取源数据库Oracle服务名及迁移的数据规模信息。其中,前者用于PL/SQL Developer工具的登录操作,后者用于估算数据迁移时间和设计迁移方案。

  1. Oracle数据库基本信息
    获取源Oracle数据库的:

    • IP地址
    • 实例名
    • 网络服务端口号
    • 用户名/密码
      在目标KingbaseES上:
    • 创建与源Oracle用户(如scott)同名的用户(scott)。
    • 创建与源Oracle(如ORCL)同名的数据库(ORCL),属主为scott。
    • 创建与源Oracle用户名(与用户名相同,如scott)同名的模式scott,属主为scott。
  2. 查询Oracle数据库编码方式

    sql 复制代码
    select userenv('language') from dual;
    -- 结果示例:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  3. 查看表数据量大小
    查看当前用户在Oracle中的表大小,按从大到小排序(单位GB)。

    sql 复制代码
    select segment_name, bytes/1024/1024/1024
    from user_segments
    where segment_type='TABLE'
    order by bytes desc;
    -- 结果示例:
    -- XFJXX 16.046875
    -- XFRXX 7.779296875
    -- PCK      7.4375
    -- BLFSXX   5.0625
    -- XFSXXX   2.3125
    -- DFGZXX   1.3359375
    -- FJB      0.53125
    -- TSJXX 0.078125
  4. 检查数据库日期格式
    时间的默认格式为:ISO, MDY。
    在KingbaseES配置文件中添加:datestyle ='ISO,YMD' 修改为年月日的格式(99会改为1999)。
    在某项目中迁移数据时遇到:服务器报错,迁移工具中断,迁移停滞。
    Oracle数据库中有日期"0099-09-30 00:00:00",迁移工具输出为"99-09-30 00:00:00",KingbaseES中将99识别为月份报错:ERROR: date/time field value out of range。

    sql 复制代码
    -- 即使没有报错也会出现潜在错误
    set ora_date_style = true;
    CREATE TABLE T_DATE(COL DATE);
    INSERT INTO T_DATE VALUES('11-10-10 10:10:10');
    SELECT * FROM T_DATE;
    -- 结果可能不是预期:2010-11-10 10:10:10

配置KingbaseES的Oracle兼容开关,根据实际情况,应对目的数据库KingbaseES进行适当的Oracle兼容配置。通常,应配置以下会话级兼容参数:

  1. nls_length_semantics:设定char类型字段默认单位是byte还是char。此外,标识符最大长度以此值为单位。如果它为char,则标识符最大长度为63个char,否则为63byte。
    在KingbaseES系统参数nls_length_semantics缺省值是"CHAR",需要与待迁移的Oracle相同。
    Oracle字符类型的 byte|char 属性的默认值是由 Oracle 提供的数据库参数NLS_LENGTH_SEMANTICS决定的,可通过下方语句进行查询:

    sql 复制代码
    select value from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS';
    -- 结果示例:BYTE

    如果未修改可能会出现:迁移char类型时,由于数据库存储的类型不同,导致迁移的数据存在多余空格的情况。

  2. search_path:模式搜索路径。例如search_path为$USER,SCOTT,PUBLIC时,系统将首先搜索与登录用户同名的模式对象,然后搜索SCOTT模式对象,最后搜索PUBLIC模式对象。

  3. default_with_oids:OID伪列开关。KingbaseES的OID伪列可兼容Oracle的ROWID伪列。因此,如果Oracle迁移对象有ROWID伪列,则建议用OID伪列替代。

配置目的库KingbaseES性能参数,为了提高迁移速度,应对目的库KingbaseES进行性能优化配置。

例如:

  1. 根据迁移数据规模的大小,迁移前可预先创建适当大小的数据和日志文件。
    • 开始迁移之前根据待迁移数据库的大小,保证KingbaseES数据目录所在位置有足够的空间。
  2. 根据KingbaseES服务器硬件配置的实际情况调整shared_buffers大小,默认是128M,建议调整为内存的1/4大小。

数据库、用户和模式迁移

数据库、用户迁移主要包括以下内容:

  • 获取源Oracle数据库的IP地址、实例名、网络服务端口号、用户名/密码等信息。
  • 在目标KingbaseES数据库上,使用 Ksql 或 Kstudio 工具上执行如下操作:
    • 创建与源Oracle用户同名的用户,例如创建与Oracle同名的scott用户。
    • 创建与源Oracle同名的数据库,例如创建与Oracle同名的ORCL数据库,它的属主为scott。若同名数据库存在,可以使用其他的数据库名称,若使用了新的数据库名称,则需要修改应用程序的连接串中的数据库名称。
  • KingbaseES 默认initdb就是Oracle兼容模式。
数据迁移

Oracle 向 KingbaseES进行数据迁移需使用以下工具:

  • KingbaseES 数据迁移工具 KDTS:动态加载待迁移的数据库访问接口,方便用户按照需求指定和使用。异构数据源之间的数据迁移:支持Oracle9i、10g、11g、12c、19c到KingbaseES的数据迁移。
  • KingbaseES 数据同步工具 KFS:支持同、异构数据源之间的数据迁移。支持结构迁移、支持全量数据迁移、支持列名映射,支持数据迁移过滤,在配置数据任务时,可以对迁移的表配置where条件、通过匹配的where条件过滤需要迁移的数据。

一般而言,不同的迁移方式需要用到不同的迁移工具:

  • 离线迁移:使用 KDTS 即可完成 Oracle 的完整迁移。
  • 在线迁移:需要先使用 KDTS 完成历史状态迁移,然后使用 KFS 完成数据的在线追平。

下述分别介绍使用离线迁移方式和在线迁移方式迁移数据的步骤:

  • 离线迁移

    用户可使用KDTS进行数据的离线迁移,KDTS提供了两种形态(WEB、SHELL),用户可根据需要进行选择,以下章节将分别介绍WEB、SHELL版本进行Oracle迁移的具体步骤。

    WEB迁移步骤

    1. 创建源数据库连接

      创建数据库连接界面如下,填写数据源信息,包括:"连接名称"、"数据库类型"、"数据库版本"、"服务器地址"、"端口"、"用户名"、"密码"、"数据库"、"连接参数"。

    2. 创建目标数据库连接

      创建数据库连接界面如下,填写数据源信息,包括:"连接名称"、"数据库类型"、"数据库版本"、"服务器地址"、"端口"、"用户名"、"密码"、"数据库"、"驱动"、"URL"、"连接参数"。

    3. 新建迁移任务

      KDTS采用向导页的方式指导用户新建迁移任务,简单易用,用户依次配置"选择数据源"-"选择模式"-"选择迁移对象"-"配置参数",即可快速配置一个迁移任务。

      • 选择数据源 :填写自定义任务名称(任务名称不能重复),选择"源数据库"和"目标数据库",或者选择"新建数据源"后使用。
      • 选择模式 :选择需迁移的模式(如需选择模式在系统模式中可选中"包含系统模式"复选框)的表、视图、序列、函数、存储过程、程序包、同义词。当模式较多时也可以通过左上方的查询框进行检索。 请至少选择一种模式,否则将收到错误提示,以至于不能完成新建任务。
      • 选择迁移对象 :通过已选模式选择需要迁移数据的表,模式较多时可在已选模式搜索框内输入模式名关键字进行快速检索。

        可迁移此模式下全部表,也可以指定或排除部分表,当选择"包含指定表"或"排除指定表"时,请通过"从列表选择"、"从文件导入"或者在输入框内输入表名将数据添加到包含列表中,若未添加数据,则会提示错误导致无法进行下一步并完成新建任务。

        点击"包含指定表"时也可选择多种方式。可直接在输入框内填写表名,多个表用","分割,回车确认;"从列表选择"可在模式中选择指定表;若需"从文件导入",可点击"下载导入模板",根据导入模板规则填写,然后从文件导入该模板。当需要"排除指定表"时,同指定部分表相同操作,但结果相反。

        从列表选择表时,可选择对应模式、检索表名关键字、数据条数限制进行快速检索对应的表。点击"添加"按钮后加入到已选列表,当想要移除部分表时可以选择对应的表点击"移除"按钮取消表。选择完成后点击确定。
      • 配置参数 :迁移工具提供了一系列配置参数用于迁移方案的个性化配置,满足多种迁移场景。配置参数分为"迁移配置"、"数据类型映射"、"线程配置"三个方面。以下以迁移配置为例,介绍各参数的含义。其他配置项请参考工具-迁移工具章节描述。
        • 表默认处理方式,包括两个复选框项("建表/重建表"、"导入数据"),迁移到KingbaseES数据库是否需要建表或者重建表,以及是否只迁移表结构而不迁移数据的选择,根据实际需求选择合适的选项(默认是全选)。
        • 表排序依据,对迁移的表进行排序,可通过"按行数和大字段大小交替"、"行数"、"大小进行排序"(默认是按行数和大字段大小交替)。
        • 表数据读取和写入,对表数据的读取和写入制定规则,可操作项包括"源库游标读取记录数"(默认是100)、"批量写入目标库记录数"(默认是1000)、"每次批量提交大小"(默认是100MB)、"LOB字段预读取大小"(默认是4000Byte)。
        • 大表拆分阈值依据,对大表进行拆分迁移,设置拆分界限。
        • 非对象设置包含"主键"、"检查约束"、"唯一约束"、"外键"、"索引"、"触发器"、"自动转换对象名",可以根据自己的需求选择是否迁移这些非对象数据(默认是全选)。
        • 数据库连接数设置,可以限制迁移程序对源数据库和目标数据库的最大连接数(默认是100)。
    4. 执行迁移任务

      可将此任务作为预迁移任务点击"保存",或者作为执行任务点击"保存并迁移"。迁移完成后任务状态将变成:

      • 迁移完成,迁移结束"状态"栏显示"成功",则迁移任务成功。
      • 迁移失败 ,迁移结束"状态"栏显示"失败",则迁移任务失败。失败后可点击详情查看日志有助于解决问题。
    5. 查看迁移报告及问题处理

      迁移完成后,需要确认执行结果,包括迁移数据量,是否有错误发生,可以通过迁移日志和迁移结果进行查看。

      • "迁移日志"打印迁移任务执行后的日志,具体可分为"系统日志"、"Error日志"、"Info日志"。
      • "迁移结果"功能的工作区包括"任务执行批次"、"迁移对象"、"总数"、"成功数"、"失败数"、"略过数"、"操作",可以查看历史迁移任务执行的每次记录,以及每次迁移的对象、成功数、失败数、查看失败任务的错误日志。

    SHELL迁移步骤

    1. 工程目录说明
      使用SHELL方式进行迁移需要对工程文件有一定了解:
      • bin: 启动脚本
      • conf: 配置文件
      • doc: 帮助文档
      • drivers: 数据库连接驱动(注意不同版本驱动的存放目录差别,详见readme.md)
      • jdk: jdk
      • kdms: kdms程序
      • lib: 程序包
      • logs: 日志
      • result: 迁移报告
    2. JDK安装
      下载与KDTS安装服务器相匹配的JDK(需要匹配操作系统和CPU架构,如Linux/AArch64、Linux/x64、Windows/x64等),版本选择JDK 11或更高。下载地址: https://jdk.java.net/archive/。
      将下载的JDK解压到KDTS-CLI/jdk目录下即可。 备注:
      • 请使用解压版本的JDK,以免安装JDK影响服务器上的其它应用。
      • 不要把当前的JDK加入系统环境变量,以免影响服务器上的其他应用。
      • 如果需要使用服务器上已有的JDK,配置bin/startup.sh(Windows平台为startup.bat)中的JAVA_PATH即可。
    3. 配置数据库连接信息
      配置步骤分为3步:激活配置文件、配置数据库连接、配置相关参数。
      • 激活配置文件 :进入KDTS-CLI/conf目录下,打开application.yml文件,根据源库类型设置当前激活的源库配置(active: oracle),如下图所示:

        在正确设置application.yml中的active项后,打开对应配置文件(datasource-oracle.yml),按实际运行环境进行配置即可。
      • 配置连接信息 :编辑conf/datasource-oracle.yml文件,编辑源端和目标端连接信息,包括url、driver-class-name、username、password信息,如下图所示:

      • 配置迁移范围 :配置要迁移的源库模式,数据库对象,涉及到的参数见下图:

      • 迁移配置参数说明
        编辑conf/datasource-oracle.yml文件有多个配置参数,可灵活使用。以下列举常用的配置参数:
        • fetch-size:源数据库游标读取记录数,在一定范围内增加该值可提升读取效率,但会增加内存开销。
        • table-with-large-object-fetch-size:源数据库含大对象数据表的游标读取记录数,此参数针对有大对象字段的表。
        • large-table-split-threshold-rows:大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以"拆分最大块数"中的最大值)。
        • large-table-split-threshold-size:大表拆分阈值大小(单位为M),当表的数据大小(普通字段+大对象字段)超过此值时,将对表进行拆分。
        • large-table-split-condition-file:大表拆分条件定义文件,优先于按行数和大小拆分。
        • table-data-filter-condition-file:表数据过滤条件定义文件。
        • use-kdms:是否使用kdms做转换(视图、函数、存储过程、包、触发器)。
        • kdms-url:kdms访问地址,前提是use-kdms: true。
        • write-batch-size:目标数据库表数据批量提交记录数.
        • write-batch-size-big-lob:目标数据库表数据批量提交记录数,特指大对象数据。
        • drop-existing-object:是否默认删除目标库中已存在的对象(如表、视图等)。
        • truncate-table:是否默认清空目标库中已存在的表数据。
        • rename-object:目标数据库对象重命名,除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index 等。
        • useDbmsStats:是否使用数据库系统统计信息(如表的记录数、大小等)。
        • useManualScript:是否使用手工脚本。
        • useKdms:是否使用kdms做转换(视图、函数、存储过程、包、触发器)。
        • kdmsUrl:kdms访问地址。
        • kdmsSourceDbType:kdms源数据库类型。
        • kdmsTargetDbType:kdms目标数据库类型。
        • readDataTimeout:读数据超时时长(单位毫秒,0表示永不超时)。
        • maxRetries:最大重试次数。
        • retryInterval:重试间隔(毫秒)。
        • readDataCanResume:读数据(中断后)能否恢复。
        • characterNeedDecoding:字符是否需要解码,处理类似Oracle字符集为US7ASCII、WE8ISO8859P1等时迁移中文乱码的问题。
        • encodingCharset:编码字符集(字符集为US7ASCII、WE8ISO8859P1设置为"ISO-8859-1")。
        • decodingCharset:解码字符集(字符集为US7ASCII、WE8ISO8859P1设置为"GB18030")。
        • decodingBytes:是否解码字节(字符集为US7ASCII时设为true)。
        • dataCompareBufferSize:源端数据对比缓冲区大小(行数)。
        • dataCompareAlgorithm:数据对比摘要算法。
        • maximumPoolSize:源数据库最大连接数。
    4. 线程相关设置
      可根据实际服务器配置按比例调整,如果与目标数据库运行在同一服务器上,应将绝大部分资源分配给数据库。
      进入 KDTS-CLI/conf目录下,打开kb-thread-config.xml,如下图所示:

      数据迁移属于IO密集型操作,涉及网络IO和磁盘IO的交互,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线程才会继续执行。为提升数据迁移的效率可以多设置一些线程池中线程的数量,避免任务等待,线程可以去做更多的迁移任务,提高并发处理效率。但不是线程数设置的越高,效率就越高,线程上下文切换是有代价的。对于IO密集型线程数的设置公式为:线程数 = CPU核心数/(1-阻塞系数),其中阻塞系数一般为0.8~0.9之间,取0.9则:
      • 双核CPU: 2/(1-0.9) = 20
      • 64核2路CPU: 64*2/(1-0.9) = 1280
    5. 启动脚本
      进入 KDTS-CLI/bin 目录下,编辑startup.sh:
      • 检查JDK的路径是否正确 :JAVA_PATH=${BASE_PATH}/jdk

      • 设置JVM内存 :系统默认自动获取JVM内存参数,若需手动调整JVM参数:

        bash 复制代码
        JAVA_OPT="-server -Dfile.encoding=UTF-8 -Dconfig.path=${CONFIG_DIR} -Xmx16g -Xms16g"

        主要是-Xmx16g -Xms16g参数。

      • 启动运行脚本 :进入 KDTS-CLI/bin目录,执行: ./startup.sh。

    6. 查看迁移报告及问题处理
      可以在运行日志(kdts_plus_***.log)中查看到迁移整个过程的信息,包括任务启动、迁移进程、结果汇总。
      可查看result下的迁移结果(在形如"result/2021-12-02_15-15-15/Schema1"目录下):
      • index.html -- 报告主页面
      • detail_XXX.html -- XXX详细信息(如表结构、表数据、表主键等)
      • FailedScript -- 失败脚本目录
      • IgnoredScript -- 略过脚本目录
      • SuccessScript -- 成功脚本目录
        在迁移过程中一旦某个对象创建失败,KDTS会将该对象的创建sql保留到本次迁移任务文件夹下的FailedScript目录下*.sql文件,用户可以手动修改后通过Ksql或者KStudio工具手动执行。
  • 在线迁移

    在线迁移过程中,为保障异构数据库数据同步且客户业务不停机,需要一个中间数据库(与源端数据库版本相同的单实例数据库)做媒介迁移存量数据。操作的过程分两部分:

    1. 先将存量数据迁移至中间数据库上,然后使用KDTS迁移工具进行初始数据搬迁或通过ETL进行初始数据搬迁至异构数据库(目标数据库)中。
    2. 待上一步操作完成,从指定断点开始启动KFS源端,正常启动目标端的KFS程序(在已经有KFS运行的情况下,可能需要重置KFS)。

    备注 :

    在迁移源库存量数据时避免做以下操作:

    1. 运行大型批处理操作会降低复制速率。
    2. 备份时执行DDL操作将导致DML和DDL之间存在锁问题。

    源端数据库备份

    1. 获取当前数据库一致性scn号

      sql 复制代码
      alter system checkpoint global;
      select checkpoint_change# from v$database;
      -- 假设获取的值为200725471,该scn号将用作启动KFS起始的scn号。
    2. 创建备份目录(需要sysdba权限)

      sql 复制代码
      create directory dump_dir as 'd:/dump_dir';
      grant read,write on directory dump_dir to kfs_user;
    3. 完整备份数据库
      在单实例oracle数据库服务器上执行(导出用户kfs_user的内容):

      bash 复制代码
      expdp kfs_user/123456 schemas=kfs_user directory=dump_dir flashback_scn=200725471 dumpfile=DBNAME_20220511.dump

    存量数据迁移

    1. 在中间库中创建备份目录(需要sysdba权限)

      sql 复制代码
      create directory dump_dir as 'E:/dump_dir';
      grant read,write on directory dump_dir to kfs_user;
    2. 将源端备份的数据文件拷贝至E:/dump_dir目录下。

    3. 将备份的数据还原至中间库

      bash 复制代码
      impdp kfs_user_new/123456 directory=dump_dir remap_schema=kfs_user:kfs_user_new table_exists_action=replace dumpfile=DBNAME_20220511.dump
    4. 使用数据迁移工具(KDTS)将中间库的数据搬迁至目标数据库。

    启动KFS完成数据追平

    备注 :

    若KFS之前已经部署运行,则源端和目标端需要先执行重置命令fsrepctl --service XXX reset -all --y,确认中间表、kufl文件等被清除。 KFS部署参考《Kingbase FlySync 安装部署手册》。

    • 源端操作 :先启动KFS到offline状态,replicator start offline。再使用ONLINE命令,将源端的KFS完全启起来,执行ONLINE命令时需要指定-from-event参数,参数值为备份数据库时查询的scn值。

      bash 复制代码
      replicator start offline
      fsrepctl -service oracle online -from-event ora:200725471:200725471
    • 目标端操作 :启动目标端KFS,等待数据追平。 提示 :追平的判断方法:

      查看服务状态,若源端无新数据产生,则源端和目标端appliedLastSeqno应相同,且appliedLatency延迟时间趋近于0,状态为ONLINE。

多次迁移

若项目开发过程中,需要定期从一个指定的源数据库迁移到目的数据库中,那么根据迁移时源数据库和应用的状态,决定离线迁移还是在线迁移。

同时,由于是多次迁移,需要考虑每次迁移时数据库对象的定义是否需要迁移,若不需要,则只迁移数据就可以,使用 KDTS 和 KFS 都支持只迁移数据;若每次迁移时需要迁移对象定义,则:

  1. 对于定义发生变更的表,选择迁移定义和数据。可使用 KDTS的"迁移部分表"功能完成,详细步骤可参考迁移工具。
  2. 对于定义没有发生变更的表,只同步数据即可。可使用 KDTS的"按条件迁移"功能完成,详细步骤可参考迁移工具。
应用代码迁移

服务器应用代码迁移

数据迁移后,需要迁移应用系统中用到的服务器应用代码,例如 PL/SQL。

KDTS 已经完成了存储过程,函数,包等 PL/SQL对象的迁移,只需要关注应用代码中用到的匿名块的代码的迁移。KingbaseES 的 plsql 语言和Oracle的plsql高度兼容,需要关注如下2点:

  1. package中Oracle 允许存在同名同参数的存储过程和函数,KingbaseES 不支持,需要重命名为不同名字。

  2. KingbaseES 不支持 Object type的方法的连续调用,例如不支持 方法1.方法2.方法3,需要改写为:

    sql 复制代码
    var1 := 方法1;
    var2 := var1.方法2;
    var3 := var2.方法3;

客户端应用代码迁移

在应用编程接口方面,KingbaseES与Oracle兼容程度较高,所以,一般情况下,应用程序迁移比较容易。应用程序迁移通常应和迁移后的系统测试同时进行。这样可及时修改测试过程中发现的问题。

通常,在应用程序可采用API方式访问和操纵数据库:

该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如JDBC和ODBC等。目前,大多数数据库厂商均提供很多标准的数据库API及其驱动程序。

在实际应用中

相关推荐
L·S·P4 小时前
25MB 管理 100+ 种数据库:开源轻量客户端 DBX 介绍与上手
数据库·mysql·开源·database·dbx
笃行3506 小时前
KingbaseES KSQL Developer 的连接管理、数据处理与对象管理
数据库
ha_lydms6 小时前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
Shadow(⊙o⊙)6 小时前
MySQL内置函数
数据库·mysql
笃行3507 小时前
金仓 KingbaseES PL/SQL 开发全攻略:异常处理、数据类型、调试优化与过程语句
数据库
快乐的木子李8 小时前
mysql-26.7.0-linux26.7.0下载安装
数据库·mysql
excel9 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
知行产研9 小时前
易控智驾:毛利率跃升17.2个百分点,矿山无人驾驶从“规模换增长“迈入“盈利拐点“
数据库·mysql
千里码aicood9 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
饺子大魔王的男人10 小时前
Redis 内存和连接异常怎么排查?用 redis_exporter 搭一套可远程抓取的监控链路
数据库·redis·bootstrap