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 版本 OracleSchema11.1.7.4
Oracle DB Size (GB)几个GB
Oracle Schema Size (MB)几个GB
类型小计备注
Function7较少用
Index
LOB最大到几十MB,主要是照片、word、视频(较少)
Materialized View有>10
Procedure25
Sequence有>10
Table1660约束较多
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数据库编码方式
    selectuserenv('language')fromdual;-- 结果示例:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  3. 查看表数据量大小
    查看当前用户在Oracle中的表大小,按从大到小排序(单位GB)。
    selectsegment_name,bytes/1024/1024/1024fromuser_segmentswheresegment_type='TABLE'orderbybytesdesc;-- 结果示例:-- 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
    -- 即使没有报错也会出现潜在错误setora_date_style=true;CREATETABLET_DATE(COLDATE);INSERTINTOT_DATEVALUES('11-10-10 10:10:10');SELECT*FROMT_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决定的,可通过下方语句进行查询:
    selectvaluefromnls_database_parameterswhereparameter='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参数:
        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号
      altersystemcheckpointglobal;selectcheckpoint_change# from v$database;-- 假设获取的值为200725471,该scn号将用作启动KFS起始的scn号。
    2. 创建备份目录(需要sysdba权限)
      createdirectory dump_diras'd:/dump_dir';grantread,writeondirectory dump_dirtokfs_user;
    3. 完整备份数据库
      在单实例oracle数据库服务器上执行(导出用户kfs_user的内容):
      expdp kfs_user/123456schemas=kfs_userdirectory=dump_dirflashback_scn=200725471dumpfile=DBNAME_20220511.dump

    存量数据迁移

    1. 在中间库中创建备份目录(需要sysdba权限)
      createdirectory dump_diras'E:/dump_dir';grantread,writeondirectory dump_dirtokfs_user;
    2. 将源端备份的数据文件拷贝至E:/dump_dir目录下。
    3. 将备份的数据还原至中间库
      impdp kfs_user_new/123456directory=dump_dirremap_schema=kfs_user:kfs_user_newtable_exists_action=replacedumpfile=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值。
      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,需要改写为:
    var1 :=方法1;var2 :=var1.方法2;var3 :=var2.方法3;

客户端应用代码迁移

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【异常】FreeMarker 模板文件找不到问题解决方案 Template not found for name “mail/captcha.ftl“.

一、报错内容 cn.hutool.core.io.IORuntimeException: TemplateNotFoundException: Template not found for name "mail/captcha.ftl". The name was interpreted by this TemplateLoader: ClassTemplateLoader(classLoader="jdk.internal.loader.ClassLoaders…

保姆级教程:Ubuntu搭建本地AI助手,从Docker到DeepSeek-R1一站式指南,建议收藏!

本文主要介绍如何在Ubuntu操作系统环境下&#xff0c;零基础快速安装Docker环境、安装Ollama、安装本地大模型DeepSeek-R1和大模型可视化工具Open WebUI&#xff0c;快速在本地搭建一款专属AI智能小助手。 1.检查Docker环境 检查是否已安装docker运行环境&#xff0c;在控制台…

NAS —— Centos8挂载Nas到本地目录使用(多图完整教程)

需求与结果 需求:有一台Centos8台式机、一台Synology Nas(DS821),需要将Nas挂载到Centos8上目录上进行使用。 最终结果: 步骤 1、首先保证Centos8可以ping通NAS设备、同时可在Centos8上访问NAS网页端。        2、进入NAS网页操作 (1) 进入DSM控制面板 → 共享文件…

由特殊到一般

lc3301 从最大元素开始贪心 对数组降序排序后&#xff0c;让每个元素不超过前一个元素减1 若出现非正数则返回-1&#xff0c;否则计算数组元素总和 class Solution { public: long long maximumTotalSum(vector<int>& maximumHeight) { ranges::sort(max…

【AI+教育】实践:从策略优化到群体应用的探索

例如&#xff0c;有研究聚焦智能苏格拉底绘画机器人的开发。该机器人内置苏格拉底对话模式&#xff0c;这是一种古老的对话模式。苏格拉底的对话模式&#xff0c;主张通过不断追问&#xff0c;引导人们对自身所做之事进行更深层次的反思与思考。研究通过苏格拉底追问式构建多智…

深入解析:基于势场法的多智能体机器人编队控制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

吐血推荐8个AI论文软件,助你轻松搞定本科生毕业论文!

吐血推荐8个AI论文软件&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI工具让论文写作不再难 对于许多本科生来说&#xff0c;撰写毕业论文是一项既复杂又充满挑战的任务。从选题到资料收集&#xff0c;从大纲搭建到初稿完成&#xff0c;每一个环节都可能让人感到手足无…

揭秘提示工程架构师在电子商务应用的领先策略

揭秘提示工程架构师在电子商务应用的领先策略&#xff1a;开启电商智能新时代 关键词&#xff1a;提示工程架构师、电子商务、语言模型、用户体验、个性化推荐、智能客服 摘要&#xff1a;本文深入探讨提示工程架构师在电子商务领域的关键作用及其领先策略。通过生动的比喻和…

SDL2库基础使用

1.初始化 SDL2 子系统(视频相关),失败则打印错误并返回 -1 if (SDL_Init(SDL_INIT_VIDEO)) {fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); // 输出初始化失败原因return -1; // 返回错误码 }2.…

android 系统中间件和 平台中间件 的区别,Framework等

这是一个非常专业的问题&#xff0c;涉及到Android系统架构的核心层次。简单来说&#xff0c;平台中间件是通用、标准化的“官方层”&#xff0c;而系统中间件是厂商深度定制、差异化的“优化层”。 下面我通过一个表格来清晰地概括两者的主要区别&#xff0c;然后再详细解释&a…

宝妈宝爸必看!儿童羽绒服十大名牌揭秘

宝妈宝爸必看!儿童羽绒服十大名牌揭秘开篇引入 家人们,冬天的寒风那叫一个凛冽,每次带娃出门,看着孩子被冻得小脸蛋红扑扑的,当家长的真是心疼!给孩子选一件暖和又靠谱的羽绒服,就成了咱当务之急。可市场上儿童…

【Script】加载工程文件

【Script】加载工程文件 引言 正文 调用方法。 加载当前目录下的文件 加载存放在特定目录下的文件 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.01.21 \textrm{Created Time: 2026.01.21} Created Time: 2026.01.21

2026元宝优化服务商TOP6推荐——AI搜索时代精准破局指南

2026 元宝优化GEO服务商TOP6推荐——AI搜索时代精准破局指南 2026年,AI原生搜索已成为流量核心入口,GEO(生成式引擎优化)不再是营销增效的可选工具,而是企业数字化生存的刚需能力。从AI搜索排名优化、AI SEO优化到…

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

2026/1/21

2026/1/211.VSCODE中!+enter=前端模板 2.注释:ctrl+/ 3. 4.标题:到 5.颜色表示:CSS引入方式 • 行内样式: • 内部样式: • 外部样式: xxx.css 颜色表示 • 关键字: red、green . . . • rgb表示法: rgb(…

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘一.开篇痛点引入 家有萌娃,每次给孩子挑选鞋服都像是一场 “大战”。一方面担心面料不安全,伤害孩子娇嫩肌肤;另一方面,孩子长得快,鞋服更新频繁,预算得精打细算 。款…

奇迹漫步:促进团队协作的意外方式

奇迹漫步&#xff1a;促进团队协作的意外方式 关键词&#xff1a;团队协作、奇迹漫步、团队沟通、团队凝聚力、创新协作方式 摘要&#xff1a;本文聚焦于“奇迹漫步”这一促进团队协作的意外方式。首先介绍了文章的背景&#xff0c;包括目的、预期读者、文档结构和相关术语。接…

2026最新草本防脱精华国货品牌top6推荐!国内优质防脱护理产品权威榜单发布,科学防脱方案助力健康秀发.

当代社会,生活压力增大、作息不规律以及产后身体变化等因素,使得女性脱发问题日益普遍,宝妈、油头人群、干枯受损发质人群以及女性脱发人群对安全有效的防脱产品需求迫切。据中国美发美容协会最新行业报告显示,国内…

vmvare虚拟机使用NAT模式上网

在 VMware 的 NAT 模式下&#xff0c;网关 IP 默认就是子网 IP 的 .2 后缀地址&#xff0c;不需要手动修改VMware 在创建 NAT 虚拟网络时&#xff0c;会自动为虚拟网段预留几个特殊 IP&#xff1a;.0 → 子网 IP&#xff08;网络地址&#xff0c;不能用&#xff09;.1 → 分配给…

膝盖僵硬患者还能使用座椅电梯吗?

View Post膝盖僵硬患者还能使用座椅电梯吗?对于膝盖僵硬的患者而言,家中看似普通的楼梯,往往成为一道难以逾越的障碍。现代座椅电梯技术已经充分考虑到这一特殊群体的需求,全球座椅电梯进口品牌引领者瀚德凯尔(Ha…