一、前言
Microsoft SQL Server 是由微軟公司開(kāi)發(fā)的企業(yè)級(jí)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。其核心功能是為企業(yè)級(jí)應(yīng)用提供高性能、可靠的數(shù)據(jù)存儲(chǔ)與管理服務(wù),支持從單機(jī)到分布式集群的多種部署場(chǎng)景,并深度集成微軟技術(shù)生態(tài)(如Windows Server、Azure、.NET等)。
金倉(cāng)數(shù)據(jù)庫(kù)(KingbaseES)自2025年推出SQLServer兼容版以來(lái),通過(guò)持續(xù)迭代優(yōu)化,已實(shí)現(xiàn)從功能兼容到性能生態(tài)全面兼容的跨越。其核心特性如下:
- 功能兼容性深化
- 性能優(yōu)化與架構(gòu)適配
- 查詢優(yōu)化器增強(qiáng):針對(duì)復(fù)雜查詢(如多表聯(lián)合、嵌套循環(huán))進(jìn)行執(zhí)行計(jì)劃優(yōu)化,提升OLTP場(chǎng)景吞吐量,實(shí)測(cè)在國(guó)產(chǎn)芯片環(huán)境下TPC-C性能達(dá)230萬(wàn)tpmC。
- 存儲(chǔ)引擎改進(jìn):采用可插拔架構(gòu),支持與SQL Server一致的存儲(chǔ)結(jié)構(gòu)(如行存儲(chǔ)與列存儲(chǔ)混合模式),適配國(guó)產(chǎn)CPU(鯤鵬、龍芯)及操作系統(tǒng)(麒麟、統(tǒng)信UOS)。
- 工具鏈生態(tài)完善
- 遷移工具:提供KDTS一鍵遷移工具,支持全量/增量數(shù)據(jù)遷移、SQL代碼智能轉(zhuǎn)換(每分鐘處理20萬(wàn)行代碼),并生成遷移報(bào)告輔助驗(yàn)證。
- 管理工具:集成KStudio數(shù)據(jù)庫(kù)管理平臺(tái),支持PL/SQL調(diào)試、數(shù)據(jù)對(duì)比、審計(jì)日志分析等全生命周期管理
備注:本文通過(guò)最新 kingbaseES(SQL Server 兼容版)V9R4C12為例演示。
二、金倉(cāng)數(shù)據(jù)庫(kù)安裝與配置
1、環(huán)境準(zhǔn)備:
KES支持包括Window、linux、統(tǒng)信、麒麟、歐拉等大部分操作系統(tǒng)平臺(tái),本文已Linux系統(tǒng)為例部署KES。
1.創(chuàng)建kingbase 用戶
root # adduser kingbase
root # echo kingbase | passwd --stdin kingbase
2.創(chuàng)建相關(guān)目錄并授權(quán)
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
上傳安裝包和授權(quán)文件到/install目錄中
執(zhí)行l(wèi)inux操作系統(tǒng)優(yōu)化/install/optimize_system_conf.sh
執(zhí)行/install/kb_scripts/kb_install/optimize_database_conf.sh
3.配置kingbase用戶環(huán)境變量
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.上傳數(shù)據(jù)庫(kù)介質(zhì)及授權(quán)文件
可以登錄官網(wǎng)下載對(duì)應(yīng)數(shù)據(jù)庫(kù)版本介質(zhì):https://www.kingbase.com.cn/download.html,此外官方提供90天企業(yè)版授權(quán)文件供測(cè)試使用。將相關(guān)文件上傳并賦權(quán)。
5.系統(tǒng)參數(shù)設(shè)置
--調(diào)整并查看flysync用戶的最大文件句柄數(shù)為65535、允許創(chuàng)建的最大進(jìn)程數(shù)量為8096
root # vi /etc/security/limits.conf
--------------------input------------------------------
kingbase - nofile 65535
kingbase - nproc 8096
--hosts文件配置增加主機(jī)解析條目
root # vi /etc/hosts
--------------------input------------------------------
192.168.126.110 adminnode
2、安裝過(guò)程:
使用kingbase 用戶進(jìn)行V9產(chǎn)品安裝
#掛載KES數(shù)據(jù)庫(kù)鏡像文件
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.
#執(zhí)行setup.sh命令進(jìn)入圖形化交互式安裝界面進(jìn)行安裝
下一步,選擇相應(yīng)版本的許可文件。
提示完成KES 安裝。如果需要數(shù)據(jù)庫(kù)隨系統(tǒng)自啟動(dòng)執(zhí)行如下腳本,完成KES服務(wù)注冊(cè)。
root # /opt/Kingbase/ES/V9/install/script/root.sh
3、啟動(dòng)數(shù)據(jù)庫(kù)
Kingbase> sys_ctl start
starting KingbaseES V009R004C012
done
server started
4、連接數(shù)據(jù)庫(kù)
可以通過(guò)金倉(cāng)客戶端開(kāi)發(fā)工具KStudio連接數(shù)據(jù)庫(kù),也可以使用ksql命令行工具連接數(shù)據(jù)庫(kù)。
1.KStudio 連接數(shù)據(jù)庫(kù)
#進(jìn)入ClientTools/guitools/KStudio目錄打開(kāi)KStudio程序
2.ksql 命令行工具連接數(shù)據(jù)庫(kù)
Kingbase> ksql test system
#查看當(dāng)前版本
# select version();
#查看數(shù)據(jù)庫(kù)兼容模式
# show database_mode;
#查看默認(rèn)數(shù)據(jù)庫(kù)信息
# \l
KingbaseES初始化創(chuàng)建數(shù)據(jù)庫(kù)集簇時(shí),會(huì)創(chuàng)建兩個(gè)模板數(shù)據(jù)庫(kù):TEMPLATE0 和 TEMPLATE1,用戶數(shù)據(jù)庫(kù)kingbase和test,以及存放系統(tǒng)安全信息的數(shù)據(jù)庫(kù)security。
SQL Server 兼容版額外創(chuàng)建數(shù)據(jù)庫(kù)master、resource以及tempdb。
master—系統(tǒng)元數(shù)據(jù)中心:
? 存儲(chǔ)數(shù)據(jù)庫(kù)文件路徑、登錄賬號(hào)、系統(tǒng)配置等全局元數(shù)據(jù)
? 執(zhí)行 CREATE DATABASE 等操作必須在此庫(kù)操作
resource--只讀系統(tǒng)資源庫(kù):
? 存儲(chǔ)系統(tǒng)對(duì)象(如內(nèi)置函數(shù)、系統(tǒng)視圖的定義)
? 禁止用戶直接修改,通過(guò) KingbaseES 升級(jí)包更新
tempdb--臨時(shí)工作區(qū):
? 存儲(chǔ)臨時(shí)對(duì)象(臨時(shí)表、表變量)、排序/哈希操作中間數(shù)據(jù)。每次重啟都會(huì)重建。
三、KingBase SqlServer兼容版簡(jiǎn)單測(cè)試
1、創(chuàng)建測(cè)試案例
#創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)
#創(chuàng)建schema
#\c job_test
2、 特殊數(shù)據(jù)類型與對(duì)象
測(cè)試項(xiàng):ROWVERSION、SQL_VARIANT、UNIQUEIDENTIFIER、SYSNAME、表變量
-- 1.1 ROWVERSION 類型(自動(dòng)更新版本號(hào))
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;
-- 驗(yàn)證 version 字段是否自動(dòng)更新
SELECT * FROM test_rowversion;
id | data | version
----+---------+--------------------
1 | Updated | 0x0000000000000004
(1 row)
-- 1.2 SQL_VARIANT 類型(存儲(chǔ)多類型數(shù)據(jù))
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());
-- 驗(yàn)證數(shù)據(jù)類型識(shí)別
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);
-- 驗(yàn)證 ROWGUIDCOL 屬性
SELECT * FROM test_guid;
id | guid_col
----+--------------------------------------
1 | 19F77709-2180-443F-9AD7-2F7F4FEFABD9
(1 row)
-- 1.4 SYSNAME 類型(系統(tǒng)對(duì)象名稱)
# sysname 主要用于存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象(如表名、列名、視圖名等)的名稱,這些名稱通常都是Unicode 字符串。
CREATE TABLE test_sysname (
obj_name SYSNAME
);
INSERT INTO test_sysname VALUES ('my_table');
-- 驗(yàn)證 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; -- 驗(yàn)證表變量數(shù)據(jù)查詢 [2,7](@ref)
3、T-SQL兼容性測(cè)試
#創(chuàng)建包含SQL Server特有數(shù)據(jù)類型的測(cè)試表
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)
成功分批次執(zhí)行,無(wú)編譯錯(cuò)誤,執(zhí)行計(jì)劃緩存機(jī)制提升效率
事務(wù)控制與系統(tǒng)變量
SET implicit_transactions ON; -- 啟用隱式事務(wù)
BEGIN TRAN;
UPDATE t SET c_mon = 200.0;
SELECT @@TRANCOUNT;
2 -- 返回當(dāng)前事務(wù)計(jì)數(shù)
完全支持@@TRANCOUNT、XACT_STATE()等事務(wù)控制變量
四、總結(jié)
金倉(cāng)數(shù)據(jù)庫(kù)最新 SQL Server 兼容版本已實(shí)現(xiàn)常用功能的高度兼容。時(shí)間倉(cāng)促未進(jìn)行更多測(cè)試,感興趣的小伙伴參考技術(shù)文檔進(jìn)行詳細(xì)評(píng)估:https://bbs.kingbase.com.cn/documentGuide?recId=bf40609a9c064fe3593c2040d4d899c8




