金仓数据库与 SQL Server 兼容性分析报告

一、引言
随着信息技术的不断发展,数据库作为信息系统的核心组件,其兼容性和稳定性对于保障业务连续性和数据安全性至关重要。金仓数据库作为国内领先的数据库产品与服务提供商,一直致力于提供高度兼容、稳定可靠的数据库解决方案。SQLServer 作为全球市场占有率排名第三的关系型数据库,在中国市场也有着极广泛的用户群。
本报告旨在分析金仓数据库与 SQL Server 的兼容性情况,为用户通过 KingbaseES 提供的全方位 SQLServer 替代方案,包括零修改的应用代码迁移方案,零停机的数据迁移方案,将 SQLServer 迁移至 KingbaseES 提供决策参考。
二、兼容性概述
SQL Server 作为一款成熟稳定的关系型数据库管理系统,在国内市场已经取得了普遍的应用与认可。其以卓越的性能、灵活的配置和广泛的应用场景赢得了众多企业和开发者的青睐。被广泛应用于企业资源计划(ERP)、客户关系管理(CRM)、金融、电商、医疗、教育等多个领域。作为数据库领域国家队,金仓数据库(KingbaseES)凭借其自主研发的技术实力和对市场需求的深刻理解,率先展开了对 SQL Server 的兼容性开发工作,并持续加大其开发与支持的力度,取得了显著成果。随着 KingbaseES 新版本的重磅发布,金仓数据库对 SQL Server 常用功能的兼容性更上一个台阶。
KingbaseES 不仅在产品架构上采用可插拔式的体系架构,支持灵活扩展和多种生态兼容,更在 SQL 语法、数据类型、存储过程、触发器等多个方面实现了对 SQL Server 的高度兼容。这种兼容性不仅体现在基本功能的覆盖上,更体现在对 SQL Server 特有功能和特性的深度兼容上,如 IDENTITY 用法、全局临时表和本地临时表的使用方式等。
当前,KingbaseES 对 SQLServer 的支持已从功能兼容阶段过渡到了强性能兼容、生态全面兼容阶段,真正做到了助力用户在迁移过程中对上层应用透明,实现低成本、低难度、低风险的平滑迁移。
三、兼容性具体表现
1. 兼容架构--灵活可扩展
KingbaseES 在产品架构上采用可插拔式的体系架构,可灵活扩展,兼容多种生态,兼容商业和开源的外部接口协议,能够支撑更多核心能力。
KingbaseES 支持通过控制参数“initdb-s”切换兼容模式,将数据库设置为兼容 SQL Server 模式,从而更好地满足用户的迁移需求.
2. 兼容广度--SQL Server 功能全面覆盖
KingbaseES 以内核兼容为基础,通过初始化参数控制,兼容 SQL Server 数据库,在该模式下支持 SQL Server 常用功能。
在最新版本的 KingbaseES 中,实现了对数据类型,操作符,函数,系统变量,SQL 语句,PLSQL 等方面的完备支持。新增兼容性相关功能覆盖全部功能领域中多达 200 多个功能点。包括数据类型的全面支持(基本数据类型,复杂数据类型以及 SQLServer 特殊数据类型等),系统函数,系统变量的全面覆盖(字符串处理,时间日期处理,SQL 语句执行状态、事务状态、会话状态获取等),SQL 语法及重要特殊子句的完整支持(TOP子句,多表联合DML语法,COMPUTE子句等),PLSQL 语法及功能的全面支持(异常处理,游标操作,动态语句执行,触发器全种类支持等),以及各杂项功能如中文信息处理支持,批处理语句支持,兼容 SQL Server 的跨库访问原生支持及事务处理的原生支持等。
具体总结如下:
1)SQL 语法与功能兼容性
数据类型兼容性:KingbaseES 除了兼容支持 SQL Server 中常用的数据类型如整数类型(INT, SMALLINT, TINYINT 等)、浮点数类型(FLOAT, REAL 等)、日期和时间类型(DATETIME, DATE, TIME 等)、字符串类型(CHAR, VARCHAR, TEXT 等)外,对于特殊数据类型,都进行了全面的支持:
如对于 TIMESTAMP 数据类型,已实现完全的业务功能通用。
针对 SQL Server 特色的 IDENTITY 用法,IDENTITY 数据类型功能也得到了完全兼容。
在数据的 DML 操作中,支持自增字段的 identity_insert 属性功能。
对于 XML 数据类型,KingbaseES 提供了丰富的 XML 数据处理能力,如 OPENXML、for XML path('')等,使得 XML 数据操作更加灵活和高效。
对于 JSON 数据类型,KingbaseES 提供了全面的支持。它不仅允许用户将复杂的结构化数据存储为 JSON 格式,还提供了丰富的 JSON 数据库处理函数和操作符,使用户能够方便地在数据库中查询、修改和处理 JSON 数据。
另外,KingbaseES 也支持用户自定义类型。KingbaseES 新增了对 SQL Server 特有的数据类型,bit,sql_variant, sysname 的全面支持,用户可延用 SQLServer 中这些特殊类型的定义,赋值和运算。
操作符兼容性:KingbaseES 支持 SQL Server 中的绝大部分操作符,如算术操作符、比较操作符、逻辑操作符等。在最新版本中新增了使字符串操作更加简单便捷的+拼接符,+=操作符等,使得 SQLServer 中丰富而又便捷的字符串操作功能都能无需修改而直接使用。
系统变量与函数兼容性:KingbaseES 兼容了 SQL Server 中的系统变量(如 ROWCOUNT、TRANCOUNT、NOCOUNT、SPID、FETCH_STATUS 等),这些系统变量与函数在 SQL Server 中用于获取有关 SQL 语句执行状态、事务状态、会话状态等信息,使得原有应用程序在迁移后能够正确获取数据库状态信息并执行相关操作。对于系统函数,KingbaseES 除了在常用函数上具有较高的兼容性,如日期和时间函数(如 GETDATE())、字符串函数(如 CONCAT(), SUBSTRING(),STUFF(),STR())、数学函数(如 ROUND(), ABS())等,对于特定函数也提供了全面的支持,如 IDENTITY()(用于生成自增 ID)、ISNUMERIC()(用于检查字符串是否可以转换为数字)等,以便用户能够在不修改代码的情况下将 SQL Server 应用程序迁移到金仓数据库。
SQL 语法及子句兼容性:KingbaseES 除了支持 SQL Server 基本的 WHERE 子句、ORDER BY 子句、GROUP BY 子句等,对特色功能如 TOP 子句,多表联合的 DML 语法(UPDATE 语句支持多表 JOIN),模式查询语句 WHERE 条件支持使用通配符*,COMPUTE 子句,ORDER BY 中的 OPTION()语法,FULL JOIN 语法,INNER HASH JOIN 语法等也提供了完整支持。
2)PLSQL 语法兼容性
在过程化语言的语法基础、数据、游标、动态 SQL、子程序、存储过程/函数、触发器等各方面,KingbaseES 常用语法的兼容度也大大得到提升,已接近 100%。
针对 SQL Server 数据库灵活的 PLSQL 语法功能,KingbaseES 设计并开发了语句拆分算法,实现了功能兼容。从基本的 IF...ELSE 和 GOTO 控制语句、WHILE 循环语句,到常规触发器语法、异常处理、内置函数、数据类型自定义语法、临时表(KingbaseES 兼容了 SQL Server 的全局临时表和本地临时表使用方式)、表变量语法,甚至是重要的事务和事务控制能力,以及存储过程和函数语法结构方面,KingbaseES 都提供了相应的支持。如实现存储过程 RETURN 返回值功能和函数返回表数据类型。因此,在 KingbaseES 中可以轻松编写与 SQL Server 类似的存储过程和触发器,使得原有业务逻辑可以在新数据库中继续执行。
3)接口与工具的兼容
在接口与工具方面,KingbaseES 进行了大量的优化和改进。它全面改进了与 SQL Server 等国外主流数据库产品在服务器、接口、工具等各组件中的兼容性,降低了现有应用移植和新应用开发的成本,同时也降低了数据库系统管理员和应用开发人员学习和使用 KingbaseES 的难度。
下面通过表格展现 SQLServer 兼容性功能点列表:

3. 兼容深度--数据库内核原生支持
KingbaseES 不但在语法,语义,高级特性,以及工具生态等方面实现了对 SQLServer 的全面兼容,而且从体系架构层面实现了与 SQLServer 的深度兼容。
在存储结构层面,KingbaseES 兼容 SQLServer 的页和盘区体系结构,实现了完备的大型行支持与行溢出处理,并支持多版本并发控制,多进程并发处理,行级数据回收等功能,从而高效地管理盘区分配和可用空间。
在逻辑结构层面,实现了与 SQLServer 完全一致的逻辑结构,全面兼容其实例与数据库的概念与使用方式,具体来说,KingbaseES 实现了与 SQLServer 完全一致的数据库概念,通过创建数据库和数据库中的对象并使用数据库,完全兼容了 SQLServer 的数据访问方式,从而可对一个或多个(跨库)数据库中的对象进行访问与使用。
在进线程结构层面,KingbaseES 采用多进程架构,每个用户连接对应一个进程。KingbaseES 模拟并兼容 SQLServer 的 SQLOS 任务调度算法,仅运行任务的连接被分配线程,而空闲状态的连接不占用线程资源,从而大大降低数据库进程需要的线程数。对于每个 CPU,KingbaseES 内部有一个 scheduler,由它决定在某个时间点运行哪个数据库线程。即在操作系统层面,每个 CPU 只将对应一个处于运行状态的线程,从而大大降低了操作系统层面的上下文切换。
在查询处理体系结构层面,KingbaseES 兼容 SQLServer 的查询处理体系结构,可处理对多种数据存储体系结构(例如,本地表、已分区表以及分布在多个服务器上的表)执行的查询,支持行模式执行与批模式执行,支持基于规则与基于代价的优化方式,支持执行计划缓存,并行处理,分区剪枝功能等。
在事务处理机制层面,KingbaseES 兼容 SQLServer 的事务日志逻辑体系结构与物理体系结构,全面支持 SQLServer 的事务控制机制及事务处理模式。
可以看到,KingbaseES 从体系结构层面对 SQLServer 进行深度兼容,从而实现了对数据库内核的原生支持。
四、兼容性亮点分析
在这些全面而细致的兼容特性中,有几个重要的亮点功能值得提出来并进行更详细地阐述。
1)SQLServer 的事务处理机制
SQLServer 的事务运行模式包括自动提交事务,显示事务与隐式事务模式。
在最新的版本中,KingbaseES 在 SQL 层与 PLSQL 层的事务处理模式与 SQLServer 进行了完全兼容。用户可通过 implicit_transactions 参数设置并控制这 3 种事务模式。全面兼容支持 SQLServer 的事务控制全局变量 @@TRANCOUNT,事务控制函数 XACT——STATE(),CURRENT_TRASACTION_ID(), CURSOR_CLOSE_ON_COMMIT(),事务处理语句包括 BEGIN TRAN, BEGIN TRANSACTION, BEGIN TRAN tran_SOF_getmaxdjbh, END TRAN, END TRANSACTION, END TRAN tran_getmaxdjbh,COMMIT,ROLLBACK,SAVE 等,以及嵌套事务。从而实现了事务管理中事务隔离级别,事务开始,事务提交,事务回滚,事务保存点功能等事务处理模式与 SQLServer 事务处理模式的原生兼容。
2)SQLServer 的批处理功能
批处理语句 GO 是 SQLServer 的一个强大的工具。它可以帮助用户更好地组织和管理 SQL 脚本,提高脚本的可读性和可维护性,并增强错误处理和事务管理的能力以及执行效率。GO 命令可以将 SQL 脚本中的语句分隔成多个逻辑上的批处理,允许用户将相关的语句组合在一起作为一个逻辑单元来执行。由于每个 GO 命令之前的语句被视为一个独立的批处理,这种错误隔离的特性使得调试和修复问题变得更加容易。另外 GO 命令所带来的事务管理能力有助于确保数据的完整性和一致性。而通过在 GO 命令后指定一个数字,可以重复执行前面的批处理语句指定的次数。这对于需要多次执行相同操作的场景非常有用。
SQLServer 中,单个批处理语句集合会被编译为单一的执行计划被系统缓存,当再次执行时无需重新编译,从而极大地提升了 SQL 语句集的执行效率。
在 KingbaseES 的最新版本中,实现了对批处理命令 GO 语句的全面支持。无论是通过客户端工具(ksql,kstudio),还是从客户端编程接口,用户均可以在 SQL 层以及 PLSQL 层通过 GO 命令,对单条或多条 SQL 语句在数据库服务器端完成批量执行,从而继续享受 GO 命令带来的巨大便利与效率提升了。
3)SQLServer 语句缺失分号
SQLServer 支持 sql 语句之间无分号分隔符。在 SQL Server Management Studio (SSMS) 中,默认情况下,用户可以在一个查询窗口中输入多个不带分号的 SQL 语句,并且可以一次执行这些语句。对于这种看似奇怪的“特性”,KingbaseES 也在最新版本中实现了支持。从此 SQLServer 的金仓用户们可以无压力地延续他们方便轻松的书写风格,而不用改变自己书写的习惯了。
五、迁移典型场景与案例总结
KingbaseES 已在医疗、海关、政务等领域打造了一系列替代 SQL Server 的典型案例。
在医疗领域,金仓与上百家医疗厂商进行生态性兼容,与数十家核心厂商做了深度定制化开发的兼容认证。并服务全国各地的卫健委、医保局及全国省市县各大医院,满足用户对数据全生命周期管控的需求,稳定地支撑智慧医院、智慧医保、医共体、城市健康云等应用系统的建设。
当前,已有多个医院上线 KingbaseES 替代原有 SQLServer,完整全面适配其核心业务系统。如青岛医院,上海瑞金医院,汕头中心医院,四川牛岩医院,宝坻医院等。其中,卫宁健康项目,通过 KingbaseES 智能便捷的数据迁移工具以及对 SQL Server 的高度兼容技术,中电科金仓已适配了卫宁基于 SQLServer 数据系统 80 多万行代码,其中部分系统存储过程超过 4000 个,完整适配了电子病历、影像系统、病案管理等 20 多套主要业务系统,实现了数据的无缝对接和应用的平滑过渡,加速卫宁医疗健康卫生信息化的自主可控进程!
后续,福建肿瘤医院,望海康信,东莞 6 医院以及桑河水电站等机构也将陆续开启 KingbaseES 的全面上线。
六、总结与展望
通过前述兼容性剖析与案例展示,我们看到,金仓数据库与 SQL Server 在兼容性方面表现优异,其 SQLServer 的兼容性已跃上了一个新台阶,从功能层面转向了性能和生态全面兼容的阶段。辅以工具的支持,用户可使用金仓数据迁移评估系统 KDMS 完成大规模 SQLServer 数据库迁移评估和智能转换,使用一键迁移工具 KDTS,完成 SQLServer 全系列版本的一键迁移,从而低难度、低成本、低风险,平滑(三低一平)地实现国产数据库迁移。
在不远的将来,随着技术的不断进步和市场需求的不断变化,金仓将继续加大在兼容性方面的研发力度,加强在企业级能力国产化方面的各项举措,为用户提供更加完善、高效的数据库服务,为我国数字化转型和国产化进程做出贡献!
版权声明: 本文为 InfoQ 作者【金仓技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/54024786d1f1c716ec699dd13】。文章转载请联系作者。
评论