DCA(达梦认证管理员) 是达梦数据库针对国产数据库从业者设立的初级认证,主要考察数据库基本操作与管理能力。本文为系统培训的知识整理,涵盖公司背景、数据库理论、安装部署、实例管理、SQL 应用等核心模块。


目录

  1. 达梦公司概况与认证体系
  2. 数据库理论基础
  3. 数据库架构演进与分类
  4. 达梦企业版安装与目录结构
  5. 数据库实例管理
  6. 逻辑存储结构与表空间管理
  7. 用户、安全与权限管理
  8. 表结构与 SQL 语言基础
  9. SQL 查询与高级应用
  10. 索引、视图与数据库对象
  11. 逻辑备份与还原
  12. PL/SQL 程序开发
  13. ODBC 与 Python 驱动配置

一、达梦公司概况与认证体系

1.1 公司背景与核心技术

  • 企业实力:达梦成立于 2000 年,拥有六大研发中心(北京、上海等),持有专利超 320 项及软件著作权 370 余项,具备全栈产品自主知识产权。
  • 业务范围:提供覆盖数据全生命周期的产品与解决方案,深度服务于金融、能源、电力、通信等关键行业。

1.2 产品矩阵与技术生态

  • 核心数据库产品:涵盖关系型数据库(DM8)、共享存储集群(DSC)、读写分离集群(DMRWC)、数据守护集群(DataWatch)及分布式计算集群(DPC)。
  • 多模数据库支持:除关系型外,还提供图数据库(楚天梦图)、缓存数据库(对标 Redis)、文档数据库(对标 MongoDB)、时序数据库(对标 TimescaleDB)等非关系型产品。
  • 生态工具链:包含数据集成工具 DIS(ETL)、逻辑复制软件 DRS(OGG)、数据校验软件 DVS、融合管理平台 DFM 及开发者工具 SQLark/百灵连接。

1.3 认证体系与学习路径

认证级别 全称 定位
DAE 达梦助理工程师 零基础入门
DCA 达梦认证管理员 初级运维开发
DCP 达梦认证专家 中级架构师
DCM 达梦认证大师 高级顾问

考核通过后颁发工信部人才交流中心与达梦联合认证证书。


二、数据库理论基础

2.1 基本定义与组成要素

概念 定义
数据库(DB) 存储在磁盘上的有组织的数据集合
数据库管理系统(DBMS) 操作和管理数据库的大型软件
数据库系统(DBS) 由硬件、软件和人构成的完整生态系统

数据管理发展史:人工管理阶段(20 世纪 50 年代中期前)→ 文件系统阶段(1955—1965 年)→ 数据库系统阶段。

2.2 事务特性(ACID)

事务是数据库的基本操作单元,必须满足以下四个特性:

特性 说明
原子性(Atomicity) 事务内所有操作要么全部完成,要么全部不完成
一致性(Consistency) 事务执行前后数据库必须保持一致性状态,如转账前后总金额不变
隔离性(Isolation) 并发事务之间互不影响,一个事务看不到其他未提交事务的中间状态
持久性(Durability) 事务一旦提交,对数据的更改即为永久性的

2.3 关系模型三要素

  • 数据结构:二维表(关系)
  • 数据操作:增、删、改、查
  • 数据完整性约束:实体完整性、参照完整性、自定义完整性

2.4 表关联与实体关系

  • 一对一:如人与身份证号
  • 一对多:如科室与医生
  • 多对多:如学生与课程

核心术语:元组代表行记录,属性代表字段/列,实体代表客观事物集合(如学生群体)。


三、数据库架构演进与分类

3.1 单机与主备架构

  • 单机架构局限:部署集中但存在单点故障风险,只能纵向扩展,扩容需停机,通常仅用于测试环境。
  • 主备架构改进:引入备库提升可用性,主库对外提供读写服务,备库仅作备份,但仍存在资源浪费和写压力集中的问题。

3.2 主从与多活架构

  • 主从架构:适用于读多写少场景,从库分担读请求,支持故障自动切换,但无法解决写入瓶颈。
  • 多活架构
    • 双向同步:可能存在数据不一致风险
    • 共享存储:无数据一致性问题,但存储端可能成为性能瓶颈

3.3 分片与无共享架构

  • 分片技术:将大表水平拆分到不同节点以应对海量数据和高并发,但涉及跨片查询和分布式事务处理。
  • 存算一体:各节点角色对等。
  • 存算分离:计算节点无状态,存储节点负责数据持久化,适合构建超大规模集群。

四、达梦企业版安装与目录结构

4.1 安装前环境准备

版本 适用场景
企业版 支持集群功能,生产首选
标准版 满足中小企业需求
安全版 增强安全特性
开发版 仅供学习测试(一年授权期)

硬件最低要求:CPU 奔腾 4 以上,内存至少 4GB(推荐 8GB),临时空间需预留 3GB 以上。

操作系统兼容性:支持 Windows、Linux、Unix 及国产 OS;glibc 版本需 ≥ 2.28,内核版本需 ≥ 2.6。

4.2 图形化安装流程

  1. 用户权限规范:严禁使用 root 用户直接安装数据库,必须创建专用的 dmdba 用户并赋予相应目录权限。
  2. DISPLAY 变量设置:远程图形化安装需正确设置 DISPLAY 变量,例如:
    export DISPLAY=192.168.17.1:0.0
    xhost +
    
  3. 关键步骤:安装时需指定正确的安装目录、端口号及密码;安装完成后务必以 root 身份执行脚本注册辅助插件服务。

4.3 命令行交互式安装

./DMInstall.bin -i    # 启动交互式安装,无需图形界面

按提示依次输入语言、时区、安装类型、安装路径等信息完成安装。

4.4 安装目录结构解析

目录 说明
bin/ 存放可执行文件和动态链接库(.so),是数据库管理和客户端工具的核心位置
doc/ 包含官方技术文档和使用说明,考试期间允许查阅
tool/ 集成运维管理工具:Console(控制台)、Analysis(性能分析)、DTS(数据迁移)、Manager(管理工具)
sample/ 参数配置模板(dm.ini)、示例数据库脚本(bookshop、whr)及优化调整脚本
script/ 服务注册与卸载脚本,需由 root 用户执行

五、数据库实例管理

5.1 核心概念

  • 实例与数据库的关系:实例是由后台进程/线程及共享内存组成的运行实体;数据库是存储在磁盘上的物理文件集合。单机环境为一对一,共享存储集群(如 DSC)为一对多。
  • 初始化参数:页大小(Page Size)、簇大小(Extent Size)、字符集等参数在数据库生命周期内不可修改,必须在建库时谨慎设定。

5.2 创建方式对比

工具 特点 注意事项
图形化工具(dbca 可视化操作,适合新手 需手动执行生成的脚本以注册服务
命令行工具(dminit 适合自动化部署,不依赖 GUI 不会自动注册服务,不创建示例库,需后续手工补充

5.3 关键初始化参数

参数 说明
字符集 GB18030:每个汉字 2 字节,节省空间;UTF-8:每个汉字 3 字节,通用性强
大小写敏感 开启后 tableTABLE 视为不同对象;迁移时源端与目标端必须保持一致
行尾空格填充 开启时 'A''A ' 视为不同字符串;关闭时忽略行尾空格(兼容 Oracle 行为)

5.4 服务注册与启停管理

# 注册系统服务
dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm/data/DAMENG/dm.ini

# 系统服务方式管理(推荐)
systemctl start DmServiceDMSERVER
systemctl stop DmServiceDMSERVER
systemctl status DmServiceDMSERVER

⚠️ 重要原则:必须遵循"用什么方式启动就用什么方式停止",严禁交叉使用不同方式启停,否则可能导致服务异常。

四种启动方式:图形化、系统服务(推荐)、前台(dmserver 命令)、后台方式。

5.5 客户端连接工具

  • Manager:图形化管理界面,考试和日常维护中最常用。
  • disql:命令行工具,适合脚本自动化。
  • 第三方工具:如 DBeaver 等。

当密码中包含特殊符号(如 @)时,连接字符串中必须使用双引号包裹密码,例如 disql SYSDBA/"P@ssword"@localhost:5236

5.6 数据库状态管理

Open ←→ Mount
Open ←→ Suspend
Mount ✗ Suspend(不能直接互切)
状态 说明
Open 正常运行状态,允许读写业务数据
Mount 配置状态,仅允许访问动态性能视图,不允许访问业务数据
Suspend 挂起状态(只读),事务提交会被阻塞

六、逻辑存储结构与表空间管理

6.1 逻辑体系结构

数据库 → 表空间 → 段 → 簇 → 页(最小 I/O 单元)

预定义表空间

表空间 用途
SYSTEM 存放元数据(数据字典)
ROLL 存放前镜像(回滚数据)
TEMP 排序、临时计算
MAIN 用户默认表空间

6.2 表空间维护操作

-- 创建表空间
CREATE TABLESPACE "TEST_TS"
DATAFILE '/dm/data/DAMENG/test01.dbf' SIZE 128 AUTOEXTEND ON NEXT 32;

-- 扩容(增加数据文件)
ALTER TABLESPACE "TEST_TS"
ADD DATAFILE '/dm/data/DAMENG/test02.dbf' SIZE 128;

-- 表空间脱机(维护用)
ALTER TABLESPACE "TEST_TS" OFFLINE;
ALTER TABLESPACE "TEST_TS" ONLINE;

⚠️ 系统表空间(SYSTEM)禁止脱机;数据文件迁移必须在 Open 状态下先将表空间脱机,修改路径后再联机。

6.3 重做日志管理

模式 行为
非归档模式 日志文件循环覆盖,无法基于日志恢复
归档模式 日志覆盖前先备份,保证完整恢复能力

⚠️ 增加、重命名或迁移联机日志文件必须在 Mount 状态下进行,不能在 Open 状态下直接操作。


七、用户、安全与权限管理

7.1 模式(Schema)管理

  • 达梦中,一个用户可拥有多个模式,但每个模式仅属于一个用户(一对多关系)。
  • 不同模式下的对象名称允许重名,通过 模式名.对象名 进行区分。
-- 查看所有模式
SELECT * FROM SYS.SYSOBJECTS WHERE TYPE$='SCH';

-- 切换当前模式
SET SCHEMA 模式名;

7.2 资源限制项(Profile)配置

-- 创建 Profile
CREATE PROFILE "SECURITY_PROFILE" LIMIT
    PASSWORD_LIFE_TIME    90,     -- 口令有效期(天)
    GRACE_TIME            7,      -- 宽限期(天)
    FAILED_LOGIN_ATTEMPTS 5,      -- 最大失败登录次数
    PASSWORD_LOCK_TIME    1/24,   -- 锁定时长(天,此处为1小时)
    IDLE_TIME             30,     -- 最大空闲时间(分钟)
    SESSION_PER_USER      10;     -- 最大并发会话数

-- 分配给用户
ALTER USER 用户名 PROFILE "SECURITY_PROFILE";

7.3 权限与角色体系

权限分类

  • 系统权限:DDL 操作(CREATE TABLE、DROP TABLE 等)
  • 对象权限:DML 操作(SELECT、INSERT、UPDATE、DELETE 等)
-- 授权
GRANT SELECT, INSERT ON 模式名.表名 TO 用户名 WITH GRANT OPTION;

-- 回收权限
REVOKE SELECT ON 模式名.表名 FROM 用户名;

-- 创建角色并授予用户
CREATE ROLE "APP_ROLE";
GRANT SELECT ON 模式名.表名 TO "APP_ROLE";
GRANT "APP_ROLE" TO 用户名;

预定义角色

角色 说明
DBA 超级管理员,拥有所有权限
RESOURCE 拥有创建数据库对象的权限
PUBLIC 所有用户默认拥有的公共权限

SYS 用户不可登录,仅存放数据字典。严禁随意删除系统预定义用户(SYSDBA、SYSAUDITOR、SYSSSO)。

7.4 用户生命周期管理

-- 创建用户
CREATE USER "APP_USER" IDENTIFIED BY "Password123"
DEFAULT TABLESPACE "MAIN"
DEFAULT INDEX TABLESPACE "MAIN"
PROFILE "SECURITY_PROFILE";

-- 锁定 / 解锁用户
ALTER USER "APP_USER" ACCOUNT LOCK;
ALTER USER "APP_USER" ACCOUNT UNLOCK;

-- 删除用户
DROP USER "APP_USER" CASCADE;

八、表结构与 SQL 语言基础

8.1 SQL 语言分类

分类 全称 代表语句
DDL 数据定义语言 CREATE / ALTER / DROP
DML 数据操纵语言 INSERT / UPDATE / DELETE
DQL 数据查询语言 SELECT
DCL 数据控制语言 GRANT / REVOKE
TCL 事务控制语言 COMMIT / ROLLBACK

8.2 达梦支持的表类型

类型 说明
堆表 数据无序存储,适合频繁 DML
索引组织表(IOT) 达梦默认表类型,数据按主键顺序存储
列存表 适合 OLAP 分析场景
外部表 映射外部文件,只读
临时表 会话或事务级临时数据

8.3 常用数据类型

分类 类型 说明
字符型 CHAR(n) 固定长度
字符型 VARCHAR(n) 可变长度
数值型 NUMBER / DECIMAL(p,s) DECIMAL(10,2) 表示总长10位,小数占2位
日期时间 DATE / TIMESTAMP
大字段 BLOB / CLOB / TEXT 不支持普通索引,只能建全文索引
布尔型 BOOLEAN

8.4 表的七大约束

CREATE TABLE "EMPLOYEE" (
    "EMP_ID"     INT           IDENTITY(1, 1),   -- 自增约束
    "EMP_NO"     VARCHAR(20)   NOT NULL UNIQUE,   -- 非空 + 唯一约束
    "EMP_NAME"   VARCHAR(50)   NOT NULL,          -- 非空约束
    "DEPT_ID"    INT,
    "SALARY"     DECIMAL(10,2) DEFAULT 0.00       -- 默认值约束
        CHECK ("SALARY" >= 0),                    -- 检查约束
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMP_ID"),   -- 主键约束
    CONSTRAINT "FK_DEPT" FOREIGN KEY ("DEPT_ID")  -- 外键约束
        REFERENCES "DEPT"("DEPT_ID")
);
约束 说明
PRIMARY KEY 不允许重复且不能为 NULL,每张表只能有一个主键
FOREIGN KEY 子表引用父表的主键或唯一键
UNIQUE 列值不能重复,但允许一个 NULL 值
NOT NULL 列值不允许为 NULL
CHECK 限制列值满足指定条件表达式
DEFAULT 未指定列值时使用默认值填充
IDENTITY 由系统自动生成递增值

8.5 TRUNCATE 与 DELETE 的区别

对比项 TRUNCATE DELETE
语言类型 DDL DML
执行速度 极快 慢(逐行删除)
日志量
回滚支持 ❌ 不支持 ✅ 支持
触发器 ❌ 不触发 ✅ 触发
自增序列 ✅ 重置 ❌ 不重置
条件过滤 ❌ 不支持 ✅ 支持 WHERE

九、SQL 查询与高级应用

9.1 查询语句执行顺序

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

关键区别WHERE 在分组前过滤原始行;HAVING 在分组后过滤聚合结果,可使用聚合函数。列别名可在 SELECTORDER BY 中使用,但不能在 WHEREHAVING 中直接引用

9.2 运算符与空值处理

-- NULL 判断必须用 IS NULL,严禁用 =
SELECT * FROM T WHERE COL IS NULL;
SELECT * FROM T WHERE COL IS NOT NULL;

-- NULL 不能参与算术运算,结果仍为 NULL
SELECT NULL + 1;   -- 结果:NULL

-- 字符串拼接
SELECT '姓名:' || NAME FROM T;
SELECT CONCAT('姓名:', NAME) FROM T;

9.3 多表连接查询

-- 内连接:仅返回匹配的记录
SELECT e.*, d.DEPT_NAME
FROM EMPLOYEE e
INNER JOIN DEPT d ON e.DEPT_ID = d.DEPT_ID;

-- 左外连接:保留左表所有记录,右表无匹配补 NULL
SELECT e.*, d.DEPT_NAME
FROM EMPLOYEE e
LEFT JOIN DEPT d ON e.DEPT_ID = d.DEPT_ID;

-- 全外连接
SELECT e.*, d.DEPT_NAME
FROM EMPLOYEE e
FULL JOIN DEPT d ON e.DEPT_ID = d.DEPT_ID;

⚠️ N 张表连接时至少需要 N-1 个连接条件,否则会产生笛卡尔积。建议使用 JOIN ON 标准语法替代旧式逗号分隔写法。

9.4 分组聚合与多维分析

-- 基础分组聚合
SELECT DEPT_ID, COUNT(*) AS CNT, AVG(SALARY) AS AVG_SAL
FROM EMPLOYEE
GROUP BY DEPT_ID
HAVING COUNT(*) > 5;

-- ROLLUP:层次化汇总(N+1 种组合)
SELECT YEAR, MONTH, SUM(SALES)
FROM SALES_DATA
GROUP BY ROLLUP(YEAR, MONTH);

-- CUBE:多维交叉分析(2^N 种组合,性能消耗较大)
SELECT REGION, PRODUCT, SUM(SALES)
FROM SALES_DATA
GROUP BY CUBE(REGION, PRODUCT);

-- GROUPING SETS:灵活指定分组维度
SELECT REGION, PRODUCT, SUM(SALES)
FROM SALES_DATA
GROUP BY GROUPING SETS((REGION), (PRODUCT), ());

9.5 子查询

-- 标量子查询(返回单行单列)
SELECT EMP_NAME, SALARY,
       (SELECT AVG(SALARY) FROM EMPLOYEE) AS AVG_SAL
FROM EMPLOYEE;

-- EXISTS 子查询(通常比 IN 性能更好)
SELECT * FROM DEPT d
WHERE EXISTS (
    SELECT 1 FROM EMPLOYEE e WHERE e.DEPT_ID = d.DEPT_ID
);

-- DML 中使用子查询:将研发部员工薪资上调 5%
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.05
WHERE DEPT_ID = (
    SELECT DEPT_ID FROM DEPT WHERE DEPT_NAME = '研发部'
);

9.6 排序与分页

-- 推荐写法一:TOP N, M(从第M+1条开始取N条)
SELECT TOP 10, 20 * FROM EMPLOYEE ORDER BY EMP_ID;

-- 推荐写法二:LIMIT ... OFFSET ...
-- LIMIT 10 OFFSET 20 表示跳过前20条,返回第21到第30条
SELECT * FROM EMPLOYEE ORDER BY EMP_ID LIMIT 10 OFFSET 20;

-- WITH TIES:最后一行有并列时,一并包含所有并列记录
SELECT TOP 10 WITH TIES * FROM EMPLOYEE ORDER BY SALARY DESC;

ROWNUM 伪列方式语法繁琐,属于传统老式写法,不推荐在生产环境中使用。


十、索引、视图与数据库对象

10.1 索引管理

10.1.1 索引分类
类型 说明
聚簇索引(一级索引) 决定数据的物理存储顺序,通常为主键
非聚簇索引(二级索引) 包含索引列值及主键值
全文索引 用于大字段(BLOB、CLOB、TEXT)的文本搜索
位图索引 适用于低基数列(如性别、状态)
空间索引 用于地理空间数据

达梦默认表结构为索引组织表(IOT)。索引可以独立存放在不同的表空间中,以减少磁盘争用。

10.1.2 索引创建原则

适合建索引的场景

  • 高频查询的列
  • 被驱动表的连接列
  • 排序、分组的列
  • 主键/唯一键(自动创建)

不适合建索引

  • 小表(全表扫描更快)
  • 大字段类型(BLOB、CLOB、TEXT)
  • 区分度低的列(如性别)

⚠️ 组合索引需将前导列(区分度最高的列)放在最前面,因为达梦不支持索引跳跃扫描。

-- 创建组合索引
CREATE INDEX "IDX_EMP_DEPT_SALARY" ON EMPLOYEE(DEPT_ID, SALARY);

-- 创建唯一索引
CREATE UNIQUE INDEX "IDX_EMP_NO" ON EMPLOYEE(EMP_NO);
10.1.3 索引维护与监控
-- 重建失效索引(必须加 ONLINE 选项避免锁表)
ALTER INDEX "IDX_EMP_DEPT_SALARY" REBUILD ONLINE;

-- 开启索引使用监控
ALTER INDEX "IDX_EMP_DEPT_SALARY" MONITORING USAGE;

-- 查看索引使用情况
SELECT * FROM DBA_OBJECT_USAGE WHERE INDEX_NAME = 'IDX_EMP_DEPT_SALARY';
状态属性 说明
VALID / INVALID 索引是否有效
VISIBLE / INVISIBLE 索引对优化器是否可见

10.2 视图

10.2.1 普通视图

视图是虚拟表,不存储数据,仅保存查询定义。

-- 创建视图
CREATE OR REPLACE VIEW "V_EMP_INFO" AS
SELECT e.EMP_NO, e.EMP_NAME, d.DEPT_NAME, e.SALARY
FROM EMPLOYEE e
JOIN DEPT d ON e.DEPT_ID = d.DEPT_ID;

-- 使用视图
SELECT * FROM "V_EMP_INFO" WHERE DEPT_NAME = '研发部';
视图类型 说明 是否可更新
简单视图 基于单表,不含聚合函数 ✅ 通常可更新
复杂视图 多表连接或含聚合函数 ❌ 需借助替代触发器
动态性能视图 实时内存数据 ❌ 只读
10.2.2 物化视图

物化视图是物理表,预先计算并存储查询结果,适用于 OLAP 场景。

-- 创建物化视图(按需完全刷新)
CREATE MATERIALIZED VIEW "MV_DEPT_SALES"
REFRESH COMPLETE ON DEMAND AS
SELECT DEPT_ID, SUM(SALARY) AS TOTAL_SAL
FROM EMPLOYEE
GROUP BY DEPT_ID;

-- 手动刷新
CALL DBMS_MVIEW.REFRESH('MV_DEPT_SALES', 'C');  -- C=COMPLETE
刷新策略 说明
COMPLETE(完全刷新) 重新执行全量查询,适合数据量较小的场景
FAST(快速刷新) 基于物化视图日志进行增量刷新,需提前创建日志
FORCE(强制刷新) 优先快速刷新,不支持时降级为完全刷新

10.3 序列(Sequence)

-- 创建序列
CREATE SEQUENCE "SEQ_EMP_ID"
START WITH 1        -- 起始值
INCREMENT BY 1      -- 步长
CACHE 20            -- 缓存大小
NOCYCLE;            -- 不循环

-- 获取序列值(首次使用前必须先调用 NEXTVAL)
SELECT SEQ_EMP_ID.NEXTVAL;   -- 获取下一个值
SELECT SEQ_EMP_ID.CURRVAL;   -- 获取当前值

10.4 同义词(Synonym)

-- 创建私有同义词(需指定模式名)
CREATE SYNONYM "EMP" FOR "SYSDBA"."EMPLOYEE";

-- 创建公共同义词(所有用户可直接访问)
CREATE PUBLIC SYNONYM "PUB_EMP" FOR "SYSDBA"."EMPLOYEE";

当私有同义词与公共同义词同名时,优先访问私有同义词

10.5 DBLink(数据库链接)

-- 创建私有 DBLink(DPI 方式,达梦到达梦推荐)
CREATE LINK "LINK_TO_DB2"
CONNECT WITH "SYSDBA" IDENTIFIED BY "Password123"
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=5236)))';

-- 通过 DBLink 跨库查询
SELECT * FROM "SYSDBA"."TABLE_NAME"@"LINK_TO_DB2";

-- 删除 DBLink
DROP LINK "LINK_TO_DB2";
连接类型 说明
DPI 达梦特有协议,效率高,达梦到达梦首选
ODBC 通用协议,兼容性强
Oracle 连接 Oracle 数据库

⚠️ 注意事项:网络延迟对 DBLink 性能影响较大;存在明文密码存储风险,建议使用加密连接;需注意跨库事务的 XA 协议支持及数据类型兼容性。


十一、逻辑备份与还原

11.1 物理备份 vs 逻辑备份

对比项 物理备份(DMRMAN) 逻辑备份(dexp/dexpdp)
原理 基于数据页 通过 SQL 导出
速度
备份类型 完全/增量/差异 全量导出
时间点恢复 ✅ 支持 ❌ 不支持
文件丢失恢复 ✅ 支持 ❌ 不支持
跨平台迁移 ❌ 受限 ✅ 灵活

11.2 逻辑导出工具

工具 执行位置 文件存放
dexp 客户端 本地
dexpdp 服务器端 服务器

备份级别:支持数据库、用户、模式、表四种级别,不支持表空间级别

11.3 关键参数

# 导出示例(模式级别)
dexp SYSDBA/Password123@localhost:5236 \
    SCHEMAS=DMHR \
    FILE=dmhr_export.dmp \
    LOG=dmhr_export.log \
    FILESIZE=1024 \
    EXCLUDE=INDEX

# 导入示例(模式映射)
dimp SYSDBA/Password123@localhost:5236 \
    FILE=dmhr_export.dmp \
    REMAP_SCHEMA=DMHR:NEW_DMHR \
    TABLE_EXISTS_ACTION=REPLACE
参数 说明
FILESIZE 控制文件拆分大小,防止单文件过大
EXCLUDE / INCLUDE 排除或包含特定对象
QUERY 带 WHERE 条件的过滤导出
REMAP_SCHEMA 跨模式迁移时进行模式映射,模式名必须大写
TABLE_EXISTS_ACTION 冲突处理:IGNORE(忽略)/ REPLACE(替换)/ OVERWRITE(覆盖冲突行)

⚠️ 导出时必须充分考虑权限问题,否则导入失败。


十二、PL/SQL 程序开发

12.1 程序块结构

DECLARE
    -- 声明部分(可选):变量、游标、异常定义
    v_count INT := 0;
BEGIN
    -- 执行部分(必需):业务逻辑
    SELECT COUNT(*) INTO v_count FROM EMPLOYEE;
    PRINT '员工总数:' || v_count;
EXCEPTION
    -- 异常处理部分(可选)
    WHEN OTHERS THEN
        PRINT '发生异常:' || SQLERRM;
END;

12.2 循环控制

-- FOR 循环
BEGIN
    FOR i IN 1..5 LOOP
        PRINT i;
    END LOOP;
END;

-- WHILE 循环
DECLARE v_i INT := 1;
BEGIN
    WHILE v_i <= 5 LOOP
        PRINT v_i;
        v_i := v_i + 1;
    END LOOP;
END;

-- LOOP 循环(必须设置退出条件,否则死循环)
DECLARE v_i INT := 1;
BEGIN
    LOOP
        PRINT v_i;
        v_i := v_i + 1;
        EXIT WHEN v_i > 5;   -- ⚠️ 必须设置退出条件
    END LOOP;
END;

12.3 分支语句

-- IF-THEN-ELSEIF-ELSE
DECLARE v_salary DECIMAL(10,2) := 8000;
BEGIN
    IF v_salary >= 15000 THEN
        PRINT '高薪';
    ELSEIF v_salary >= 8000 THEN
        PRINT '中等';
    ELSE
        PRINT '低薪';
    END IF;
END;

-- CASE-WHEN
DECLARE v_grade CHAR(1) := 'B';
BEGIN
    CASE v_grade
        WHEN 'A' THEN PRINT '优秀';
        WHEN 'B' THEN PRINT '良好';
        WHEN 'C' THEN PRINT '及格';
        ELSE           PRINT '不及格';
    END CASE;
END;

12.4 存储过程与函数

对比项 存储过程 函数
返回值 必须有且仅有一个
调用方式 CALL 过程名(...) SELECT 函数名(...)
参数模式 IN / OUT / IN OUT IN / OUT / IN OUT
-- 创建存储过程
CREATE OR REPLACE PROCEDURE "SP_RAISE_SALARY"(
    p_dept_id IN  INT,
    p_rate    IN  DECIMAL(5,2),
    p_count   OUT INT
)
AS
BEGIN
    UPDATE EMPLOYEE
    SET SALARY = SALARY * (1 + p_rate / 100)
    WHERE DEPT_ID = p_dept_id;
    p_count := SQL%ROWCOUNT;
    COMMIT;
END;

-- 调用存储过程
DECLARE v_cnt INT;
BEGIN
    CALL SP_RAISE_SALARY(1, 5.0, v_cnt);
    PRINT '已更新 ' || v_cnt || ' 条记录';
END;

12.5 异常处理

DECLARE
    e_not_found EXCEPTION;       -- 自定义异常声明
BEGIN
    DECLARE v_name VARCHAR(50);
    BEGIN
        SELECT EMP_NAME INTO v_name FROM EMPLOYEE WHERE EMP_ID = 99999;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            RAISE e_not_found;   -- 抛出自定义异常
    END;
EXCEPTION
    WHEN e_not_found THEN
        PRINT '员工不存在';
    WHEN OTHERS THEN
        PRINT '未知错误:' || SQLERRM;
END;

十三、ODBC 与 Python 驱动配置

13.1 ODBC 数据源配置

安装步骤(源码包编译):

# 1. 解压源码包
tar -zxvf unixODBC-2.3.x.tar.gz
cd unixODBC-2.3.x

# 2. 编译安装(三步骤)
./configure 
make
make install

配置文件

# /etc/odbcinst.ini - 驱动注册
[DM ODBC DRIVER]
Description = DM ODBC Driver
Driver      = /dm/bin/libdodbc.so

# /etc/odbc.ini - 数据源配置
[DM_DSN]
Description = DM Database
Driver      = DM ODBC DRIVER
Server      = 192.168.1.1
Port        = 5236
Database    = DAMENG
# 验证连接
isql d m -v

13.2 Python 驱动部署

# 安装 dmPython 驱动
cd /dm/dmdbms/drivers/python/dmPython
python3 setup.py install

可以执行以下python脚本进行测试,执行方式python3 test.py,以下为test.python脚本内容

import dmPython
conn=dmPython.connect(user='SYSDBA',password='Dameng123',server='192.168.88.103',port=5236)
cursor =conn.cursor()
cursor.execute('select employee_name from DMHR.EMPLOYEE limit 10')
values =cursor.fetchall()
print(values)
cursor.close()
conn.close()

📝 学习小结:DCA 认证涵盖了达梦数据库从安装、实例管理到 SQL 开发的完整知识体系。重点掌握实例参数配置(不可修改的初始化参数)、表空间管理、权限体系、表的创建(包括表结构,索引,主键,外键)、sql脚本执行、逻辑导入导出及 SQL 高级查询,是通过认证考试的关键。


本文整理自达梦数据库 DCA 认证培训课程,供学习参考。
达梦社区地址:https://eco.dameng.com

Logo

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

更多推荐