暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

金仓 KingbaseES v9(SQL Server 兼容版)初体验

原创 jiayou 2025-07-23
953

一、前言

Microsoft SQL Server 是由微软公司开发的企业级关系型数据库管理系统(RDBMS)。其核心功能是为企业级应用提供高性能、可靠的数据存储与管理服务,支持从单机到分布式集群的多种部署场景,并深度集成微软技术生态(如Windows Server、Azure、.NET等)。

金仓数据库(KingbaseES)自2025年推出SQLServer兼容版以来,通过持续迭代优化,已实现从功能兼容到性能生态全面兼容的跨越。其核心特性如下:

  1. 功能兼容性深化
    • 语法与对象支持:全面兼容SQL Server的T-SQL语法(如存储过程、触发器、临时表)、系统表(如sys.objects)、内置函数(如IDENTITY()、GETDATE())及数据类型(如TIMESTAMP、NVARCHAR),兼容常用功能覆盖99%以上。
    • 事务与锁机制:支持SQL Server的事务模式(自动提交、显式事务)及全局变量(如@@TRANCOUNT),并实现嵌套事务的完整兼容。
  2. 性能优化与架构适配
    • 查询优化器增强:针对复杂查询(如多表联合、嵌套循环)进行执行计划优化,提升OLTP场景吞吐量,实测在国产芯片环境下TPC-C性能达230万tpmC。
    • 存储引擎改进:采用可插拔架构,支持与SQL Server一致的存储结构(如行存储与列存储混合模式),适配国产CPU(鲲鹏、龙芯)及操作系统(麒麟、统信UOS)。
  3. 工具链生态完善
    • 迁移工具:提供KDTS一键迁移工具,支持全量/增量数据迁移、SQL代码智能转换(每分钟处理20万行代码),并生成迁移报告辅助验证。
    • 管理工具:集成KStudio数据库管理平台,支持PL/SQL调试、数据对比、审计日志分析等全生命周期管理

备注:本文通过最新 kingbaseES(SQL Server 兼容版)V9R4C12为例演示。

二、金仓数据库安装与配置

1、环境准备:

KES支持包括Window、linux、统信、麒麟、欧拉等大部分操作系统平台,本文已Linux系统为例部署KES。

1.创建kingbase 用户

root # adduser kingbase

root # echo kingbase | passwd --stdin kingbase

2.创建相关目录并授权

root # mkdir -p /opt/Kingbase/ES/V9 /install

root # mkdir /opt/Kingbase/ES/V9/data

root # chown -R kingbase:kingbase /opt/Kingbase

root # chmod -R 775 /opt/Kingbase

root # chmod -R 700 /opt/Kingbase/ES/V9/data

上传安装包和授权文件到/install目录中

执行linux操作系统优化/install/optimize_system_conf.sh

执行/install/kb_scripts/kb_install/optimize_database_conf.sh

3.配置kingbase用户环境变量

kingbase> vi ~/.bash_profile

--------------------input------------------------------

export KINGBASE_HOME= /opt/Kingbase/ES/V9/Server

export KINGBASE_DATA= /opt/Kingbase/ES/V9/data

export PATH=$PATH: /opt/Kingbase/ES/V9/Server/bin

export KINGBASE_PORT=54321

kingbase> source .bash_profile

4.上传数据库介质及授权文件

可以登录官网下载对应数据库版本介质:https://www.kingbase.com.cn/download.html,此外官方提供90天企业版授权文件供测试使用。将相关文件上传并赋权。

5.系统参数设置

--调整并查看flysync用户的最大文件句柄数为65535、允许创建的最大进程数量为8096

root # vi /etc/security/limits.conf

--------------------input------------------------------

kingbase - nofile 65535

kingbase - nproc 8096

--hosts文件配置增加主机解析条目

root # vi /etc/hosts

--------------------input------------------------------

192.168.126.110 adminnode

2、安装过程:

使用kingbase 用户进行V9产品安装

#挂载KES数据库镜像文件

kingbase> cd /mnt/

kingbase> sh setup.sh

Now launch installer...

Preparing to install

Extracting the JRE from the installer archive...

Unpacking the JRE...

Extracting the installation resources from the installer archive...

Configuring the installer for this system's environment...

Verifying JVM........

Launching installer...

Complete.

#执行setup.sh命令进入图形化交互式安装界面进行安装

下一步,选择相应版本的许可文件。

提示完成KES 安装。如果需要数据库随系统自启动执行如下脚本,完成KES服务注册。

root # /opt/Kingbase/ES/V9/install/script/root.sh

3、启动数据库

Kingbase> sys_ctl start

starting KingbaseES V009R004C012

done
server started

4、连接数据库

可以通过金仓客户端开发工具KStudio连接数据库,也可以使用ksql命令行工具连接数据库。

1.KStudio 连接数据库

#进入ClientTools/guitools/KStudio目录打开KStudio程序

2.ksql 命令行工具连接数据库

Kingbase> ksql test system

#查看当前版本

# select version();

#查看数据库兼容模式

# show database_mode;

#查看默认数据库信息

# \l

KingbaseES初始化创建数据库集簇时,会创建两个模板数据库:TEMPLATE0 和 TEMPLATE1,用户数据库kingbase和test,以及存放系统安全信息的数据库security。

SQL Server 兼容版额外创建数据库master、resource以及tempdb。

master—系统元数据中心:
• 存储数据库文件路径、登录账号、系统配置等全局元数据
• 执行 CREATE DATABASE 等操作必须在此库操作

resource--只读系统资源库:
• 存储系统对象(如内置函数、系统视图的定义)
• 禁止用户直接修改,通过 KingbaseES 升级包更新

tempdb--临时工作区:

• 存储临时对象(临时表、表变量)、排序/哈希操作中间数据。每次重启都会重建。

三、KingBase SqlServer兼容版简单测试

1、创建测试案例

#创建测试数据库

#创建schema

#\c job_test

2、 特殊数据类型与对象

测试项:ROWVERSION、SQL_VARIANT、UNIQUEIDENTIFIER、SYSNAME、表变量

-- 1.1 ROWVERSION 类型(自动更新版本号)

CREATE TABLE test_rowversion (

id INT PRIMARY KEY,

data VARCHAR(20),

version ROWVERSION

);

INSERT INTO test_rowversion (id, data) VALUES (1, 'Initial');

UPDATE test_rowversion SET data = 'Updated' WHERE id = 1;

-- 验证 version 字段是否自动更新

SELECT * FROM test_rowversion;

id | data | version

----+---------+--------------------

1 | Updated | 0x0000000000000004

(1 row)

-- 1.2 SQL_VARIANT 类型(存储多类型数据)

CREATE TABLE test_sqlvariant (

id INT,

var_col SQL_VARIANT

);

INSERT INTO test_sqlvariant VALUES (1, 100);

INSERT INTO test_sqlvariant VALUES (2, 'Text');

INSERT INTO test_sqlvariant VALUES (3, GETDATE());

-- 验证数据类型识别

SELECT id, SQL_VARIANT_PROPERTY(var_col, 'BaseType') AS data_type FROM test_sqlvariant;

id | data_type

----+-----------

1 | int

2 | varchar

3 | datetime

(3 rows)

-- 1.3 UNIQUEIDENTIFIER 类型(GUID)与 ROWGUIDCOL 属性

CREATE TABLE test_guid (

id INT PRIMARY KEY,

guid_col UNIQUEIDENTIFIER DEFAULT NEWID() ROWGUIDCOL

);

INSERT INTO test_guid (id) VALUES (1);

-- 验证 ROWGUIDCOL 属性

SELECT * FROM test_guid;

id | guid_col

----+--------------------------------------

1 | 19F77709-2180-443F-9AD7-2F7F4FEFABD9

(1 row)

-- 1.4 SYSNAME 类型(系统对象名称)

# sysname 主要用于存储数据库对象(如表名、列名、视图名等)的名称,这些名称通常都是Unicode 字符串。

CREATE TABLE test_sysname (

obj_name SYSNAME

);

INSERT INTO test_sysname VALUES ('my_table');

-- 验证 SYSNAME

SELECT * FROM test_sysname;

obj_name

----------

my_table

(1 row)

-- 1.5 表变量

DECLARE @table_var TABLE (id INT, name VARCHAR(50));

INSERT INTO @table_var VALUES (1, 'Alice'), (2, 'Bob');

SELECT * FROM @table_var; -- 验证表变量数据查询 [2,7](@ref)

3、T-SQL兼容性测试

#创建包含SQL Server特有数据类型的测试表

CREATE TABLE t (

c_mon MONEY,

c_date1 DATETIME,

c_varb VARBINARY(10)

);

GO命令支持

INSERT INTO t VALUES (100.0, GETDATE(), 0x1A);

GO 10

SELECT * FROM t;

c_mon | c_date1 | c_varb

----------+-------------------------+--------

100.0000 | 2025-07-20 21:45:25.447 | 0x1A

100.0000 | 2025-07-20 21:45:25.447 | 0x1A

100.0000 | 2025-07-20 21:45:25.453 | 0x1A

100.0000 | 2025-07-20 21:45:25.457 | 0x1A

100.0000 | 2025-07-20 21:45:25.457 | 0x1A

100.0000 | 2025-07-20 21:45:25.470 | 0x1A

100.0000 | 2025-07-20 21:45:25.477 | 0x1A

100.0000 | 2025-07-20 21:45:25.477 | 0x1A

100.0000 | 2025-07-20 21:45:25.483 | 0x1A

100.0000 | 2025-07-20 21:45:25.487 | 0x1A

(10 rows)

成功分批次执行,无编译错误,执行计划缓存机制提升效率

事务控制与系统变量

SET implicit_transactions ON; -- 启用隐式事务

BEGIN TRAN;

UPDATE t SET c_mon = 200.0;

SELECT @@TRANCOUNT;

2 -- 返回当前事务计数

完全支持@@TRANCOUNT、XACT_STATE()等事务控制变量

四、总结

金仓数据库最新 SQL Server 兼容版本已实现常用功能的高度兼容。时间仓促未进行更多测试,感兴趣的小伙伴参考技术文档进行详细评估:https://bbs.kingbase.com.cn/documentGuide?recId=bf40609a9c064fe3593c2040d4d899c8

最后修改时间:2025-09-02 10:59:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论