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 字节,通用性强
大小写敏感开启后 table 和 TABLE 视为不同对象;迁移时源端与目标端必须保持一致
行尾空格填充开启时 '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 的区别

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

九、SQL 查询与高级应用

9.1 查询语句执行顺序

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

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

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 OUTIN / 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编程工具,助力开发者即刻编程。

更多推荐