DCP 是达梦的中级认证(初级叫 DCA),选了线上直播 4 天 培训。讲师节奏比 DCA 紧不少,特别是审计、加密、统计信息、SQL 日志、ET 工具、DIS、作业调度这几块,是 DCA 完全没碰过的深水区。
我个人是先过了 DCA、就参加 DCP,DCP 复习节奏比 DCA 的时间更紧张。
【DCP】考试范围和考点(10 大块):
DCP 备考我分了三个阶段。
阶段 1:实验操作(2 天)。
alter database resize logfile 改大小、alter database add logfile 加文件阶段 2:模拟笔试(2 天)。
DCP 的笔试题有 200 道题,只能模拟练习 10 次。把错题标红记录,后面第3阶段时候可以加强复习。
阶段 3:错题回看(1 天)。
DCA 已经讲过初始化,但 DCP 深入到运维规范层面——不是"建个库"就完事,是"建库前要把系统调好"。
磁盘调度算法:
cat /sys/block/sda/queue/scheduler # 查当前
iostat -x 3 5 # 查负载
达梦推荐用 deadline 或 noop,不要用 cfq(cfq 是传统机械盘的,对 SSD 性能差)。
DCA 完全没碰的领域,DCP 上来就硬菜。
达梦的水平分区四大类:
RANGE 分区(按时间,关键:达梦用字符串 + STORAGE( on 表空间),不是 TABLESPACE):
CREATE TABLE PROD
(
ID INT,
NAME VARCHAR(50),
TIME DATETIME
)
PARTITION BY RANGE (TIME)
(
PARTITION P1 VALUES LESS THAN ('2022-01-01') STORAGE( on DMTEST01),
PARTITION P2 VALUES LESS THAN ('2023-01-01') STORAGE( on DMTEST02),
PARTITION P3 VALUES LESS THAN ('2024-01-01') STORAGE( on DMTEST03),
PARTITION P4 VALUES LESS THAN ('2025-01-01') STORAGE( on DMTEST04)
);
关键差异(vs Oracle):
- 达梦用
STORAGE( on DMTEST01),Oracle 用TABLESPACE DMTEST01。- 达梦范围值用字符串
'2022-01-01',Oracle 用TO_DATE('2022-01-01','YYYY-MM-DD')。- 网上很多 DCP 心得写的 Oracle 语法,在达梦里直接报错。
RANGE 等值分区(达梦特有 VALUES EQU OR LESS THAN):
PARTITION P1 VALUES EQU OR LESS THAN (1000) STORAGE(on TBS1),
PARTITION P2 VALUES EQU OR LESS THAN (2000) STORAGE(on TBS2),
用于将数据按"等分"分区,常见于 ID 字段。
HASH 分区(两种写法):
-- 方法 1:指定分区名
CREATE TABLE T_HASH1 (ID INT, NAME VARCHAR(50))
PARTITION BY HASH (ID)
(
PARTITION P1,
PARTITION P2,
PARTITION P3,
PARTITION P4
);
-- 方法 2:指定分区个数,分区名自动生成
CREATE TABLE T_HASH2 (ID INT, NAME VARCHAR(50))
PARTITION BY HASH(ID) PARTITIONS 4;
LIST 分区(离散值,城市):
CREATE TABLE T_SALES (
SALES_ID INT, SALEMAN VARCHAR(20),
SALEDATE DATETIME, CITY CHAR(15)
)
PARTITION BY LIST (CITY)
(
PARTITION P1 VALUES ('BJ', 'TJ') STORAGE(on DMTEST01),
PARTITION P2 VALUES ('SH', 'NJ') STORAGE(on DMTEST02),
PARTITION P3 VALUES ('WH', 'CS') STORAGE(on DMTEST03),
PARTITION P4 VALUES ('GZ', 'SZ') STORAGE(on DMTEST04)
);
INTERVAL 分区(间隔分区,达梦的关键高级特性):
CREATE TABLE T_INTERVAL_YEAR (
ID NUMBER(10, 0),
NAME VARCHAR(50),
BIRTH DATE
)
PARTITION BY RANGE ("BIRTH")
interval(numtoyminterval(1,'YEAR')) -- 每 1 年自动新建分区
(
PARTITION "P2014" VALUES LESS THAN ('2015-01-01'),
PARTITION "P2015" VALUES LESS THAN ('2016-01-01')
);
-- 插入 2018 年的数据,系统自动建 P2018、P2019... 分区
INSERT INTO T_INTERVAL_YEAR VALUES(3,'CCC','2018-08-02');
关键字:
numtoyminterval(年,月)、numtodsinterval(天,秒)。
坑:题目如果让你"按月自动分区",用numtoyminterval(1, 'MONTH');按天用numtodsinterval(1, 'DAY')——别混。
五步走:
dexp dmemp/Dameng123 file=empinfo.dmp log=empinfo.log tables=empinfoALTER TABLE empinfo RENAME TO empinfo_bak;dimp dmemp/Dameng123 file=empinfo.dmp log=empinfo_imp.log tables=empinfo ignore=y达梦的索引类型:
CREATE INDEX ... ON T(UPPER(col))-- 唯一索引
CREATE UNIQUE INDEX ind_phone ON dmhr.employee(phone_num);
-- 复合索引
CREATE INDEX ind_id_name ON dmhr.employee(employee_id, employee_name);
-- 函数索引
CREATE INDEX dmhr.ind_mail ON dmhr.employee(LOWER(EMAIL));
-- 全局索引(针对分区表)
CREATE INDEX DMEMP.IND_ID ON DMEMP.T_HASH1(ID) GLOBAL;
-- 位图索引
CREATE BITMAP INDEX dmhr.ind_man ON dmhr.employee(manager_id);
dmfldr(DM Fast Loader)是达梦的命令行快速装载工具,比 dexp/dimp 快一个数量级——这是 DCP 的硬菜。
数据文件(/home/dmdba/fldrtest.txt):
1|杨亮|
2|周峰|
3|陈华飞|2025-01-30
控制文件(/home/dmdba/fldrtest.ctl):
LOAD DATA
INFILE '/home/dmdba/fldrtest.txt'
INTO TABLE FLDRTEST
FIELDS '|'
导入命令:
/dm/bin/dmfldr dmemp/Dameng123 control=\'/home/dmdba/fldrtest.ctl\'
导出(大字段示例):
/dm/bin/dmfldr dmemp/Dameng123 control=\'/home/dmdba/clob1.ctl\' \
LOB_DIRECTORY=\'/home/dmdba\' mode=\'out\'
关键参数:
| 参数 | 说明 |
|---|---|
CONTROL |
控制文件路径(必填) |
MODE |
IN(载入,默认)/ OUT(载出)/ OUTORA(载出 ORACLE 格式) |
DIRECT |
TRUE(快速直装,默认)/ FALSE(传统) |
LOB_DIRECTORY |
大字段文件目录(MODE=OUT 时必填) |
ROWS |
提交频次(50000,DIRECT=FALSE 有效) |
BADFILE |
错误数据记录文件 |
坑:
MODE='out'是导出,MODE='in'是导入。考场上题目如果说"用 dmfldr 把数据导出到文本文件",千万别写成MODE=in。
DCP 的硬菜,DCA 完全不涉及。
审计级别(3 类):
开启审计(必须用 SYSAUDITOR 用户):
-- 查看是否开启
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
-- 开启(param 0=关闭,1=普通,2=普通+实时)
SP_SET_ENABLE_AUDIT(1);
-- 关闭
SP_SET_ENABLE_AUDIT(0);
重大坑:开启审计必须用 SYSAUDITOR 用户(不是 SYSDBA),否则报"权限不足"。、
SP_AUDIT_STMT(
TYPE VARCHAR(30), -- 审计选项
USERNAME VARCHAR(128), -- 用户名,NULL 表示不限制
WHENEVER VARCHAR(20) -- ALL / SUCCESSFUL / FAIL
);
-- 例 1:审计 DMEMP 用户的 DDL(建表、改表、清空、删表)
SP_AUDIT_STMT('TABLE', 'DMEMP', 'ALL');
-- 验证:用 DMEMP 登录,执行 DDL
disql dmemp/Dameng123
SQL> create table ttt (id int);
SQL> truncate table ttt;
SQL> drop table ttt;
-- 查看审计记录
SELECT USERNAME, OPERATION, SUCC_FLAG, SQL_TEXT, OPTIME, MAC
FROM V$AUDITRECORDS;
-- 取消
SP_NOAUDIT_STMT('TABLE', 'DMEMP', 'ALL');
SP_AUDIT_OBJECT(
TYPE VARCHAR(30), -- 审计选项
USERNAME VARCHAR(128), -- 用户
SCHNAME VARCHAR(128), -- 模式名(空时置 'null')
TVNAME VARCHAR(128), -- 表/视图/存储过程名(**不能为空**)
COLNAME VARCHAR(128), -- 列名
WHENEVER VARCHAR(20) -- ALL / SUCCESSFUL / FAIL
);
-- 例:审计 DMEMP 用户删除 DMHR.EMPLOYEE 表记录
SP_AUDIT_OBJECT('DELETE', 'DMEMP', 'DMHR', 'EMPLOYEE', 'ALL');
-- 取消(参数必须完全一致)
SP_NOAUDIT_OBJECT('DELETE', 'DMEMP', 'DMHR', 'EMPLOYEE', 'ALL');
DTS = 达梦数据迁移工具。DCA 不涉及,DCP 必考。
[dmdba@localhost tool]$ ./dts
实验操作如下:
步骤 1:迁移评估
“新建评估 → 选择 ORACLE-DM”
步骤 2:迁移数据库
步骤 3:迁移对比
坑:异构库迁移时字符集不一致报 -6606。解决:源端和目标端都设为 UTF-8,或在 DTS 里勾选"字符集转换"。
DIS = 达梦数据集成(Data Integration Service)。DCA 完全不碰,DCP 硬菜。
# 创建用户组
groupadd dinstall
# 创建用户(关键:**不是 dmdba,是 dmdis**)
useradd -g dinstall -m -d /home/dmdis -s /bin/bash dmdis
passwd dmdis
# DISPLAY(图形化安装用)
xhost +
su - dmdis
export DISPLAY=:0.0
# 临时目录
mkdir -p /home/dmdis/tmp
export DMDIS_INSTALL_TMPDIR=/home/dmdis/tmp
命令行:
[dmdis@localhost opt]$ ./dmdis_rev185208_x86_linux_64_20250325.bin -i
安装选项:
# 启动单机模式服务
cd /home/dmdis/dmdis5/20250415134956523000/standalone/
./standalone_service_start.sh
# 停止
./standalone_service_stop.sh
# 重启
./standalone_service_restart.sh
# 用 root 跑 install_standalone_service.sh 安装操作系统服务
URL: http://192.168.88.103:8080/ ← 端口 8080
用户: admin
密码: 安装时设置的
文章
阅读量
获赞
