Linux部署人大金仓、迁移、重启、备份、授权文件替换以及常用sql指南
-
安装包下载
人大金仓官网:https://www.kingbase.com.cn/download.html#database
下载对应版本的安装包,由于我要部署的服务器是linux,且要迁移的库为oracle,所有我下载的为兼容oracle版本的X64_Linux;授权文件也一样下载相应的版本,我选择的是企业版,不同版本的区别在下面也有显示


下载完成后目录:
-
部署


-
创建用户:
-
由于KingbaseES不能用root安装,所以要先创建一个用户,并设置密码:
useradd -m kingbase
passwd kingbase
usermod -aG wheel kingbase
需要输入两次密码,密码可以自己随便设置:
-
创建安装目录并给权限
-
KingbaseES默认安装目录:/opt/Kingbase/ES/V9
如果不存在,需用root创建目录,并赋予kingbase用户对该目录的读写权限
mkdir -p /opt/Kingbase/ES/V9
chown kingbase:kingbase /opt/Kingbase/ES/V9
chmod 755 /opt/Kingbase/ES/V9
mkdir -p /opt/Kingbase/ES/V9/data
chown kingbase:kingbase /opt/Kingbase/ES/V9/data
chmod 755 /opt/Kingbase/ES/V9/data
-
挂载并设置安装的语言为中文
-
mkdir -p /mnt/KingbaseESInstall
mount /opt/KingbaseES_V009R002C010B0006_Lin64_install.iso /mnt/KingbaseESInstall/
export LANG=zh_CN.UTF-8
注意第二行如果你的iso文件和我的地址不一样记得修改!
-
切换用户并开始安装
-
su kingbase
sh /mnt/KingbaseESInstall/setup.sh -i console
输入上面两行之后就会开始安装了,如图:
看着是自己要的版本就点回车继续吧
接下来都是一些安装许可,一直点回车就行:我数了一下要点9下回车
接下来就是按Y接受,并回车:
接下来就是选择安装的东西,按回车就是默认选1,1会下载数据库主体功能、接口驱动、工具等内容。
所以按回车就对了
后面就是选择授权文件,如果和我放在一个位置的话,输入:
/etc/kingbase/license/license_Oracle试用授权_90天.dat
否则就输入自己的授权文件地址
后面就是选择一些配置了,没有特殊要求的话,无脑点回车就行了,点回车就会选默认值:
然后就会进行安装:
安装完后又会让你选择一些配置:存储数据的文件夹,数据库端口,数据库管理员,直接全部点回车就行了,选择默认值。
之后就会让你设置数据库管理员的密码了:
接下来又是一些配置选择:数据库服务字符集,区域,数据库兼容模式,大小写敏感等等,直接再全部回车,选默认值。
也就是最后一直按回车就完成安装了:
但是这个时候还没完,还有最后一步,不然KingbaseES是无法运行的
切换回root,将KingbaseES注册为系统服务运行
su root
/opt/Kingbase/ES/V8/install/script/root.sh
echo 'export PATH=/opt/Kingbase/ES/V9/KESRealPro/V009R002C010/Server/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
umount /mnt/KingbaseESInstall # 别忘了取消挂载

第一步如果失败,切换不回root,就新开个Xshell连接即可,总之只需要切换到root
第三四步是将KingbaseES配套的根据加入系统环境变量
注意第三行如果你的版本和我的不一样记得修改!只用修改"V009R002C010"版本号即可
验证是否安装成功
ksql -V

输入ksql -U system -d kingbase 连接数据库,需要密码,也就是设置的数据库管理员密码
输出如下就是成功了

可能遇到的问题:

说/tmp磁盘空间不足,将使用/home/kingbase进行安装,然后/home/kingbase的磁盘空间也不足
解决方案:
最简单的方法,临时换个目录安装:比如我的虚拟机上的/adm/sql的磁盘空间足够,就换到这个目录安装,由于我们用kingbase用户安装,很多目录没有权限,所有要先切换回root用户
# 切换回root用户
# 给权限
chmod o+x /adm
chmod 755 /adm/sql
chown kingbase:kingbase /adm/sql
# 切换回kingbase进行安装
su kingbase
# 设置安装路径为自己磁盘空间充足的目录
export TMPDIR=/adm/sql
export IATEMPDIR=/adm/sql
# 继续上面的安装
sh /mnt/KingbaseESInstall/setup.sh -i console
sudo firewall-cmd --list-ports | grep 54523
# 替换为你的实际安装路径
2../startup.sh # 前台运行
# 或nohup ./startup.sh & # 后台运行(关闭终端后继续运行)
访问http:ip:54523
如果网页访问不了则验证Linux端口是否开放;
安装netstat:sudo yum install net-tools (ps -ef | grep kdts-app-console筛选端口)
netstat -tunlp | grep 16652
curl -v http://192.168.0.200:54523
# 测试本地访问 (IPv6)
curl -v http://[::1]:54523
# 测试本地访问 (IPv4)
curl -v http://127.0.0.1:54523
# 测试网络访问 (替换 SERVER_IP 为实际IP)
curl -v http://<SERVER_IP>:54523
# 安装文本浏览器测试
sudo yum install elinks
# 使用文本浏览器访问
elinks http://127.0.0.1:54523
如果文本浏览器可以访问则:
# 查看防火墙状态
sudo firewall-cmd --state
# 添加端口例外
sudo firewall-cmd --permanent --add-port=54523/tcp
sudo firewall-cmd --reload
# 验证端口开放
sudo firewall-cmd --list-ports | grep 54523
-
Oracle迁移人大金仓
-
金仓KingbaseDTS是一款用于人大金仓数据库迁移的工具,支持Java版本,具备向导式的智能迁移功能,兼容大部分Oracle语法,适用于从MySQL到金仓数据库的迁移。
人大金仓DTS位置:
/opt/Kingbase/ES/V9/KESRealPro/V009R002C010/ClientTools/guitools/KDts/KDTS-WEB
-

-
安装jdk
-
需安装JDK1.8或JDK1.11
sudo yum install java-8-openjdk-devel
安装完成后,建议设置 JAVA_HOME 环境变量:
安装编辑器;sudo yum install vim -y
vim ~/.profile
# 添加到 ~/.bashrc 或 ~/.zshrc
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
按 i 进入编辑模式
编辑完成后按 ESC 退出编辑模式
输入 :wq 保存并退出(冒号是命令的一部分)
-
启动DTS
-
1.进入dts:cd /opt/Kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/bin
-
登录DTS网页
网页可以访问后,输入账号密码登录: -
(我试了下配置账号密码,重启DTS后不起作用,如果DTS密码不对,联系人大金仓技术支持:400-601-1188)
账号:kingbase
密码:Kb_DI@2019
账号密码配置:
----------重置dts登录密码
cd /opt/Kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/bin
./shutdown.sh
cp/opt/Kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf/application.properties{,.bak}
# 添加管理员账户配置
# 金仓数据库常见的安全配置格式
kdts.security.user.name=admin
kdts.security.user.password=admin
./startup.sh
出现以下网页则登录成功
-

-
状态为完成代表迁移成功

-
数据库迁移
- 配置源数据库

-
配置目标数据库:

-
创建迁移任务:



-
这个时候我们会看到源数据库中的数据库信息,我们选择要迁移的库进行迁移,目标属主选择system表示当前用户即可进行下一步

-
内部一些参数如果没有适配原因暂时不需要更改,直接点击保存并迁移
-

-
查看迁移结果:


-
查看错误日志,然后反复调整之前迁移参数,直到全部成功,这个需要反复多次重复配置!!
-
迁移中的问题:
-
遇到问题联系人大金仓客服(QQ群:744721374,发报错截图)
再次迁移时需清理目标数据库:
DROP SCHEMA IF EXISTS CWQMPC CASCADE;

- 表结构 oracle的raw类型在kingbase不存在

-
解决方法:
在迁移过程中需要设置数据类型映射规则,将`RAW`映射为`BYTEA`。
在人大金仓创建一下这个扩展
CREATE EXTENSION kdb_raw;

- 需调整代码里的sql:全角空格改为半角空格,全角等号改为半角等号
- No results were returned by the query(没有查询结果返回kingbase会报这个错,需要给定默认值)
-
Dbeaver配置人大金仓
- 数据库-驱动管理器-新建KingbaseES驱动

- 编辑驱动-添加文件

-
驱动jar来源:
Linux服务器中:/opt/Kingbase/ES/V9/KESRealPro/V009R002C010/Interface/jdbc

-
连接人大金仓

-
重启人大金仓数据库
-
切换到kingbase用户
-
su - kingbase
-
进入bin目录
-
cd /opt/Kingbase/ES/V9/KESRealPro/V009R002C010/Server/bin/
-
执行重启命令
-
./sys_ctl restart -D /opt/Kingbase/ES/V9/data/
-

备份数据库
使用sys_dump备份(在Linux命令行执行)
cd /opt/Kingbase/ES/V9/KESRealPro/V009R002C010/Server/bin/
/sys_dump -U cwqmpc -d test -F c -f /tmp/kingbase_backup.dmp

授权文件替换
停止数据库:
./sys_ctl stop -D /opt/Kingbase/ES/V9/data/
备份旧的license文件:
cp /opt/Kingbase/ES/V9/data/license.lic /opt/Kingbase/ES/V9/data/license.lic.bak
从官网下载版本对应的授权文件,上传到对应目录
确保文件权限正确(一般为kingbase用户可读,root用户操作)
chown kingbase:kingbase /etc/kingbase/license/license.dat
chmod 755 /etc/kingbase/license/license.dat
重启数据库:
./sys_ctl restart -D /opt/Kingbase/ES/V9/data/
第二次授权需拨打官网电话,申请授权文件
复制许可证文件到Kingbase期望的位置
1.复制到数据目录
cp /etc/kingbase/license/license.dat /opt/Kingbase/ES/V9/data/
chmod 666 /opt/Kingbase/ES/V9/data/license.dat
2. 复制到Server/bin目录
cp /etc/kingbase/license/license.dat /opt/Kingbase/ES/V9/Server/bin/
chmod 666 /opt/Kingbase/ES/V9/Server/bin/license.dat
3. 创建符号链接确保所有位置都有
ln -sf /etc/kingbase/license/license.dat /opt/Kingbase/ES/V9/data/license.dat
ln -sf /etc/kingbase/license/license.dat /opt/Kingbase/ES/V9/Server/bin/license.dat


注:
数据目录 700(只有kingbase用户能访问)
bin目录 775(kingbase用户可以执行)
许可证文件需要 666 (浮动授权需要写权限)
正常安装许可文件是放在Server目录下,在Server的上一层会有一个软连接
常用sql
创建用户
-- 创建登录用户
CREATE USER cwqmpc WITH PASSWORD 'xxxx';
-- 创建超级用户
CREATE USER admin WITH SUPERUSER PASSWORD 'password';
-- 授予连接权限
GRANT CONNECT ON DATABASE test TO cwqmpc;
-- 授予模式使用权(以public为例)
GRANT USAGE ON SCHEMA cwqmpc TO cwqmpc;
-- 授予表操作权限
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA cwqmpc TO cwqmpc;
GRANT SELECT ON [schema.]view_name TO user_name;
与 Oracle 区别:
Oracle 用 CREATE USER ... IDENTIFIED BY;
KingbaseES 用 CREATE USER(本质是创建角色 + LOGIN 权限),更接近 PostgreSQL。
-- 如果表在public模式下(生成该用户的创建表语句)
SELECT 'ALTER TABLE ' || tablename || ' OWNER TO cwqmpc;'
FROM pg_tables
WHERE schemaname = 'cwqmpc';
--用户
select * from sys_user;
-- 查看当前连接的用户和数据库
SELECT current_user, current_database();
-- 查看所有活跃连接(需管理员权限)
SELECT * FROM sys_stat_activity;
--删除该用户下的所有表
DROP SCHEMA IF EXISTS CWQMPC CASCADE;
CREATE EXTENSION kdb_raw;
创建表空间
创建表空间(目录及数据库)
--先在操作系统创建目录(如/opt/Kingbase/ES/V9/CWDATAQMPC)
# 创建目录
mkdir -p /opt/Kingbase/ES/V9/CWDATAQMPC
--在数据库中创建
CREATE TABLESPACE CWDATAQMPC LOCATION '/opt/Kingbase/ES/V9/CWDATAQMPC';
# 修改所有者和权限(确保 kingbase 用户可读写)
chown -R kingbase:kingbase /opt/Kingbase/ES/V9/CWDATAQMPC
chmod 700 /opt/Kingbase/ES/V9/CWDATAQMPC
ksql -U system -d kingbase
指定用户默认表空间
ALTER USER cwqmpc SET default_tablespace = CWDATAQMPC;
建表时指定表空间
CREATE TABLE test (id INT) TABLESPACE CWDATAQMPC;
与 Oracle 区别:
- Oracle 表空间对应多个数据文件,可自动扩展;
- KingbaseES 表空间只是一个目录映射,底层仍由操作系统文件系统管理。
查询当前连接数
SELECT COUNT(*),STATE FROM sys_stat_activity group by STATE;
Active:活跃;idle:空闲;
--查看最大连接数
SHOW max_connections;
修改最大连接数(需重启)
编辑配置文件 kingbase.conf(max_connections=xxx)
--查看数据库版本
SELECT version();
-- 查看所有数据库
SELECT datname, datdba, encoding, datcollate FROM sys_database;
-- 查看当前数据库
SELECT current_database();
资源占用查询
KingbaseES 不直接提供 per-session 的 CPU/内存统计(不像 Oracle AWR)。但可通过以下方式监控:
--查询活跃会话
SELECT pid, usename, application_name, client_addr, query_start, state, query
FROM sys_stat_activity
WHERE state <> 'idle';
-- 当前数据库大小
SELECT pg_size_pretty(pg_database_size(current_database()));
-- 所有数据库大小
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM sys_database;
-- 查看锁信息
SELECT * FROM sys_locks;
函数的查询与创建
Kingbase
-- 示例:返回两数之和
CREATE OR REPLACE FUNCTION add_numbers(a INT, b INT)
RETURNS INT AS $$
BEGIN
RETURN a + b;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
-- 查看所有函数(按 schema)
SELECT nspname AS schema, proname AS function_name, proargtypes, prorettype
FROM sys_proc p
JOIN sys_namespace n ON p.pronamespace = n.oid
WHERE n.nspname NOT LIKE 'pg_%'
ORDER BY schema, function_name;
Oralce
--查询当前用户的所有函数
SELECT object_name AS function_name,
status,
created,
last_ddl_time
FROM user_objects
WHERE object_type = 'FUNCTION'
ORDER BY created DESC;
CREATE OR REPLACE FUNCTION calc_char_match_ratio(
str1 VARCHAR2,
str2 VARCHAR2
) RETURN NUMBER DETERMINISTIC
IS
clean1 VARCHAR2(4000);
clean2 VARCHAR2(4000);
match_count PLS_INTEGER := 0;
len1 PLS_INTEGER;
len2 PLS_INTEGER;
max_len PLS_INTEGER;
BEGIN
IF str1 IS NULL OR str2 IS NULL THEN
RETURN 0;
END IF;
-- 对 str1 清洗
clean1 := TRIM(str1);
clean1 := REPLACE(clean1, '项目', '');
-- 对 str2 清洗
clean2 := TRIM(str2);
clean2 := REPLACE(clean2, '项目', '');
-- 去除可能产生的多余空格(可选,但推荐)
clean1 := REGEXP_REPLACE(clean1, '\s+', ' ');
clean2 := REGEXP_REPLACE(clean2, '\s+', ' ');
len1 := LENGTH(clean1);
len2 := LENGTH(clean2);
IF NVL(len1, 0) = 0 OR NVL(len2, 0) = 0 THEN
RETURN 0;
END IF;
max_len := CASE WHEN len1 > len2 THEN len1 ELSE len2 END;
FOR i IN 1 .. len2 LOOP
IF INSTR(clean1, SUBSTR(clean2, i, 1)) > 0 THEN
match_count := match_count + 1;
END IF;
END LOOP;
RETURN match_count / max_len;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
区别:
Kingbase与oralce函数都是使用BEGIN EXCETPTION END标准结构,但是kingbase不支持oralce的PRAGMA EXCEPTION_INIT
更多推荐




所有评论(0)