武汉市网站建设_网站建设公司_Java_seo优化
2025/12/20 16:30:18 网站建设 项目流程

目录

一、环境准备与DM数据库静默安装(麒麟V10)

二、DM数据库实例初始化与核心配置

三、DM数据库备份与还原策略(全量+增量)

四、DM数据库函数用法详解(内置+自定义)

五、DM SQL程序设计思路与实战

六、常见问题解决技巧

七、总结


前言:随着国产化替代进程的推进,麒麟操作系统与达梦(DM)数据库的组合已成为政企级项目的主流选择。本文聚焦实操落地,从DM数据库的静默安装、实例优化配置,到备份还原策略、函数应用,再到SQL程序设计实战,全程配套完整命令与问题解决技巧,适合数据库运维工程师与开发人员快速上手,助力高效完成国产化环境下的数据库部署与开发工作。

一、环境准备与DM数据库静默安装(麒麟V10)

DM数据库支持图形化与静默安装,服务器环境优先选择静默安装(无GUI依赖),以下是完整步骤与注意事项。

1.1 前置环境检查与配置

  • 系统环境要求:麒麟Linux Advanced Server V10(x86/ARM架构均可),内存≥4G,磁盘空间≥10G(含安装文件与数据存储)
  • 依赖与端口配置:开放21(FTP)、22(SSH)端口,启动sshd服务;安装依赖库(若缺失):
    # 检查并安装依赖
    yum install -y libaio-devel glibc-devel
  • 文件打开数配置:默认1024过小,需调整为65536以上(避免安装与运行报错):
    # 临时生效
    ulimit -n 65536
    # 永久生效(编辑配置文件)
    echo "* soft nofile 65536" >> /etc/security/limits.conf
    echo "* hard nofile 65536" >> /etc/security/limits.conf

1.2 静默安装步骤(以DM8为例)

  1. 上传镜像并挂载:使用Xftp将DM8镜像文件(如dm8_20211021_x86_rh6_64_ent_8.1.2.84.iso)上传至/opt目录,执行挂载命令:
    cd /opt
    mount dm8_20211021_x86_rh6_64_ent_8.1.2.84.iso /mnt # 挂载到/mnt目录
  1. 执行静默安装:通过./DMInstall.bin -i进入交互式静默安装,按提示完成配置:
    cd /mnt
    ./DMInstall.bin -i
    # 后续交互配置示例(关键步骤)
    请选择安装语言(C/c:中文 E/e:英文) (C/c):c
    是否输入Key文件路径? (Y/y:是 N/n:否) (Y/y):n # 无key文件选n
    是否设置时区? (Y/y:是 N/n:否) (Y/y):y
    请选择设置时区 (21):21 # 选择GTM+08=中国标准时间
    安装类型:1 典型安装2 服务器3 客户端4 自定义
    请选择安装类型的数字序号 (1 典型安装):2 # 服务器类型(含核心服务)
    请选择安装目录 (/opt/dmdbms): # 直接回车使用默认目录
    是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否) (Y/y):y
    是否确认安装? (Y/y:是 N/n:否):y # 开始安装
  1. 安装后权限配置:安装完成后会自动创建dmdba用户,需给安装目录赋权(避免后续初始化报错):
    chown -R dmdba:dinstall /opt/dmdbms

二、DM数据库实例初始化与核心配置

安装完成后需初始化实例(生成数据文件、日志文件等),关键参数的合理配置直接影响数据库性能,以下是核心步骤。

2.1 实例初始化(dminit工具)

切换至dmdba用户执行初始化命令,核心参数需根据业务场景调整(如页大小、日志大小):

bash
su - dmdba # 切换到dmdba用户
cd /opt/dmdbms/bin
# 初始化命令(关键参数说明)
./dminit path=/dm8/data # 数据存储路径
INSTANCE_NAME=DM01 # 实例名
PORT_NUM=5236 # 端口号(默认5236)
PAGE_SIZE=32 # 页大小32K(推荐生产环境,提升大字段处理性能)
EXTENT_SIZE=32 # 簇大小32页(每次扩容32*32K=1024K)
LOG_SIZE=2048 # 日志文件大小2048M(避免频繁切换日志)
CASE_SENSITIVE=0 # 大小写不敏感(降低开发适配成本)
CHARSET=1 # 字符集UTF-8(支持多语言)

2.2 核心参数解读与调整

初始化后可通过dm.ini配置文件或SQL语句调整参数,常用核心参数如下:

参数名

功能说明

推荐值

查询命令

PAGE_SIZE

数据文件页大小,影响元组长度支持

32K(生产环境)

cat /dm8/data/DM01/dminit*.log | grep "page size"

LOG_SIZE

重做日志大小,影响大事务性能

2048M

select PATH,RLOG_SIZE/1024/1024 MB from v$rlogfile;

CASE_SENSITIVE

大小写敏感开关(1敏感/0不敏感)

0(开发友好)

select decode(case_sensitive,1,'敏感','不敏感');

LENGTH_IN_CHAR

VARCHAR长度是否按字符计算

1(避免中文截断)

select para_name,para_value from v$dm_ini where para_name='LENGTH_IN_CHAR';

2.3 实例服务注册与启停

bash
# 注册服务(root用户执行)
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM01 -dm_ini /dm8/data/DM01/dm.ini

# 启动/停止/重启实例
systemctl start DmServiceDM01
systemctl stop DmServiceDM01
systemctl restart DmServiceDM01

# 查看服务状态
systemctl status DmServiceDM01

三、DM数据库备份与还原策略(全量+增量)

数据安全核心是备份还原,DM支持物理备份(冷备/热备)与逻辑备份,生产环境建议采用“全量+增量”的备份策略。

3.1 物理备份(推荐生产环境)

物理备份基于数据文件块级备份,恢复速度快,需依赖DMAP服务(安装后默认启动)。

  • 冷备(脱机备份):数据库实例关闭状态下执行,适用于全量备份:
    # 1. 关闭实例
    systemctl stop DmServiceDM01

    # 2. 使用dmrman工具备份
    su - dmdba
    cd /opt/dmdbms/bin
    ./dmrman
    RMAN> BACKUP DATABASE '/dm8/data/DM01/dm.ini' FULL TO BACKUPSET '/dm8/backup/full_20251220';
  • 热备(联机备份):实例运行状态下执行,需先开启归档模式:
    # 1. 开启归档模式(disql工具执行)
    su - dmdba
    cd /opt/dmdbms/bin
    ./disql sysdba/dameng123@localhost:5236 # 默认用户名/密码sysdba/dameng123
    SQL> ALTER DATABASE MOUNT;
    SQL> ALTER DATABASE ARCHIVELOG;
    SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/archive, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240'; # 归档路径与大小限制
    SQL> ALTER DATABASE OPEN;

    # 2. 执行增量热备
    RMAN> BACKUP DATABASE '/dm8/data/DM01/dm.ini' INCREMENTAL FROM BACKUPSET '/dm8/backup/full_20251220' TO BACKUPSET '/dm8/backup/inc_20251221';

3.2 物理还原(整库恢复)

bash
# 1. 关闭实例
systemctl stop DmServiceDM01

# 2. 还原+恢复(dmrman工具)
./dmrman
RMAN> CHECK BACKUPSET '/dm8/backup/full_20251220'; # 校验备份集
RMAN> RESTORE DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/full_20251220'; # 还原
RMAN> RECOVER DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/full_20251220'; # 恢复
RMAN> RECOVER DATABASE '/dm8/data/DM01/dm.ini' UPDATE DB_MAGIC; # 更新DB_MAGIC(必执行)

# 3. 启动实例
systemctl start DmServiceDM01

3.3 逻辑备份与还原(dexp/dimp工具)

逻辑备份基于SQL语句导出(表、视图、存储过程等),适用于数据迁移场景:

bash
# 逻辑导出(全库)
su - dmdba
cd /opt/dmdbms/bin
./dexp sysdba/dameng123@localhost:5236 file=/dm8/backup/dexp_full.dmp log=/dm8/backup/dexp_full.log full=y

# 逻辑导入
./dimp sysdba/dameng123@localhost:5236 file=/dm8/backup/dexp_full.dmp log=/dm8/backup/dimp_full.log full=y

四、DM数据库函数用法详解(内置+自定义)

DM提供丰富的内置函数,同时支持自定义函数,以下是高频用法与实战案例。

4.1 常用内置函数

函数类型

函数名

功能说明

示例

数值函数

ROUND(n,m)

四舍五入,保留m位小数

ROUND(3.1415,2) → 3.14

字符串函数

SUBSTR(s,pos,len)

截取字符串,从pos位置取len长度

SUBSTR('110101199001011234',17,1) → 3

日期函数

SYSDATE()

获取当前系统时间

SELECT SYSDATE() FROM DUAL; → 2025-12-20 16:30:00

聚合函数

SUM(col)

求和

SELECT SUM(salary) FROM employee; → 总薪资

4.2 自定义函数实战(身份证号解析性别)

需求:根据身份证号第17位(奇数男/偶数女)判断性别,创建自定义函数GET_SEX:

sql
-- 创建自定义函数
CREATE OR REPLACE FUNCTION GET_SEX(id_card IN VARCHAR(50))
RETURN CHAR(2)
AS
v_sex CHAR(2); -- 声明变量存储性别
BEGIN
-- 第17位为性别标识,取该位转数字后判断奇偶
IF TO_NUMBER(SUBSTR(id_card,17,1))%2 = 1 THEN
v_sex := '男';
ELSE
v_sex := '女';
END IF;
RETURN v_sex; -- 返回结果
END;
/

-- 调用函数(假设employee表含identity_card字段)
SELECT identity_card, GET_SEX(identity_card) AS 性别 FROM DMHR.EMPLOYEE;

五、DM SQL程序设计思路与实战

DM SQL程序支持流程控制(IF-ELSE、LOOP)、异常处理等,以下以“员工薪资调整”为例,展示程序设计思路与步骤。

5.1 程序设计核心思路

  1. 需求分析:给部门为“研发部”的员工薪资上涨10%,薪资上限50000元
  1. 逻辑拆解:① 查询研发部员工;② 循环调整薪资;③ 处理薪资上限;④ 异常捕获
  1. 语法选型:使用PL/SQL风格的程序块,包含变量声明、循环、条件判断

5.2 实战代码实现

sql
DECLARE
v_emp_id INT; -- 员工ID
v_current_salary NUMERIC(10,2); -- 当前薪资
v_dept_name VARCHAR(50); -- 部门名称
-- 定义游标查询研发部员工
CURSOR emp_cursor IS
SELECT emp_id, salary FROM employee WHERE dept_name = '研发部';
BEGIN
OPEN emp_cursor; -- 打开游标
LOOP
FETCH emp_cursor INTO v_emp_id, v_current_salary; -- 提取游标数据
EXIT WHEN emp_cursor%NOTFOUND; -- 无数据时退出循环

-- 薪资调整逻辑:上涨10%,不超过50000
IF v_current_salary * 1.1 <= 50000 THEN
UPDATE employee SET salary = salary * 1.1 WHERE emp_id = v_emp_id;
ELSE
UPDATE employee SET salary = 50000 WHERE emp_id = v_emp_id;
END IF;
END LOOP;
CLOSE emp_cursor; -- 关闭游标
COMMIT; -- 提交事务
DBMS_OUTPUT.PUT_LINE('研发部员工薪资调整完成!');

EXCEPTION
WHEN OTHERS THEN
ROLLBACK; -- 异常时回滚
DBMS_OUTPUT.PUT_LINE('薪资调整失败:' || SQLERRM); -- 输出错误信息
END;
/

六、常见问题解决技巧

  • 问题1:安装时提示“可打开文件数过少”解决:执行ulimit -n 65536临时调整,同时修改/etc/security/limits.conf文件永久生效(参考1.1节)。
  • 问题2:实例启动失败,提示“create dir failed”解决:安装目录或数据目录权限不足,执行chown -R dmdba:dinstall /opt/dmdbms和chown -R dmdba:dinstall /dm8/data赋权。
  • 问题3:热备失败,提示“未开启归档模式”解决:按3.1.2节步骤开启归档模式,注意归档路径需存在且有读写权限。
  • 问题4:自定义函数调用时提示“标识符不存在”解决:检查函数名大小写(若CASE_SENSITIVE=1需严格匹配),或在函数名前加用户名(如dmdba.GET_SEX)。

七、总结

本文覆盖麒麟操作系统下DM数据库从部署到开发的全流程实操,重点聚焦静默安装、实例优化配置、备份还原策略、函数应用与SQL程序设计,配套完整命令与问题解决方案。实际应用中需结合业务场景调整参数(如页大小、日志大小),同时养成“定期备份+异常监控”的习惯,保障数据库稳定运行。后续可进一步学习DM数据库的高可用配置(主从复制)、性能调优技巧等进阶内容。

附录:参考资料

  • 1. 达梦数据库官方文档:https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-func
  • 2. 麒麟系统DM数据库安装指南:https://blog.csdn.net/qq_36852471/article/details/121915552

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询