近期参加了达梦 DCP 培训及认证考试,结合本次培训内容、日常练习过程以及机试操作情况,对 DCP 相关知识点进行了一次系统梳理。整体来看,DCP 相比 DCA 更偏向综合实操能力,不仅要求掌握数据库基础概念,还要求能够熟练完成实例创建、对象管理、数据迁移、备份还原、作业配置、性能优化等典型数据库运维操作。
本文主要从培训内容、考试准备、实操案例和注意事项几个方面进行总结,供后续参加 DCP 培训和考试的同学参考。
DCP 培训内容覆盖面较广,既包括数据库基础管理,也包括高级对象管理和工具使用。培训过程中建议重点关注以下几个方向:
从考试角度来看,DCP 不是单纯考命令背诵,而是考察能否在限定时间内准确完成任务。因此,平时练习时不能只看文档,必须真正动手把命令敲一遍,把图形化工具操作一遍。
DCP 考试一般分为笔试和机试两部分。
笔试主要考察达梦数据库理论知识、数据库体系结构、SQL 语法、对象管理、备份还原、安全管理、性能优化等内容。备考时建议结合题库反复练习,把容易混淆的知识点单独整理出来,例如归档与备份的关系、统计信息收集方式、分区表类型、索引类型、作业调度参数等。
机试主要考察实际操作能力,题目通常来自培训内容和练习手册,操作时间比较紧张。机试时建议采用“命令行 + 图形化工具”结合的方式:
能快速敲命令的地方直接使用 disql、dmrman、dmfldr 等工具;需要减少出错率的地方,例如复杂分区表、DTS 迁移、备份还原配置等,可以适当使用管理工具或控制台工具辅助完成。
在 Linux 图形化环境中使用达梦管理工具或控制台工具时,需要先确认 DISPLAY 环境变量是否正常。如果是 root 用户登录系统图形界面,再切换到 dmdba 用户使用 GUI 工具,可以参考以下方式:
[root@os_node1 ~]# xhost +
[root@os_node1 ~]# echo $DISPLAY
[root@os_node1 ~]# su - dmdba
[dmdba@os_node1 ~]$ export DISPLAY=:0.0
该步骤看起来简单,但在机试环境中非常关键。如果 DISPLAY 没有配置好,可能导致管理工具、控制台工具无法正常打开,从而影响后续操作效率。
实例创建是 DCP 实操中比较基础但非常重要的内容。创建实例时需要特别注意数据库名、实例名、端口号、页大小、簇大小、日志大小、大小写敏感、用户密码等参数。
示例:创建数据库名为 DM01、实例名为 DMSVR01、端口号为 5236 的实例。
su - dmdba
cd /dmdbms/bin
./dminit PATH=/dm8/data \
DB_NAME=DM01 \
INSTANCE_NAME=DMSVR01 \
PORT_NUM=5236 \
PAGE_SIZE=16 \
EXTENT_SIZE=32 \
LOG_SIZE=500 \
CASE_SENSITIVE=Y \
SYSDBA_PWD=DM01SYSDBA \
SYSAUDITOR_PWD=DM01SYSDBA
实例创建完成后,需要使用 root 用户注册服务:
su - root
cd /dmdbms/script/root
./dm_service_installer.sh -t dmserver \
-dm_ini /dm8/data/DM01/dm.ini \
-p DMSERVER
注册完成后切换回 dmdba 用户启动服务:
su - dmdba
cd /dmdbms/bin
./DmServiceDMSERVER start
这里需要注意,dminit 参数一旦确定,部分初始化参数后续无法随意修改,例如页大小、大小写敏感、字符集等。因此在生产环境或考试环境中,初始化前一定要认真核对题目要求。
创建表空间时,通常需要指定数据文件路径、初始大小、是否自动扩展以及每次扩展大小。例如创建 4 个用于存放业务表数据的表空间:
CREATE TABLESPACE "DMTS01"
DATAFILE '/dm8/data/DM01/DMTS01.DBF'
SIZE 500
AUTOEXTEND ON NEXT 2;
CREATE TABLESPACE "DMTS02"
DATAFILE '/dm8/data/DM01/DMTS02.DBF'
SIZE 500
AUTOEXTEND ON NEXT 2;
CREATE TABLESPACE "DMTS03"
DATAFILE '/dm8/data/DM01/DMTS03.DBF'
SIZE 500
AUTOEXTEND ON NEXT 2;
CREATE TABLESPACE "DMTS04"
DATAFILE '/dm8/data/DM01/DMTS04.DBF'
SIZE 500
AUTOEXTEND ON NEXT 2;
创建用户时,需要指定用户名、密码、默认表空间,并根据题目要求授予对应权限:
CREATE USER DMTEST IDENTIFIED BY "DMTEST123"
DEFAULT TABLESPACE DMTS01;
GRANT CREATE TABLE TO "DMTEST";
GRANT CREATE MATERIALIZED VIEW TO "DMTEST";
GRANT CREATE INDEX TO "DMTEST";
GRANT CREATE SEQUENCE TO "DMTEST";
在考试中,用户、表空间、权限经常是后续题目的基础。如果前面配置错误,后续创建表、索引、序列、物化视图时都会受到影响。因此建议每完成一步都及时验证。
分区表是 DCP 机试中常见内容,主要包括范围分区、列表分区和 HASH 分区。
范围分区适用于按照时间、编号等连续范围进行数据划分的场景。例如按照时间字段对产品信息表进行分区:
CREATE TABLE "DMEMP"."PROD"
(
"ID" INT,
"NAME" VARCHAR(50),
"TIME" DATETIME(0)
)
PARTITION BY RANGE("TIME")
(
PARTITION "P1" VALUES LESS THAN(DATETIME'2022-01-01 00:00:00')
STORAGE(ON "DMEMP", CLUSTERBTR),
PARTITION "P2" VALUES LESS THAN(DATETIME'2023-01-01 00:00:00')
STORAGE(ON "DM01", CLUSTERBTR),
PARTITION "P3" VALUES LESS THAN(DATETIME'2024-01-01 00:00:00')
STORAGE(ON "DM02", CLUSTERBTR),
PARTITION "P4" VALUES LESS THAN(DATETIME'2025-01-01 00:00:00')
STORAGE(ON "DM03", CLUSTERBTR)
)
STORAGE(ON "DMEMP", CLUSTERBTR);
HASH 分区适用于按照哈希算法将数据均匀分布到多个分区中。HASH 分区可以指定分区名,也可以只指定分区数量。
指定分区名:
CREATE TABLE "DMEMP"."T_HASH1"
(
"ID" INT,
"NAME" VARCHAR(50)
)
PARTITION BY HASH("ID")
(
PARTITION "P1" STORAGE(ON "DMEMP", CLUSTERBTR),
PARTITION "P2" STORAGE(ON "DMEMP", CLUSTERBTR),
PARTITION "P3" STORAGE(ON "DMEMP", CLUSTERBTR),
PARTITION "P4" STORAGE(ON "DMEMP", CLUSTERBTR)
)
STORAGE(HASHPARTMAP(1), ON "DMEMP", CLUSTERBTR);
指定分区数量:
CREATE TABLE T_HASH2
(
ID INT,
NAME VARCHAR(50)
)
PARTITION BY HASH(ID) PARTITIONS 4;
列表分区适用于按照固定枚举值进行数据划分的场景,例如按照销售城市进行分区:
CREATE TABLE "DMEMP"."SALES02"
(
"SALES_ID" INT,
"SALEMAN" VARCHAR(20),
"SALEDATE" DATETIME(0),
"CITY" CHAR(15)
)
PARTITION BY LIST("CITY")
(
PARTITION "P1" VALUES('BJ ', 'TJ ')
STORAGE(ON "DMEMP", CLUSTERBTR),
PARTITION "P2" VALUES('NJ ', 'SH ')
STORAGE(ON "DM01", CLUSTERBTR),
PARTITION "P3" VALUES('CS ', 'WH ')
STORAGE(ON "DM02", CLUSTERBTR),
PARTITION "P4" VALUES('GZ ', 'SZ ')
STORAGE(ON "DM03", CLUSTERBTR)
)
STORAGE(ON "DMEMP", CLUSTERBTR);
分区表题目中最容易出错的是分区类型选择错误、分区键选择错误、分区值边界错误以及表空间指定错误。建议先根据题目判断是范围、列表还是 HASH,再考虑每个分区的具体存储位置。
DMFLDR 是达梦数据库常用的数据快速装载工具,在 DCP 机试中也经常出现。一般流程为:准备数据文件、编写控制文件、执行 dmfldr 命令、检查导入结果。
示例控制文件:
LOAD DATA INFILE '/home/dmdba/fldrtest.txt' INTO TABLE FLDRTEST FIELDS ','
执行导入:
/dm/bin/dmfldr SYSDBA/Dameng1234 \
control='/home/dmdba/fldrtest.ctl'
如果涉及大字段,例如 CLOB 类型,需要额外关注 LOB 文件目录。示例:
LOAD DATA INFILE '/home/dmdba/clob1.txt' INTO TABLE CLOB_IN FIELDS ',' (ID, ADDR)
执行导入:
/dm/bin/dmfldr dmemp/Dameng123 \
control='/home/dmdba/clob_in.ctl' \
LOB_DIRECTORY='/home/dmdba'
DMFLDR 操作时建议重点检查以下内容:
DCP 中索引相关内容既可能出现在笔试,也可能出现在机试。常见索引类型包括聚簇索引、唯一索引、函数索引、全局索引、局部索引、复合索引、位图索引和位图连接索引。
常见创建方式如下:
-- 聚簇索引
CREATE CLUSTER INDEX idx_clu_name ON tab_name(col_name);
-- 唯一索引
CREATE UNIQUE INDEX idx_uni_name ON tab_name(col_name);
-- 函数索引
CREATE INDEX idx_func_name ON tab_name(UPPER(col_name));
-- 分区表全局索引
CREATE GLOBAL INDEX idx_global_name ON part_tab_name(col_name);
-- 分区表局部索引
CREATE LOCAL INDEX idx_local_name ON part_tab_name(col_name);
-- 复合索引
CREATE INDEX idx_comp_name ON tab_name(col1, col2);
-- 位图索引
CREATE BITMAP INDEX idx_bitmap_name ON tab_name(col_name);
索引相关题目不仅要会创建,还要理解适用场景。例如,复合索引需要关注最左前缀原则;位图索引更适合低基数字段和分析型场景;分区表上需要区分全局索引和局部索引。
DCP 培训中常见的数据迁移工具包括 DTS、DMFLDR 和 DMDIS。其中 DTS 适合数据库到数据库之间的对象和数据迁移,DMFLDR 适合文本文件快速装载,DMDIS 则偏向数据集成、数据清洗、转换和脱敏等场景。
使用 DTS 进行 Oracle 到达梦迁移时,需要先准备源库和目标库环境。例如启动 Oracle 数据库、启动监听、确认 PDB 连接方式,同时启动达梦数据库服务。
Oracle 端需要关注监听和服务名,例如:
lsnrctl start
达梦端需要确认数据库服务正常:
/dm/bin/DmServiceDMSERVER start
迁移过程中一般需要依次完成以下步骤:
如果源端是 Oracle PDB 环境,需要特别注意连接串中的服务名是否指向 PDB,而不是 CDB。很多迁移连接失败问题都和服务名、监听、网络、防火墙、驱动或权限有关。
DMDIS 是达梦数据集成服务工具,可用于数据清洗、转换、脱敏等场景。安装 DMDIS 时建议单独创建用户和临时目录,避免权限或临时空间不足导致安装失败。
示例准备步骤:
groupadd dinstall
useradd -g dinstall -m -d /home/dmdis -s /bin/bash dmdis
su - dmdis
mkdir -p /home/dmdis/tmp
export DMDIS_INSTALL_TMPDIR=/home/dmdis/tmp
上传安装包后执行安装:
cd /dm
./dmdis_rev185208_x86_linux_64_20250325.bin -i
安装完成后进入 standalone 目录启动服务:
cd /home/dmdis/dmdis5/版本目录/standalone
./standalone_service_start.sh
如果服务脚本未自动注册成功,可以使用 root 用户执行服务安装脚本:
./install_standalone_service.sh
DMDIS 常见操作流程如下:
在数据脱敏场景中,通常需要先配置源表,再选择脱敏规则,最后指定输出表或输出文件。执行前建议确认目标表是否需要清空,避免重复执行导致数据重复。
统计信息会影响优化器生成执行计划,因此 DCP 中也经常涉及统计信息的收集、查看、导出和导入。
收集整表统计信息:
CALL DBMS_STATS.GATHER_TABLE_STATS('模式名', '表名', CASCADE=>TRUE);
收集索引统计信息:
SP_INDEX_STAT_INIT('DMHR', 'INDEX33555580');
查看索引统计信息:
DBMS_STATS.INDEX_STATS_SHOW('DMHR', 'INDEX33555580');
收集列统计信息:
CALL SP_COL_STAT_INIT('模式名', '表名', '列名');
查看列统计信息:
DBMS_STATS.COLUMN_STATS_SHOW('DMHR', 'EMPLOYEE', 'EMPLOYEE_ID');
导出表统计信息的一般流程如下:
DBMS_STATS.GATHER_TABLE_STATS('DMHR', 'EMPLOYEE');
DBMS_STATS.CREATE_STAT_TABLE('DMHR', 'STAT_EMPLOYEE');
DBMS_STATS.EXPORT_TABLE_STATS(
OWNNAME=>'DMHR',
TABNAME=>'EMPLOYEE',
STATTAB=>'STAT_EMPLOYEE',
STATOWN=>'DMHR'
);
导入统计信息:
DBMS_STATS.IMPORT_TABLE_STATS(
'DMHR',
'EMPLOYEE',
STATTAB=>'STAT_EMPLOYEE',
STATOWN=>'DMHR'
);
在实际运维中,统计信息不只是考试知识点,也会直接影响 SQL 执行计划。迁移、批量装载、大量 DML 后,都需要关注统计信息是否及时收集。
非分区表转换为分区表的常见思路是:导出原表结构及数据、重命名原表、创建新的分区表、导入数据、验证数据、删除备份表。
示例流程:
CREATE TABLE empinfo
(
emp_id INT,
emp_name VARCHAR(20)
);
BEGIN
FOR i IN 1..3000 LOOP
INSERT INTO empinfo VALUES(i, 'AAA' || i);
END LOOP;
COMMIT;
END;
将原表重命名:
ALTER TABLE empinfo RENAME TO empinfo_bak;
创建新的分区表:
CREATE TABLE DMEMP.EMPINFO
(
EMP_ID INT,
EMP_NAME VARCHAR(20)
)
PARTITION BY RANGE (EMP_ID)
(
PARTITION P1 VALUES EQU OR LESS THAN (1000) STORAGE (ON DM01),
PARTITION P2 VALUES EQU OR LESS THAN (2000) STORAGE (ON DM02),
PARTITION P3 VALUES EQU OR LESS THAN (3000) STORAGE (ON DM03)
);
验证数据:
SELECT COUNT(*) FROM empinfo_bak;
SELECT COUNT(*) FROM DMEMP.EMPINFO;
确认无误后再删除原备份表:
DROP TABLE empinfo_bak;
该类题目需要注意数据一致性,不能直接删除原表。考试时即使时间紧张,也要养成先验证再清理的习惯。
备份还原是 DCP 中非常重要的内容,常见类型包括脱机备份还原、联机备份、表空间备份恢复、表备份恢复等。
如果要求数据库可以恢复到任意时刻,需要先开启归档模式:
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG
'DEST=/dm8/data/DM01/arch,
TYPE=LOCAL,
FILE_SIZE=1024,
SPACE_LIMIT=0';
ALTER DATABASE OPEN;
BACKUP DATABASE FULL
TO "DB_DM01_FULL_BAK"
BACKUPSET '/dm8/backup/DB_DM01_FULL_BAK';
先停止数据库服务:
/dmdbms/bin/DmServiceDMSERVER stop
使用 dmrman 还原恢复:
cd /dmdbms/bin
./dmrman
RMAN> RESTORE DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/DB_DM01_FULL_BAK'; RMAN> RECOVER DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/DB_DM01_FULL_BAK'; RMAN> RECOVER DATABASE '/dm8/data/DM01/dm.ini' UPDATE DB_MAGIC;
启动数据库:
./DmServiceDMSERVER start
数据库联机完全备份:
BACKUP DATABASE FULL
TO "DB_DAMENG_FULL_2025_10_13_10_26_14"
BACKUPSET 'DB_DAMENG_FULL_2025_10_13_10_26_14';
表空间备份:
BACKUP TABLESPACE "MAIN" FULL
TO "TS_MAIN_FULL_2025_10_13_10_39_07"
BACKUPSET 'TS_MAIN_FULL_2025_10_13_10_39_07';
表备份:
BACKUP TABLE "DMEMP"."EMPLOYEES"
TO "TAB_DMEMP_EMPLOYEES_2025_10_13_10_48_34"
BACKUPSET 'TAB_DMEMP_EMPLOYEES_2025_10_13_10_48_34';
使用 dmrman 还原表空间:
RMAN> RESTORE DATABASE '/dm/data/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm/data/DAMENG/bak/TS_MAIN_FULL_2025_10_13_10_39_07';
恢复表空间:
RMAN> RECOVER DATABASE '/dm/data/DAMENG/dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR '/dm/arch';
备份恢复类题目要注意几个关键点:
是否需要停库、DmAP 服务是否正常、备份集路径是否正确、是否需要归档日志、是否需要 UPDATE DB_MAGIC。路径写错、服务未停、归档目录漏填,都会导致恢复失败。
作业管理通常用于定时备份、定时清理备份集、定时删除归档日志等场景。使用前需要初始化代理环境:
SP_INIT_JOB_SYS(1);
创建每周三 23:00 执行数据库完全备份的作业:
CALL SP_CREATE_JOB('JOB_BAK', 1, 0, '', 0, 0, '', 0, '');
CALL SP_JOB_CONFIG_START('JOB_BAK');
CALL SP_JOB_SET_EP_SEQNO('JOB_BAK', 0);
CALL SP_ADD_JOB_STEP(
'JOB_BAK',
'BAK_TIME',
6,
'00000000/dm8/backup',
0, 0, 0, 0,
NULL,
0
);
CALL SP_ADD_JOB_SCHEDULE(
'JOB_BAK',
'BAK_SCHEDULE',
1, 2, 1, 8, 0,
'23:00:00',
NULL,
'2023-10-24 22:06:50',
NULL,
''
);
CALL SP_JOB_CONFIG_COMMIT('JOB_BAK');
创建每天 22:00 删除 8 天以前备份的作业:
CALL SP_CREATE_JOB('JOB_REMOVE', 1, 0, '', 0, 0, '', 0, '');
CALL SP_JOB_CONFIG_START('JOB_REMOVE');
CALL SP_JOB_SET_EP_SEQNO('JOB_REMOVE', 0);
CALL SP_ADD_JOB_STEP(
'JOB_REMOVE',
'RM_BAK',
0,
'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dm8/backup'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'', SYSDATE-8);',
0, 0, 0, 0,
NULL,
0
);
CALL SP_ADD_JOB_SCHEDULE(
'JOB_REMOVE',
'RM_BAK',
1, 1, 1, 0, 0,
'22:00:00',
NULL,
'2023-10-24 23:21:03',
NULL,
''
);
CALL SP_JOB_CONFIG_COMMIT('JOB_REMOVE');
作业配置完成后,建议及时检查作业是否启用、调度时间是否正确、作业步骤是否正确,避免出现作业创建成功但实际不执行的情况。
DCP 中性能优化部分通常会涉及参数调整和统计信息收集。例如调整 buffer 缓冲区大小和字典缓冲区大小:
SP_SET_PARA_VALUE(2, 'BUFFER', 800);
SP_SET_PARA_VALUE(2, 'DICT_BUF_SIZE', 100);
修改后需要重启数据库才能生效。
收集某个模式下所有对象的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS(
'DMTEST',
100,
FALSE,
'FOR ALL COLUMNS SIZE AUTO'
);
如果需要将统计信息输出到文件,可以使用 disql 的 spool 功能:
cd /dmdbms/bin/
./disql SYSDBA/DM01SYSDBA@127.0.0.1:5236
SPOOL '/opt/gather.txt'
SELECT * FROM DBA_TAB_STATISTICS;
SPOOL OFF;
性能优化题目一般不会非常复杂,但要求理解“参数调整—重启生效—收集统计信息—查看结果”的完整流程。
结合本次练习和考试过程,总结以下几点:
通过 DCP 培训和实操练习,可以明显感受到 DCP 更注重数据库综合管理能力。相比基础认证,DCP 对实例管理、对象管理、迁移工具、备份恢复、作业系统和性能优化都有更高要求。
本次学习过程中,最大的收获不是单独记住某条命令,而是建立起达梦数据库日常运维的完整操作链路:从实例创建到服务注册,从表空间用户到对象管理,从数据装载迁移到备份恢复,再到作业调度和性能优化。每一部分看似独立,但在实际项目中都可能相互关联。
DCP 认证不是学习的终点,而是进一步深入达梦数据库体系的起点。后续还需要结合真实项目场景继续积累经验,例如数据库部署规范、迁移适配、性能排查、备份策略设计、主备集群运维等。只有把培训中的知识点真正落到实际操作中,才能形成稳定可靠的数据库运维能力。
文章
阅读量
获赞
