• Linux部署人大金仓

  • 安装包下载

人大金仓官网: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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐