從 SQL Server 到 KingbaseES V9R4C12,一次“無痛”遷移與深度兼容體驗實錄

#數據庫平替用金倉 #金倉產品體驗官

摘要:本文以體驗項目案例為主線,從下載安裝、數據類型、T-SQL、JDBC、性能基準、踩坑回退六大維度,全景驗證 KingbaseES V9R4C12 對 SQL Server 的“零改造”兼容承諾;并給出 TPCH 100G 性能對比與灰度割接方案,為信創替換提供可復制的落地指南。

目錄

一、為什么要“平替”

二、30 分鐘完成部署

2.1 下載與安裝

2.2?金倉數據庫開發工縣KStudio

2.3?創建兼容庫(Linux系統)

三、兼容性全景測試

3.1 特殊數據類型“一把梭”

3.2 語法糖:NOWAIT、SKIP LOCKED、FOR XML、TOP

3.2.1 行級鎖行為

3.2.2 FOR XML

3.2.3 TOP 子句

3.3 存儲過程與 T-SQL 細節

3.3.1 批處理 GO、PRINT、RAISERROR

3.3.2 “最后一個字段可加逗號”

3.4 JDBC 兼容測試

四、性能對比:TPCH 100G

4.1 硬件規格

4.2 測試方法

4.3 結果摘要(單位:秒)

五、踩坑與填坑

5.1 “IDENTITY_INSERT” 行為差異

5.2 全文索引

5.3 鏈接服務器

六、割接方案與回退策略

七、寫在最后


一、為什么要“平替”

過去十年,我們團隊的核心業務一直跑在 SQL Server 2016/2019 雙節點 AlwaysOn 集群上。隨著國央企信創節奏加快,繼續留在 Windows + SQL Server 技術棧不僅面臨合規風險,License 費用也逐年攀升。經過多輪 PoC,我們把目光鎖定在 KingbaseES V9R4C12(SQL Server 兼容版)——官方宣稱“數據庫平替用金倉”,推出低風險遷移方案,這些對背負 2000+ 存儲過程、300+ 鏈接服務器的系統來說,誘惑力極大。

本文記錄了一次“從下載到上線”的完整旅程:

1.部署安裝

2.兼容性驗證(數據類型、T-SQL、接口、工具鏈)

3.性能對比

4.踩坑與填坑

5上線割接方案


二、30 分鐘完成部署

2.1 下載與安裝

金倉官網下載:https://www.kingbase.com.cn/download.html#database

(1)Windows下載與安裝:

本文主要針對Windows系統進行體驗測試,分享給大家一起交流學習!打開上面金倉官網地址,然后篩選?V9R4C12(SQLServer兼容版),如下圖所示

然后選擇 X64_Windows(如下圖所示)

下面就開始下載,下載完成虎雙擊打開文件(如下圖所示)

然后會自動跳轉到下面這個驅動器,點擊KINGBSASE.EXE然后開始安裝(如下圖所示)

接下來就來到安裝程序圖,如下圖所示,點擊下一步

1.簡介,點擊接受然后下一步(如下圖)

2.許可協議,新手建議完全安裝(如下圖所示)

3.選擇安裝集,選擇想要安裝的位置,如下圖我選擇安裝在E盤上

4.選擇安裝文件夾,安裝(如下圖所示)

5.預安裝摘要、添加功能、選擇安裝集,系統自動安裝,如下圖所示:

6.正在安裝,選擇一個文件夾,用于存儲數據的,改文件夾必須為空(如下圖所示)

7.選擇文件夾,數據庫默認端口號:54321,用戶名:system,然后輸入對應的密碼(如下圖)

到這里就完成了Windows數據庫的初始化工作!

(2)Linux下載與安裝:

官方下載頁提供了 Linux x86_64 一鍵 tar 包Windows GUI 安裝向導。如下圖所示,點擊下載

下載后如下圖所示,通過ftp方式上傳到Linux服務器上進行安裝

?

# 1. 創建 kingbase 用戶
useradd kingbase && echo 'kingbase ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers# 2. 解壓
tar -xzf kingbasees_v9r4c12_linux_x64.tar.gz -C /opt
chown -R kingbase:kingbase /opt/kingbase# 3. 初始化實例
su - kingbase
/opt/kingbase/install/initdb -D /data/kingbase -E UTF8 --locale=zh_CN.UTF-8
/opt/kingbase/install/kingbase -D /data/kingbase > kingbase.log 2>&1 &

2.2?金倉數據庫開發工縣KStudio

打開剛才安裝的工具Kstudio,如下圖所示

新建連接,注意密碼是剛才上面安裝設置的密碼,我這里剛才設置是:qwertyuiop123456

點擊測試連接,提示連接成功,如下圖:

?

(1)新建數據庫

CREATE DATABASE [xiaoxiang] WITH OWNER = [system] ENCODING 'UTF8' TEMPLATE [template1]TABLESPACE = [sys_default]lc_collate = 'zh_CN.UTF-8'lc_ctype = 'zh_CN.UTF-8'connection_limit = -1allow_connections = TRUEis_template = FALSE;ALTER DATABASE [xiaoxiang] COLLATE Chinese_PRC_CI_AI;

?(2)新增表

CREATE TABLE [public].[title] ([id] integer IDENTITY(1,1) NOT NULL,[title] varchar(128),[description] varchar(512)
);ALTER TABLE [public].[title] SET
TABLESPACE [sys_default];

(3)插入數據庫,可以手動寫sql,也可以界面操作,非常方便

INSERT INTO [public].[title]
([id], [title], [description])
VALUES(2, '電科金倉2025發布會', '電科金倉2025.07.15在北京舉行發布會');

(4)修改表數據

UPDATE [public].[title]
SET [id]=2, [title]='電科金倉2025發布會-通知2', [description]='電科金倉2025.07.15在北京舉行發布會2';

(5)刪除表數據

?

DELETE FROM [public].[title]
WHERE [id]=2 AND [title]='電科金倉2025發布會-通知2' AND [description]='電科金倉2025.07.15在北京舉行發布會2';

?

2.3?創建兼容庫(Linux系統)

KingbaseES 可以同時創建 Oracle 模式PostgreSQL 模式SQL Server 模式 三種庫。這里指定:

-- 通過 ksql 連接
CREATE DATABASE ss_app DBCOMPATIBILITY='mssql';
\c ss_app

注:DBCOMPATIBILITY 參數只能在建庫時指定,后續不可修改。


三、兼容性全景測試

3.1 特殊數據類型“一把梭”

SQL Server 的 ROWVERSION/TIMESTAMP、SQL_VARIANT、UNIQUEIDENTIFIER、SYSNAME 在 KingbaseES 中都有直接映射,測試腳本如下:

-- 1. ROWVERSION
CREATE TABLE t1 (id INT PRIMARY KEY,rv ROWVERSION
);-- 插入測試
INSERT INTO t1(id) VALUES (1),(2);
SELECT * FROM t1;
-- rv 字段自動遞增,行為與 SQL Server 完全一致-- 2. SQL_VARIANT
CREATE TABLE t2 (v SQL_VARIANT
);
INSERT INTO t2 VALUES (123), ('abc'), (GETDATE());
SELECT v, SQL_VARIANT_PROPERTY(v,'BaseType') AS BaseType FROM t2;-- 3. UNIQUEIDENTIFIER & NEWSEQUENTIALID()
CREATE TABLE t3 (gid UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY,name SYSNAME
);
INSERT INTO t3(name) VALUES ('體驗官');
SELECT * FROM t3;

結論:所有類型均可直接替換,無需改寫。

3.2 語法糖:NOWAIT、SKIP LOCKED、FOR XML、TOP

3.2.1 行級鎖行為
-- 會話 A
BEGIN TRAN;
UPDATE t1 SET id = id WHERE id = 1;-- 會話 B
SELECT * FROM t1 WHERE id = 1 NOWAIT;   -- 立即報錯
SELECT * FROM t1 WHERE id = 1 SKIP LOCKED; -- 跳過被鎖行
3.2.2 FOR XML
SELECT * FROM t3 FOR XML RAW, ROOT('root');

KingbaseES 支持 RAW、AUTO、EXPLICIT、PATH 四種模式,輸出與 SQL Server Management Studio 結果一致。

3.2.3 TOP 子句
SELECT TOP (3) WITH TIES * FROM t2 ORDER BY v;

WITH TIES 也支持,驚喜。

3.3 存儲過程與 T-SQL 細節

3.3.1 批處理 GO、PRINT、RAISERROR
PRINT N'開始同步...';BEGIN TRYINSERT INTO t1(id) VALUES (1/0);
END TRY
BEGIN CATCHRAISERROR('同步失敗:%s', 16, 1, ERROR_MESSAGE());
END CATCH;
GO -- 批處理分隔符
PRINT '完成';

注意點:

  • RAISERROR 語法完全一致,支持 WITH NOWAIT

  • THROW 同樣可用,與 SQL Server 2012+ 行為一致。

3.3.2 “最后一個字段可加逗號”
CREATE TABLE t4 (a INT,b INT,   -- 這里多了個逗號
);

KingbaseES 不會報錯,對老系統極其友好。

3.4 JDBC 兼容測試

我們原來的 Spring Boot + MyBatis 項目,連接串從

jdbc:sqlserver://...

改成

jdbc:kingbase8://...?compatibleMode=mssql

即可,無一行 Java 代碼改動

驗證五種存儲過程場景:

  1. 無參數

  2. IN 參數

  3. OUT 參數

  4. 返回值

  5. 更新計數

全部通過單元測試,MyBatis XML 中的 statementType="CALLABLE" 無需調整。


四、性能對比:TPCH 100G

4.1 硬件規格

  • 2 × Intel 6230R 26C52T

  • 512 GB DDR4

  • NVMe SSD 3.2 TB RAID0

  • CentOS 7.9 + 關閉 NUMA

4.2 測試方法

  • SQL Server 2019 企業版(無補丁)

  • KingbaseES V9R4C12(mssql 模式)

  • TPCH 100G 數據,表結構、索引腳本完全一致

4.3 結果摘要(單位:秒)

QuerySQL ServerKingbaseES差異
Q128.426.9-5%
Q542.144.3+5%
Q9118.7115.2-3%
Q21210.9205.4-3%

結論:兩者互有勝負,整體差距在 ±5% 以內,可視為同一梯隊。


五、踩坑與填坑

5.1 “IDENTITY_INSERT” 行為差異

KingbaseES 支持 SET IDENTITY_INSERT ON,但作用域僅限當前會話,事務提交后仍保持 ON,而 SQL Server 會自動 OFF。
解決:在存儲過程末尾顯式 SET IDENTITY_INSERT OFF

5.2 全文索引

SQL Server 的 CONTAINS/CONTAINSTABLE 默認啟用;KingbaseES 需安裝 kdb_text 擴展并手動創建詞典。
解決

CREATE EXTENSION kdb_text;
-- 創建中文分詞配置

5.3 鏈接服務器

KingbaseES 提供 kdb_database_link 擴展,可連接 SQL Server、Oracle、MySQL。

CREATE EXTENSION kdb_database_link;
SELECT dblink_connect('conn', 'sqlserver://user:pwd@host:1433/db');

實測分布式查詢性能損耗 <10%,已用于 ETL。


六、割接方案與回退策略

階段動作時間窗口回退方案
全量遷移使用 SSDT + Kingbase Migration Toolkit4 h原 SQL Server 只讀
增量同步基于 CDC + Debezium 實時同步持續一鍵切換回 DNS
灰度驗證20% 流量到 KingbaseES1 周流量權重回退
全量切換100% 流量0.5 h回滾 DNS + 連接池


七、寫在最后

如果你也在尋找一條 低成本、低風險、周期短 的 SQL Server 信創路線,KingbaseES V9R4C12 值得認真評估。它并不是“閹割版”兼容,而是把 SQL Server 常用語法、類型、接口、工具鏈幾乎 1:1 還原,性能也能打平。

10 個關鍵字解說:

  1. KingbaseES:人大金倉企業級關系型數據庫,本文體驗版本 V9R4C12。

  2. SQL Server兼容版:KingbaseES 專用模式,語法、類型、接口與 SQL Server 對齊。

  3. DBCOMPATIBILITY:建庫參數,設置 mssql 即啟用兼容模式。

  4. ROWVERSION:SQL Server 時間戳類型,KingbaseES 原生支持并自動維護。

  5. FOR XML:SQL Server 結果集轉 XML 語法,KingbaseES 支持 RAW/AUTO/PATH 四種。

  6. RAISERROR:T-SQL 錯誤處理語句,兼容 SQL Server 級別與 NOWAIT 選項。

  7. kdb_database_link:金倉插件,實現跨庫、跨異構實例的聯邦查詢。

  8. NEWSEQUENTIALID:生成順序 GUID 的函數,遷移后無需改寫主鍵策略。

  9. TPCH 100G:標準化決策支持基準,用于性能橫向對比。

  10. 灰度割接:按權重逐步切換流量、零回滾窗口的上線策略。

本文相關鏈接推薦:

1、【金倉數據庫征文】政府項目數據庫遷移:從MySQL 5.7到KingbaseES的蛻變之路

2、【金倉數據庫征文】學校AI數字人:從Sql Server到KingbaseES的數據庫轉型之路

3、電科金倉2025發布會,國產數據庫的AI融合進化與智領未來

4、國產數據庫逆襲:老鄧的“六大不敢替”被金倉逐一破解

5、《一行代碼不改動!用KES V9 2025完成SQL Server → 金倉“平替”遷移并啟用向量檢索》

6、《赤兔引擎×的盧智能體:電科金倉如何用“三駿架構”重塑AI原生數據庫一體機》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916646.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916646.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916646.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EasyPlayer播放器系列開發計劃2025

EasyPlayer系列產品發展至今&#xff0c;已經超過10年&#xff0c;從最早的EasyPlayer RTSP播放器&#xff0c;到如今維護的3條線&#xff1a;EasyPlayer-RTSP播放器&#xff1a;Windows、Android、iOS&#xff1b;EasyPlayerPro播放器&#xff1a;Windows、Android、iOS&#…

通信名詞解釋:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus等

以下內容參考AI生成內容1. I2C&#xff08;Inter-Integrated Circuit&#xff0c;集成電路間總線&#xff09;定義&#xff1a;由飛利浦&#xff08;現恩智浦&#xff09;開發的短距離串行通信總線&#xff0c;用于芯片級設備間的低速數據傳輸。工作原理&#xff1a;采用兩根信…

bash的特性-常見的快捷鍵

一、前言在 Linux Shell 編程和日常使用中&#xff0c;Bash 快捷鍵 是提升命令行操作效率的利器。熟練掌握這些快捷鍵&#xff0c;不僅可以節省大量輸入時間&#xff0c;還能顯著提升你在終端環境下的操作流暢度。本文將帶你全面了解 Bash 中常用的快捷鍵&#xff0c;包括&…

【Java Web實戰】從零到一打造企業級網上購書網站系統 | 完整開發實錄(三)

&#x1f3a8; 核心功能設計 &#x1f464; 用戶管理系統 用戶管理是整個系統的基礎&#xff0c;我設計了完整的用戶生命周期管理&#xff1a; &#x1f510; 用戶注冊流程 #mermaid-svg-D0eUHWissjNhkqlB {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…

uniapp input 聚焦時鍵盤彈起滾動到對應的部分

實現效果代碼如下<template><view idapp><view class"aa"></view><iconfont name"left"></iconfont>姓氏&#xff1a;<input style"background-color: antiquewhite;" type"text" v-model&quo…

【基礎篇三】WebSocket:實時通信的革命

目錄 一、傳統HTTP的"痛點"分析 1.1 HTTP的單向通信模式 1.2 "實時"效果的痛苦嘗試 ?編輯 1.3 性能對比分析 二、WebSocket 協議詳解 2.1 WebSocket是什么&#xff1f; ?編輯 2.2 WebSocket的核心特性 2.2.1 全雙工通信&#xff08;Full-Duple…

設計模式(十八)行為型:中介者模式詳解

設計模式&#xff08;十八&#xff09;行為型&#xff1a;中介者模式詳解中介者模式&#xff08;Mediator Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于通過引入一個中介者對象來封裝一組對象之間的交互&#xff0c;從而降低對象間的…

Upload-Labs通關全攻略詳細版

前端校驗繞過:pass 01 兩種思路:1.通過抓包,修改后綴 2.前端禁用js繞過前端后綴檢驗 首先寫一個木馬,改為圖片格式GIF89a<?php eval($_POST[cmd])?>抓包之后改為PHP格式: 使用蟻劍連接木馬,第一次嘗試一直是返回數據為空,原因是沒有鏈接到木馬,于是尋找木馬地址…

C#觀察者模式示例代碼

using System; using System.Collections.Generic; using System.Threading;namespace RefactoringGuru.DesignPatterns.Observer.Conceptual {// Observer觀察者 也可以叫做訂閱者 subscriberspublic interface IObserver{// Receive update from subject// 接收來自主題的更新…

電子電子架構 --- 軟件項目的開端:裁剪

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

Open CV圖像基本操作可莉版

Open CV圖像基本操作一、處理單個像素值訪問像素值修改像素值二、處理單個ROI區域&#xff08;自選區域&#xff09;提取 ROI修改 ROI三、 處理圖像通道通道分離通道合并四、處理整體圖像縮放圖像旋轉圖像平移圖像翻轉一、處理單個像素值 圖像是由像素組成的矩陣&#xff0c;每…

k8s:將打包好的 Kubernetes 集群鏡像推送到Harbor私有鏡像倉庫

本文介紹了在離線環境中部署Harbor鏡像倉庫的完整流程。首先通過腳本創建多個Harbor項目&#xff0c;然后使用KubeKey工具將預打包的Kubernetes鏡像(kubesphere.tar.gz)推送到Harbor倉庫。接著配置containerd以支持從私有倉庫拉取鏡像&#xff0c;包括設置TLS證書和鏡像倉庫端點…

IntelliJ IDEA中管理多版本Git子模塊的完整指南

1.背景介紹項目是父子工程。父工程XXX-ZZZ-CCC。子模塊XXX-api在線上git網站管理,有多個分支版本。現在需要接收別人代碼&#xff0c;導入到本機管理。可以實現本機切換&#xff0c;修改&#xff0c;上傳。2.創建本地倉庫并拉取所有版本2.1.創建目錄在D:\ideaworkspace\midend-…

Android ADB命令之內存統計與分析

一、核心命令總覽工具 / 命令用途示例adb shell dumpsys meminfo查看設備全局內存狀態adb shell dumpsys meminfoadb shell dumpsys meminfo <package>獲取應用詳細內存分類統計adb shell dumpsys meminfo com.example.appadb shell top動態查看進程內存和 CPU 占用adb s…

算法思維進階 力扣 300.最長遞增子序列 暴力搜索 記憶化搜索 DFS 動態規劃 C++詳細算法解析 每日一題

目錄零、題目描述一、為什么這道題值得你深入理解&#xff1f;二、題目拆解&#xff1a;提取核心關鍵點三、明確思路&#xff1a;從暴力到優化的完整進化3. 進一步優化&#xff1a;動態規劃&#xff08;自底向上遞推&#xff09;4. 終極優化&#xff1a;貪心 二分查找&#xf…

圖解網絡-小林coding筆記(持續更新)

大綱 #mermaid-svg-trl6Q4B1uDO1z05w {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-trl6Q4B1uDO1z05w .error-icon{fill:#552222;}#mermaid-svg-trl6Q4B1uDO1z05w .error-text{fill:#552222;stroke:#552222;}#merm…

安寶特案例丨AR+AI+SOP?3大技術融合革新軍工航天領域

軍工、航空、航天領域存在 “小批量、多品種、依賴人工經驗裝配”的特性&#xff0c;這長期制約著生產效率與產品質量的提升。 技術融合應用案例 1 Arbigtec 裝配效率提升類&#xff1a; 某型導彈制導系統裝配&#xff1a;采用 AR 眼鏡與 AI 視覺引導系統&#xff0c;200 精…

ip link show 查看/配置網絡接口

ip link show&#xff08;或簡寫為 ip link&#xff09;是 Linux 系統中用于查看和配置網絡接口&#xff08;網卡、虛擬接口等&#xff09;的命令&#xff0c;屬于 iproute2 工具集的一部分。它是現代 Linux 系統中替代傳統 ifconfig 命令的更強大工具。命令詳解 基本語法 ip l…

電科金倉新一代數據庫一體機:以 “云數據庫 - AI 版” 引領 AI 時代數據庫變革

前言 AI時代的數據庫一體機市場&#xff0c;只能用兩個詞來形容&#xff1a;高手云集&#xff0c;戰況激烈&#xff01; 國際巨頭仍在高端市場占據主導地位&#xff0c;但在國產替代的沖擊下&#xff0c;也開始另尋突破口&#xff1b;國內科技大廠攻勢迅猛&#xff0c;通過開源…

IT運維的365天--033 跨交換機部署沒有單獨供電口的愛快AP到另一個地方去

前情提要&#xff1a;由于工作需要&#xff0c;領導要求在車間也添加一個無線網絡供員工和設備使用&#xff0c;之前公司已經有一個愛快網絡供員工使用&#xff0c;且物理隔絕部署在集團辦公樓這邊了。我一向是不喜歡碰到一個小事就拉一條網線&#xff0c;那樣不得搞的跟蜘蛛網…