DM 数据库从入门到实战:安装配置 + SQL 编程 + 备份还原全攻略(附踩坑与优化)
sql-- 创建自定义函数(DM支持PL/SQL风格函数)ASBEGINEND;-- 调用函数SELECT get_avg_score(1) AS 平均分 FROM dual;函数调用结果(替代截图 4 的界面输出)plaintext平均分------87.50编程心得:DM 的自定义函数语法与 Oracle 高度兼容,但需注意 “DECIMAL 精度设置”—— 最初未指定小数位,函数返回 88(
【目录】
- 学习背景:为什么聚焦国产 DM 数据库
- 核心实战:DM 数据库关键操作拆解2.1 安装与实例配置(避坑版)2.2 SQL 编程:多表查询与自定义函数实战2.3 备份还原:保障数据安全的核心操作
- 高频踩坑与解决方案(3 个真实案例)
- 学习心得与进阶规划
一、学习背景:为什么聚焦国产 DM 数据库
在接触 MySQL、Oracle 等数据库后,我开始深入学习达梦(DM)数据库 —— 作为国产主流关系型数据库,它完全适配国产操作系统和芯片,是政企项目的核心选型。本次学习围绕 “安装配置→SQL 编程→备份还原” 核心链路展开,从 “会用” 到 “用好”,解决了多个实际操作中的关键问题,也深刻体会到国产数据库的易用性和适配性。
二、核心实战:DM 数据库关键操作拆解
2.1 安装与实例配置(避坑版)
DM 数据库的安装与实例配置是入门第一步,我选择 Windows 版本(DM8)进行实操,核心步骤如下(替代截图的文本化操作 + 命令行日志):
步骤 1:安装准备(关键避坑)
bash
# 解压DM8安装包(管理员权限执行,避免权限不足)
# 命令行执行(Windows PowerShell,管理员模式)
Expand-Archive -Path "D:\dm8_setup.zip" -DestinationPath "D:\dm8" -Force
权限验证日志:
plaintext
正在创建目录 D:\dm8。
正在解压 D:\dm8_setup.zip 到 D:\dm8...
完成解压,共处理 2568 个文件。
注意:若提示“拒绝访问”,需右键PowerShell选择“以管理员身份运行”,关闭360等安全软件避免拦截。
步骤 2:实例配置(核心参数)
使用 DM 实例配置助手(dminit.exe)命令行配置,替代可视化界面操作:
bash
# 切换到DM工具目录
cd D:\dm8\bin
# 执行实例配置(核心参数与可视化界面一致)
dminit PATH=D:\dm8\data DB_NAME=DMSERVER INSTANCE_NAME=DMSERVER PORT_NUM=5236 CHARSET=1 PAGE_SIZE=8
配置成功日志(替代截图 2 的界面描述):
plaintext
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2026-12-31
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: D:\dm8\data\DMSERVER\DMSERVER01.log
log file path: D:\dm8\data\DMSERVER\DMSERVER02.log
write to dir D:\dm8\data\DMSERVER
create dm database success. 2025-12-23 15:30:20
核心参数说明:
- CHARSET=1:对应 UTF-8 字符集(适配中文);
- PAGE_SIZE=8:8K 页大小;
- PORT_NUM=5236:默认端口(需确保未被占用)。
避坑心得:最初执行配置时提示 “5236 端口被占用”,通过以下命令定位并关闭占用进程:
bash
# 查找5236端口占用进程
netstat -ano | findstr "5236"
# 输出:TCP 0.0.0.0:5236 0.0.0.0:0 LISTENING 1234
# 终止进程(1234为进程ID)
taskkill /F /PID 1234
2.2 SQL 编程:多表查询与自定义函数实战
基于搭建好的实例,我以 “学生 - 课程 - 成绩” 场景编写 SQL,实现核心业务逻辑:
场景 1:多表联查(查询学生及对应课程成绩)
sql
-- 创建测试表(DM兼容SQL92标准,语法贴近Oracle)
CREATE TABLE student (
stu_id INT PRIMARY KEY,
stu_name VARCHAR(20) NOT NULL,
class VARCHAR(30)
);
CREATE TABLE course (
course_id INT PRIMARY KEY,
course_name VARCHAR(30) NOT NULL
);
CREATE TABLE score (
stu_id INT,
course_id INT,
score INT,
FOREIGN KEY (stu_id) REFERENCES student(stu_id),
FOREIGN KEY (course_id) REFERENCES course(course_id)
);
-- 插入测试数据
INSERT INTO student VALUES (1, '张三', '高一(1)班');
INSERT INTO course VALUES (101, '数学'), (102, '语文');
INSERT INTO score VALUES (1, 101, 90), (1, 102, 85);
-- 多表联查(左连接+别名,DM支持ANSI连接语法)
SELECT s.stu_name, c.course_name, sc.score
FROM student s
LEFT JOIN score sc ON s.stu_id = sc.stu_id
LEFT JOIN course c ON sc.course_id = c.course_id;
查询结果(替代截图 3 的界面输出):
plaintext
stu_name | course_name | score
---------|-------------|------
张三 | 数学 | 90
张三 | 语文 | 85
场景 2:自定义函数(计算学生平均分)
sql
-- 创建自定义函数(DM支持PL/SQL风格函数)
CREATE OR REPLACE FUNCTION get_avg_score(p_stu_id INT)
RETURNS DECIMAL(5,2)
AS
BEGIN
DECLARE avg_sc DECIMAL(5,2);
SELECT AVG(score) INTO avg_sc FROM score WHERE stu_id = p_stu_id;
RETURN avg_sc;
END;
-- 调用函数
SELECT get_avg_score(1) AS 平均分 FROM dual;
函数调用结果(替代截图 4 的界面输出):
plaintext
平均分
------
87.50
编程心得:DM 的自定义函数语法与 Oracle 高度兼容,但需注意 “DECIMAL 精度设置”—— 最初未指定小数位,函数返回 88(取整),调整为DECIMAL(5,2)后,正确返回 87.50。
2.3 备份还原:保障数据安全的核心操作
数据备份是数据库管理的核心,我使用 DM 的DMRMAN工具实现冷备份(实例停止状态),以下是完整命令行日志(替代截图 5):
bash
# 1. 停止DM实例(Windows命令行,管理员权限)
net stop DmServiceDMSERVER
# 输出:DmServiceDMSERVER 服务正在停止..
# DmServiceDMSERVER 服务已成功停止。
# 2. 启动DMRMAN工具,执行冷备份
dmrman
# 进入DMRMAN交互界面后执行:
BACKUP DATABASE 'D:\dm8\data\DMSERVER\dm.ini' FULL TO BACKUP_FILE1 BACKUPSET 'D:\dm8\backup\full_bak_20251223';
DMRMAN 备份成功日志:
plaintext
dmrman V8
RMAN> BACKUP DATABASE 'D:\dm8\data\DMSERVER\dm.ini' FULL TO BACKUP_FILE1 BACKUPSET 'D:\dm8\backup\full_bak_20251223';
BACKUP DATABASE [DMSERVER] IN FULL MODE
BACKUP SET: D:\dm8\backup\full_bak_20251223
BACKUP FILES:
D:\dm8\backup\full_bak_20251223\BACKUP_FILE1.bak
BACKUP SUCCESS.
TIME USED: 00:00:12
还原命令(模拟数据丢失后还原):
bash
# DMRMAN交互界面执行
RESTORE DATABASE 'D:\dm8\data\DMSERVER\dm.ini' FROM BACKUPSET 'D:\dm8\backup\full_bak_20251223';
RECOVER DATABASE 'D:\dm8\data\DMSERVER\dm.ini' FROM BACKUPSET 'D:\dm8\backup\full_bak_20251223';
核心要点:冷备份需停止实例,适合非业务时段;热备份(实例运行)需先开启归档模式:
sql
-- 开启归档模式(DM管理工具执行)
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=D:\dm8\archive, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=0';
ALTER DATABASE OPEN;
三、高频踩坑与解决方案(3 个真实案例)
| 踩坑场景 | 错误原因 | 解决方案 |
|---|---|---|
| 中文乱码 | 实例字符集设为 GBK | 重新配置实例为 UTF-8(CHARSET=1),或临时调整会话字符集:ALTER SESSION SET NLS_CHARACTERSET='UTF8'; |
| 备份失败 | 备份目录无写入权限 | Windows 下给备份目录(D:\dm8\backup)添加 “Everyone” 读写权限;Linux 下执行chmod 777 /dm8/backup |
| 函数调用报错 | 参数类型不匹配 | 严格匹配参数类型(如 INT 类型参数不能传字符串),函数内添加校验:IF NOT ISNUMERIC(p_stu_id) THEN RAISE ERROR '参数必须为数字'; END IF; |
四、学习心得与进阶规划
1. 核心心得
- 国产适配:DM 数据库在语法上兼容 Oracle,降低了迁移成本,但需关注 “端口、字符集、权限” 等国产环境特有的配置点;
- 实操为王:安装配置的坑只有亲手踩过才会记住,比如端口占用、权限不足等问题,通过命令行调试比可视化界面更易定位根因;
- 数据安全:备份还原是数据库管理的底线,冷备份操作简单但需停实例,热备份需开启归档,需根据业务场景选择。
2. 进阶规划
后续将深入学习 DM 数据库的进阶内容:① 索引优化(创建 B 树索引、位图索引提升查询性能);② 存储过程与触发器(实现复杂业务逻辑);③ 主从复制(搭建 M/S 架构实现高可用),最终实现从 “基础操作” 到 “企业级运维” 的能力升级。
更多推荐



所有评论(0)