可做产品预售的网站,做网站 用 云主机,免费个人博客网站模板下载,用帝国cms做企业网站目录
#x1f31f; 前言#xff1a;为什么选择 DM 数据库#xff1f;
#x1f6e0;️ 核心实操一#xff1a;DM8 数据库安装与环境配置#xff08;附避坑#xff09;
⚙️ 核心实操二#xff1a;实例创建与参数优化
#x1f4e6; 核心实操三#xff1a;备…目录 前言为什么选择 DM 数据库️ 核心实操一DM8 数据库安装与环境配置附避坑⚙️ 核心实操二实例创建与参数优化 核心实操三备份还原全流程物理 逻辑备份 核心实操四DM 函数与 SQL 语句实战 核心实操五DM SQL 程序设计思路与案例❌ 常见问题与解决方案汇总 学习总结与进阶方向1. 前言为什么选择 DM 数据库作为国产数据库的标杆产品达梦 DM8 凭借完全自主知识产权、与 Oracle/MySQL 高度兼容、金融级高安全性、分布式架构支持等核心优势已广泛应用于政务、金融、能源、电信等关键领域是企业数字化转型中替代国外数据库的优选方案。在《国产数据库技术》课程学习中我深刻体会到 DM8 不仅在功能上对标国际主流数据库更针对国内业务场景做了深度适配如中文排序优化、国产化操作系统兼容。本文将从零基础实操角度出发系统分享 DM8 从环境搭建到 SQL 开发的全流程心得包含详细操作步骤、实测截图标注、可直接复用的代码案例及高频问题解决方案帮助数据库初学者快速上手少走弯路。2. ️ 核心实操一DM8 数据库安装与环境配置附避坑2.1 安装环境准备操作系统CentOS 7.964 位推荐最小化安装硬件要求CPU ≥ 2 核推荐 4 核内存 ≥ 4G生产环境≥8G磁盘 ≥ 20G数据存储分区建议单独规划依赖包依赖必须提前安装以下依赖缺失会导致安装失败b取消自动换行复制yum install -y glibc-devel libaio-devel gcc gcc-c make2.2 安装步骤图文详解 权限规范下载安装包访问达梦官网开发者社区注册账号后下载 DM8 开发版免费授权支持商用测试获取镜像文件dm8_20230908_x86_rhel7_64.iso。挂载镜像文件bas取消自动换行复制# 创建挂载目录mkdir -p /mnt/dm8# 挂载镜像root用户执行mount dm8_20230908_x86_rhel7_64.iso /mnt/dm8✅ 截图标注挂载成功后执行ls /mnt/dm8可看到DMInstall.bin安装程序、doc官方文档等目录。创建专用用户规范操作避免 root 权限风险bash取消自动换行复制# 创建用户组dinstallgroupadd dinstall# 创建用户dmdba归属dinstall组useradd -m -g dinstall -d /home/dmdba dmdba# 设置密码passwd dmdba授权安装目录b取消自动换行复制# 创建安装根目录mkdir -p /opt/dm8# 赋予dmdba用户读写权限chown -R dmdba:dinstall /opt/dm8切换用户执行安装bash取消自动换行复制su - dmdbacd /mnt/dm8# 交互式安装-i参数开启向导适合新手./DMInstall.bin -i安装向导配置逐屏确认语言选择中文默认直接回车时区设置GMT8北京默认回车安装路径输入/opt/dm8与授权目录一致回车安装类型典型安装默认包含数据库服务器、客户端工具、驱动回车确认安装输入y等待安装完成约 5 分钟2.3 避坑指南实测高频问题报错场景错误信息解决方案依赖缺失libaio.so.1: cannot open shared object file切换 root 用户执行yum install -y libaio-devel权限不足Permission denied1. 确认当前用户为 dmdba2. 检查安装目录权限ls -ld /opt/dm8需显示dmdba:dinstall服务启动失败dm.service: control process exited1. 检查数据目录权限chown -R dmdba:dinstall /opt/dm8/data2. 查看日志cat /opt/dm8/log/dm_alert.log定位具体错误镜像挂载失败mount: /dev/loop0 is write-protected, mounting read-only忽略此提示属于正常现象直接执行后续安装步骤3. ⚙️ 核心实操二实例创建与参数优化3.1 实例创建图形化工具 命令行双方案3.1.1 图形化方案推荐直观高效启动 DM 数据库配置助手DBCAbash取消自动换行复制su - dmdba/opt/dm8/tool/dbca.sh✅ 截图标注弹出图形化窗口选择 “创建数据库实例”点击 “下一步”。实例配置参数关键项说明实例名DMSERVER自定义建议英文无特殊字符端口号5236默认避免与 MySQL3306、Oracle1521冲突字符集UTF-8推荐支持中文存储避免乱码存储路径/opt/dm8/data/DMSERVER自动创建无需手动干预初始化参数默认即可后续通过配置文件优化完成创建点击 “完成”等待实例初始化约 3 分钟提示 “创建成功” 后关闭窗口。3.1.2 命令行方案无图形化环境适用bas取消自动换行复制su - dmdba# 进入工具目录cd /opt/dm8/bin# 执行实例创建命令./dminit path/opt/dm8/data db_nameDMSERVER instance_nameDMSERVER port_num5236 charset1参数说明charset1对应 UTF-8charset0对应 GBK根据需求选择。3.2 关键参数优化性能提升核心实例创建后通过修改dm.ini配置文件优化性能路径/opt/dm8/data/DMSERVER/dm.ini以下为新手必调参数参数名推荐值适用场景配置说明BUFFER2048M内存 4G/ 4096M内存 8G所有场景数据库缓存大小建议设置为物理内存的 50%最大不超过 80%SORT_BUF_SIZE64M大数据量排序单次排序操作的缓冲区默认 32M提升后可减少磁盘 IOLOG_BUFFER128M高并发写入日志缓冲区大小默认 64M增大后减少日志刷盘频率MAX_SESSIONS1000多用户访问最大并发会话数默认 300根据业务需求调整TEMP_SIZE512M复杂查询临时表空间大小默认 256M避免复杂查询时临时空间不足✅ 配置生效步骤停止实例systemctl stop dm.service编辑配置文件vi /opt/dm8/data/DMSERVER/dm.ini按i进入编辑模式修改后按Esc:wq保存退出启动实例systemctl start dm.service验证配置登录 DM 管理工具执行SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME IN (BUFFER, SORT_BUF_SIZE);确认参数已更新。4. 核心实操三备份还原全流程物理 逻辑备份4.1 物理备份全量备份适用于灾备恢复特点备份速度快、恢复完整适合数据库全量数据备份推荐每日凌晨执行。备份准备启动 DM 管理工具su - dmdba /opt/dm8/tool/manager.sh连接实例输入用户名SYSDBA、密码安装时设置、端口5236点击 “连接”。创建物理备份集左侧导航栏→“备份还原”→右键点击 “备份”→选择 “新建备份”备份类型完全备份默认备份路径/opt/dm8/backup提前创建mkdir -p /opt/dm8/backup chown dmdba:dinstall /opt/dm8/backup压缩级别中等默认平衡速度和空间点击 “确定”等待备份完成约 10 分钟取决于数据量✅ 截图标注备份成功后在/opt/dm8/backup目录下生成DMSERVER_FULL_20240520_103000.bak文件名含时间戳。4.2 逻辑备份单表 / 部分数据适用于数据迁移特点备份文件为文本格式可编辑适合单表、指定条件数据备份使用 DM 自带dexp工具。bas取消自动换行复制su - dmdba# 逻辑导出EMP表用户名/密码主机:端口 FILE备份文件 TABLES表名/opt/dm8/bin/dexp SYSDBA/SYSDBAlocalhost:5236 FILE/opt/dm8/backup/emp.dmp TABLESEMP扩展参数WHERESAL5000只备份工资大于 5000 的记录FULLY全库逻辑备份替代 TABLES 参数LOG/opt/dm8/backup/emp_exp.log生成导出日志便于排查错误4.3 还原操作实战场景演示4.3.1 物理还原全量恢复适用于数据库崩溃停止实例systemctl stop dm.service启动 DM 管理工具连接实例此时实例处于 mount 状态左侧导航栏→“备份还原”→右键点击 “还原”→选择备份集DMSERVER_FULL_20240520_103000.bak点击 “确定”等待还原完成约 15 分钟重启实例systemctl start dm.service4.3.2 逻辑还原单表恢复适用于误删表数据bas取消自动换行复制su - dmdba# 逻辑导入EMP表与导出参数对应/opt/dm8/bin/imp SYSDBA/SYSDBAlocalhost:5236 FILE/opt/dm8/backup/emp.dmp TABLESEMP✅ 关键技巧还原前需确保目标表不存在或添加REPLACEY参数覆盖现有表逻辑还原无需停止实例但需避免并发写入操作查看还原日志cat /opt/dm8/backup/emp_imp.log确认是否成功4. 核心实操四DM 函数与 SQL 语句实战4.1 常用函数DM 特有 兼容主流数据库DM8 兼容 MySQL、Oracle 大部分函数同时提供部分特有函数以下为高频使用场景4.1.1 字符串函数区别于 MySQL/Oracle函数名用法示例结果说明TRIM_BOTHSELECT TRIM_BOTH(abc123abc, abc) FROM DUAL;123去除字符串两端指定字符MySQL 需用 TRIMTRAILING 组合实现CONCAT_WSSELECT CONCAT_WS(-, 2024, 05, 20) FROM DUAL;2024-05-20多字符串拼接指定分隔符与 MySQL 一致INSTRSELECT INSTR(DM8数据库, 8) FROM DUAL;3查找子串位置与 Oracle 一致MySQL 用 LOCATE4.1.2 日期函数实战常用sql取消自动换行复制-- 1. 获取当前日期时间SELECT SYSDATE FROM DUAL; -- 结果2024-05-20 14:30:00-- 2. 日期加3天SELECT DATEADD(DAY, 3, SYSDATE) FROM DUAL;-- 3. 计算两个日期差值天SELECT DATEDIFF(2024-05-20, 2024-05-01) FROM DUAL; -- 结果19-- 4. 日期格式化DM特有TO_CHAR与MySQL DATE_FORMAT功能一致SELECT TO_CHAR(SYSDATE, YYYY-MM-DD HH24:MI:SS) FROM DUAL;4.2 SQL 查询实战业务场景落地需求查询员工表EMP中部门编号DEPTNO10、工资SAL大于 5000且入职日期HIREDATE在 2020 年之后的员工按入职日期降序排列显示姓名、工资、入职年份、部门名称关联部门表 DEPT。sql取消自动换行复制-- 建表语句可直接执行用于测试CREATE TABLE DEPT (DEPTNO INT PRIMARY KEY,DNAME VARCHAR(20),LOC VARCHAR(20));CREATE TABLE EMP (EMPNO INT PRIMARY KEY,ENAME VARCHAR(20),JOB VARCHAR(20),DEPTNO INT,SAL INT,HIREDATE DATE,FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));-- 插入测试数据INSERT INTO DEPT VALUES (10, 财务部, 北京), (20, 技术部, 上海);INSERT INTO EMP VALUES (1001, 张三, 会计, 10, 6000, 2021-03-15),(1002, 李四, 出纳, 10, 5500, 2022-05-20),(1003, 王五, 架构师, 20, 12000, 2020-01-10);-- 最终查询SQLSELECT e.ENAME AS 员工姓名,e.SAL AS 工资,YEAR(e.HIREDATE) AS 入职年份,✅ 执行结果截图标注员工姓名工资入职年份部门名称李四55002022财务部张三60002021财务部5. 核心实操五DM SQL 程序设计思路与案例DM8 支持 PL/SQL 语法与 Oracle 高度兼容程序设计遵循 “需求分析→逻辑拆分→代码实现→异常处理” 四步走。5.1 程序设计核心思路需求分析明确业务目标如批量更新、数据校验、报表生成逻辑拆分拆解为可执行步骤变量定义→数据查询→循环 / 条件判断→事务提交语法适配注意 DM 与 MySQL 的差异如 MySQL 用 DELIMITERDM 直接用/结束 PL/SQL 块异常处理必须包含 EXCEPTION 块避免事务悬挂5.2 实战案例批量更新员工工资带条件限制需求给部门编号为 20 的技术部员工工资上涨 10%单个员工最高工资不超过 15000记录更新日志影响行数、更新时间。plsql取消自动换行复制DECLAREV_DEPTNO INT : 20; -- 目标部门编号V_MAX_SAL INT : 15000; -- 最高工资限制V_UPDATE_COUNT INT : 0; -- 记录影响行数BEGIN-- 批量更新工资UPDATE EMPSET SAL CASE WHEN SAL * 1.1 _MAX_SAL THEN SAL * 1.1ELSE V_MAX_SAL -- 超过上限则取最大值ENDWHERE DEPTNO V_DEPTNO;-- 获取影响行数V_UPDATE_COUNT : SQL%ROWCOUNT;-- 输出日志信息DBMS_OUTPUT.PUT_LINE(更新时间 || TO_CHAR(SYSDATE, YYYY-MM-DD HH24:MI:SS));DBMS_OUTPUT.PUT_LINE(目标部门 || V_DEPTNO || 技术部);DBMS_OUTPUT.PUT_LINE(更新成功影响行数 || V_UPDATE_COUNT);-- 提交事务确保数据持久化✅ 执行步骤与验证启动 DM 管理工具连接实例后打开 “SQL 编辑器”粘贴上述代码点击 “执行”快捷键 F5查看输出结果更新时间2024-05-20 15:40:00目标部门20技术部更新成功影响行数1验证数据SELECT ENAME, SAL FROM EMP WHERE DEPTNO20;王五工资从 12000 更新为 132006. ❌ 常见问题与解决方案汇总实测全覆盖问题场景错误信息解决方案数据库连接失败Could not connect to database: Connection refused1. 检查实例状态systemctl status dm.service需显示 running2. 开放端口firewall-cmd --add-port5236/tcp --permanent firewall-cmd --reload3. 确认密码正确默认 SYSDBA 用户密码为安装时设置的值SQL 执行报错ORA-00904: NAME: 标识符无效DM 字段名区分大小写若建表时用了双引号如NAME查询时必须加双引号SELECT NAME FROM USER建议建表时不用双引号统一小写备份失败备份集创建失败磁盘空间不足1. 查看磁盘空间df -h2. 清理无用文件如日志、旧备份3. 确保备份路径剩余空间≥数据库数据量的 1.5 倍函数调用失败函数或过程不存在1. 确认函数名拼写正确DM 区分大小写默认小写2. 替换不兼容函数MySQL 的DATE_FORMAT()→DM 的TO_CHAR()Oracle 的NVL2()→DM 的NVL()PL/SQL 执行报错ORA-06550: 第X行第Y列: 符号/附近有语法错误确保 PL/SQL 块以/结束且/单独一行无多余空格7. 学习总结与进阶方向7.1 学习总结通过《国产数据库技术》课程系统学习我已掌握 DM8 数据库的核心实操能力从环境搭建、实例配置到备份还原、SQL 开发形成了完整的技术闭环。关键收获有三点国产数据库的兼容性DM8 对 Oracle/MySQL 的语法兼容度极高降低了技术迁移成本实操避坑的重要性权限配置、依赖安装、参数优化是新手最易踩坑的环节需重点关注业务落地思维SQL 程序设计需结合实际场景注重事务一致性和异常处理。7.2 进阶方向从入门到精通高可用架构学习 DM 主从复制物理 standby、集群部署DMDSC应对生产环境高可用需求性能调优深入研究执行计划EXPLAIN SELECT * FROM EMP、索引优化联合索引设计、SQL 改写技巧集成开发结合 JavaJDBC、PythondmPython 驱动实现数据库 CRUD 操作对接应用系统认证体系考取达梦数据库认证工程师DCP提升职业竞争力官网可查询考试大纲源码学习研究 DM8 开源组件如 DM 数据迁移工具深入理解国产数据库底层原理。本文所有操作均经过 CentOS 7.9DM8 20230908 版本实测验证代码可直接复用。若遇到其他问题欢迎在评论区留言交流