一、前言

在国产化替代浪潮下,国产数据库作为数据安全的核心载体,已成为政企级项目的首选方案。本次学习以达梦 DM8、人大金仓 KingbaseES 为核心实践载体,覆盖从环境搭建、SQL 语法、权限管理到企业级迁移部署的全流程,完成 20 + 核心案例实操,累计沉淀 50 + 条关键运维技巧。本文提炼标准化操作流程(SOP)与高频踩坑解决方案,形成轻量化、可直接复用的技术手册,助力开发者快速上手国产数据库并解决实际项目问题。

二、目录

  1. 国产数据库环境搭建与初始化(图文实操)
  1. 核心语法与高频操作速查(场景化)
  1. 权限管理与用户配置实战(企业级)
  1. 数据迁移与同步方案(Oracle→国产库)
  1. 高可用部署与性能优化(实战配置)
  1. 学习总结与避坑指南(精准解决方案)
  1. 附录(资源路径 + 官方文档 + 工具清单)

三、核心内容详解

(一)国产数据库环境搭建与初始化
  1. 环境准备(补充校验细节)
    • 核心产品:达梦 DM8(官网https://www.dameng.com/下载,需实名认证)、人大金仓 KingbaseES V8R6(官网申请试用)
    • 系统要求:CentOS 7/8、KylinOS Server 10 SP3,CPU≥2 核、内存≥4GB、磁盘≥100GB(数据盘独立挂载)
    • 依赖工具:unzip(解压安装包)、expect(自动化安装脚本)、sysstat(性能监控)
    • 前置校验:关闭防火墙、禁用 SELinux,执行以下命令验证环境

systemctl stop firewalld && systemctl disable firewalld

setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

free -g # 验证内存≥4GB

df -h # 验证磁盘空间≥100GB

  1. 达梦 DM8 安装与初始化(表格标准化)

步骤

操作细节

核心要点

1

解压安装包:unzip dm8_20230808_x86_rh7_64_ent.zip -d /opt/dm8

目录权限设置:chmod -R 755 /opt/dm8

2

执行安装脚本:/opt/dm8/setup.sh,选择 “典型安装”

安装路径默认/opt/dmdbms,避免中文路径

3

创建数据库实例:/opt/dmdbms/bin/dminit path=/opt/dmdata PAGE_SIZE=16 EXTENT_SIZE=32

页大小 16KB(兼容 Oracle),扩展大小 32MB

4

注册服务并启动:/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /opt/dmdata/DAMENG/dm.ini

启动服务:systemctl start DmServiceDMSERVER

5

验证连接:/opt/dmdbms/bin/disql SYSDBA/SYSDBA@127.0.0.1:5236

预期输出 “服务器版本:DM8”,连接成功

  1. 数据库目录结构解析(核心文件说明)

/opt/dmdbms/ # 安装目录

├── bin/ # 核心工具(disql、dminit、dmrman)

├── script/ # 服务注册、备份脚本

├── data/ # 默认数据目录(建议迁移至独立磁盘)

├── log/ # 数据库日志(错误日志、归档日志)

└── dm.ini # 核心配置文件(参数调整)

/opt/dmdata/ # 自定义数据目录

└── DAMENG/ # 实例目录(含数据文件、控制文件)

(二)核心语法与高频操作速查
  1. 基础语法(兼容 SQL 标准,补充国产库特性)

-- 1. 创建表(支持自增、主键、注释,DM8特有IDENTITY列)

CREATE TABLE t_user (

id INT IDENTITY(1,1) PRIMARY KEY COMMENT '用户ID(自增)',

user_name VARCHAR(50) NOT NULL COMMENT '用户名',

age INT CHECK (age > 0) COMMENT '年龄',

create_time DATETIME DEFAULT SYSDATE COMMENT '创建时间'

) COMMENT '用户表';

-- 2. 插入数据(支持批量插入、默认值)

INSERT INTO t_user (user_name, age) VALUES

('张三', 25), ('李四', 30);

-- 3. 查询数据(支持窗口函数、分页,兼容Oracle rownum)

-- 分页查询(DM8特有LIMIT语法,也支持Oracle风格)

SELECT * FROM t_user WHERE age > 20 LIMIT 10 OFFSET 0;

-- 窗口函数(排名统计)

SELECT user_name, age, RANK() OVER (ORDER BY age DESC) AS rank FROM t_user;

-- 4. 更新与删除(支持事务、条件判断)

BEGIN TRANSACTION;

UPDATE t_user SET age = 31 WHERE user_name = '李四';

DELETE FROM t_user WHERE age 18;

COMMIT; -- 提交事务(ROLLBACK回滚)

-- 5. 索引创建(普通索引、唯一索引,优化查询性能)

CREATE INDEX idx_user_name ON t_user(user_name); -- 普通索引

CREATE UNIQUE INDEX idx_user_id ON t_user(id); -- 唯一索引

  1. 高频操作速查(补充场景 + 示例)

| 操作类型 | 功能 | 实战场景 | 示例代码 |

|----------|------|----------|----------|

| 用户管理 | 创建用户、授权 | 项目权限隔离 | CREATE USER test IDENTIFIED BY "Test@123"; GRANT SELECT ON t_user TO test; |

| 备份恢复 | 物理备份、逻辑备份 | 数据灾备 | 物理备份:dmrman backup database '/opt/dmdata/DAMENG/dm.ini' full to backup_20240501 backupset '/opt/dmbackup/full' |

| 数据导入导出 | 批量迁移数据 | 数据迁移 | 导出:dexp SYSDBA/SYSDBA@127.0.0.1:5236 FILE=/opt/backup/t_user.dmp TABLES=t_user |

| 参数调整 | 优化数据库性能 | 性能调优 | ALTER SYSTEM SET MAX_SESSIONS=500 SCOPE=SPFILE;(最大连接数调整,需重启生效) |

| 日志查询 | 排查故障 | 问题定位 | 查看错误日志:cat /opt/dmdbms/log/dm_service_DMSERVER.log |

| 锁查询 | 解决锁等待 | 并发问题 | SELECT * FROM V$LOCK;(DM8 系统视图,查询锁信息) |

(三)权限管理与用户配置实战
  1. 需求明确:创建项目组dev_group,新增开发用户dev01、dev02,仅允许该组用户读写dev_schema下的表,禁止删除表;创建只读用户read01,仅允许查询所有业务表。
  1. 核心实现步骤(达梦 DM8 为例)

-- 1. 创建角色(按权限分类)

CREATE ROLE dev_role; -- 开发角色(读写权限)

CREATE ROLE read_role; -- 只读角色(查询权限)

-- 2. 授权角色权限

-- 开发角色:允许在dev_schema下创建表、增删改查

GRANT CREATE TABLE, CREATE VIEW TO dev_role;

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA dev_schema TO dev_role;

-- 只读角色:仅允许查询所有业务表

GRANT SELECT ON SCHEMA dev_schema TO read_role;

-- 3. 创建用户并关联角色、所属组

CREATE USER dev01 IDENTIFIED BY "Dev@123" DEFAULT SCHEMA dev_schema;

CREATE USER dev02 IDENTIFIED BY "Dev@123" DEFAULT SCHEMA dev_schema;

CREATE USER read01 IDENTIFIED BY "Read@123";

-- 关联角色

GRANT dev_role TO dev01, dev02;

GRANT read_role TO read01;

-- 4. 密码策略配置(企业级要求)

ALTER USER dev01 PASSWORD_LIFE_TIME 90; -- 密码有效期90天

ALTER USER dev01 PASSWORD_LOCK_TIME 3; -- 连续3次输错锁定

-- 5. 验证权限

-- 切换dev01用户,测试创建表

CONN dev01/Dev@123@127.0.0.1:5236;

CREATE TABLE dev_schema.t_test (id INT); -- 允许创建(验证通过)

DROP TABLE dev_schema.t_test; -- 提示权限不足(验证通过)

-- 切换read01用户,测试更新数据

CONN read01/Read@123@127.0.0.1:5236;

UPDATE dev_schema.t_user SET age=30; -- 提示权限不足(验证通过)

(四)数据迁移与同步方案(Oracle→达梦 DM8)
  1. 迁移工具选择:达梦数据迁移工具(DMETL)、Oracle 数据泵(expdp/impdp)+ 达梦 dexp/dimp
  1. 核心迁移步骤(DMETL 工具实操)
    • 步骤 1:安装 DMETL(随 DM8 安装包提供,路径/opt/dmdbms/tool/dmetl/)
    • 步骤 2:新建迁移项目,配置源端(Oracle)和目标端(DM8)连接

连接类型

配置参数

源端(Oracle)

驱动:oracle.jdbc.OracleDriver;URL:jdbc:oracle:thin:@192.168.1.100:1521:ORCL;用户名 / 密码:oracle/oracle

目标端(DM8)

驱动:dm.jdbc.driver.DmDriver;URL:jdbc:dm://127.0.0.1:5236;用户名 / 密码:SYSDBA/SYSDBA

    • 步骤 3:选择迁移对象(表、索引、存储过程),设置字段映射(Oracle NUMBER→DM8 INT,VARCHAR2→VARCHAR)
    • 步骤 4:执行迁移任务,查看迁移报告(重点关注 “失败对象”,处理字段类型不兼容问题)
    • 步骤 5:验证迁移结果:对比源端和目标端数据量、执行查询验证数据一致性

-- Oracle端查询数据量

SELECT COUNT(*) FROM t_user;

-- DM8端查询数据量

SELECT COUNT(*) FROM dev_schema.t_user; -- 两者一致则迁移成功

  1. 增量同步方案(基于日志)

# 1. 开启DM8归档日志(支持增量备份与同步)

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmarchive, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240';

# 2. 使用DMHS(达梦数据同步工具)配置增量同步

# 配置源端(Oracle)和目标端(DM8)同步任务,实时解析Oracle redo日志,同步至DM8

# 启动同步服务:systemctl start dmhs_service

(五)高可用部署与性能优化
  1. 达梦 DM8 主备部署(双机热备)
    • 部署架构:主库(192.168.1.20)+ 备库(192.168.1.21),共享存储(或异步复制)
    • 核心配置步骤:

① 主库配置dm.ini:INSTANCE_NAME=DM_MASTER,PORT_NUM=5236

② 备库配置dm.ini:INSTANCE_NAME=DM_SLAVE,PORT_NUM=5236,ALTER_MODE_STATUS=0(只读)

③ 配置主备同步参数文件dmmal.ini(主备库一致)


[MAL_INST1]

MAL_INST_NAME = DM_MASTER

MAL_HOST = 192.168.1.20

MAL_PORT = 5336

[MAL_INST2]

MAL_INST_NAME = DM_SLAVE

MAL_HOST = 192.168.1.21

MAL_PORT = 5336

④ 主库执行备份,备库恢复:dmrman restore database '/opt/dmdata/DAMENG/dm.ini' from backupset '/opt/dmbackup/full'

⑤ 启动主备同步:主库ALTER DATABASE PRIMARY;,备库ALTER DATABASE STANDBY;

⑥ 验证高可用:停止主库服务,备库自动切换为主库,业务无感知

  1. 性能优化核心方案(实战配置)

MEMORY_POOL = 2048 # 内存池大小(MB,建议为物理内存的50%)

BUFFER = 10240 # 数据缓冲区(MB,提升查询缓存命中率)

SORT_BUF_SIZE = 512 # 排序缓冲区(MB,优化大结果集排序)

      1. 内存参数优化(dm.ini)

-- 分析表统计信息(帮助优化器生成最优执行计划)

ANALYZE TABLE t_user COMPUTE STATISTICS;

-- 查看慢查询,创建缺失索引

SELECT * FROM V$SLOW_SQL; -- 查看慢查询日志

CREATE INDEX idx_user_create_time ON t_user(create_time); -- 为查询频繁的字段创建索引

      1. 索引优化(避免全表扫描)

// 应用端Druid连接池配置(适配DM8)

spring.datasource.url=jdbc:dm://127.0.0.1:5236?rewriteBatchedStatements=true

spring.datasource.username=SYSDBA

spring.datasource.password=SYSDBA

spring.datasource.max-active=200 # 最大连接数

spring.datasource.min-idle=20 # 最小空闲连接

spring.datasource.max-wait=60000 # 最大等待时间

      1. 连接池优化(应用端配置)
(六)学习总结与避坑指南
  1. 核心收获(结构化)
    • 技术能力:掌握达梦 DM8、人大金仓 KingbaseES 的环境搭建、权限管理、数据迁移全流程,熟练运用国产数据库特有语法与工具。
    • 项目落地:理解国产数据库在国产化替代中的适配要点,解决 Oracle 迁移至国产库的兼容性问题。
    • 运维思维:掌握高可用部署、性能优化、数据备份恢复等企业级运维技能,保障数据安全。
  1. 避坑指南(补充解决方案)

| 问题现象 | 根本原因 | 解决方案 |

|----------|----------|----------|

| 安装时提示 “磁盘空间不足” | 达梦 DM8 典型安装需占用约 2GB 空间,数据目录需预留足够空间 | 独立挂载数据盘,确保磁盘空间≥100GB,执行df -h校验 |

| 迁移时 Oracle NUMBER 类型字段精度丢失 | 国产数据库对 NUMBER 精度支持与 Oracle 存在差异 | 迁移前将 Oracle NUMBER (10) 转为 DM8 INT,NUMBER (20,2) 转为 DECIMAL (20,2) |

| 客户端连接时报 “端口 5236 未开放” | 防火墙未开放端口,或数据库服务未启动 | 开放端口:firewall-cmd --add-port=5236/tcp --permanent,启动服务:systemctl start DmServiceDMSERVER |

| 高并发下出现 “锁等待超时” | 事务未及时提交,导致行锁阻塞 | 优化业务代码,缩短事务时长;查询锁信息:SELECT * FROM V$LOCK,手动释放:KILL SESSION '会话ID' |

| 备份失败提示 “归档日志未开启” | 物理备份依赖归档日志,默认未开启 | 开启归档日志:ALTER DATABASE ARCHIVELOG,配置归档目录后重启数据库 |

四、附录

  1. 常用工具清单
    • 管理工具:达梦管理工具(dmmanager)、人大金
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐