备考 DCA 首先要有一个可用的达梦运行环境。我选择了 VMware Workstation 16 + 银河麒麟高级服务器版 V10 SP2 的组合——这与考试机环境基本一致。
踩的第一个坑是 VMware Tools:安装时因缺少内核开发包,vmware-install.pl 编译模块失败。这里有两个解决路径:一是安装时选择跳过编译的精简模式(同样支持复制粘贴和分辨率调整);二是用系统自带的 open-vm-tools 替代。
经验:复制粘贴不生效时,先看
$DISPLAY有没有值。没有图形桌面会话(纯命令行系统),复制粘贴物理上不可用——不是 Tools 没装好,而是没有 X 剪贴板这个载体。启动图形会话后,再重启 vmtoolsd 的 vmusr 进程即可。
第二个坑是磁盘空间:初始化实例时提示"创建日志文件失败,No space left on device"。达梦初始化实例需要 3 组 1G 日志 + 数据文件,虚拟机默认 20G 磁盘很快告急。
扩容流程(麒麟 LVM 结构):
# VMware 侧:关机 → 设置 → 磁盘扩展到 50G → 开机
growpart /dev/sda 2 # 扩展分区
pvresize /dev/sda2 # 刷新 LVM 物理卷
lvextend -l +100%FREE /dev/mapper/klas-root # 扩展根逻辑卷
xfs_growfs / # 扩展文件系统(根是 xfs 用这个)
经验:
pvresize报 "Failed to find device" 时,先parted /dev/sda resizepart 2 100%再pvresize,顺序错了就找不到新空间。
考试环境多为无图形界面的服务器,命令行安装是必会技能:
# 创建安装用户
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# 挂载镜像
mkdir -p /mnt/dm && mount /dev/cdrom /mnt/dm
# 安装(指定临时目录避免 /tmp 空间不足)
mkdir -p /home/dmdba/tmp
export DM_INSTALL_TMPDIR=/home/dmdba/tmp
cd /mnt/dm && ./DMInstall.bin -i
易错点:安装时提示"临时目录空间不足"是经典问题——达梦安装时把安装文件解压到
/tmp,需要约 2G 空间。设置环境变量DM_INSTALL_TMPDIR指向大空间目录即可,这是官方手册明确给出的解法。
初始化参数必须逐项理解,考试常考:
./dminit path=/dm/data db_name=DMSALM instance_name=DMSALMDB \ port_num=5240 EXTENT_SIZE=16 PAGE_SIZE=16 CHARSET=1 \ SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 \ log_size=1024 log_num=3
PAGE_SIZE=16:页大小 16K,初始化后不可修改,决定单行最大长度CHARSET=1:UTF-8EXTENT_SIZE=16:簇大小(页为单位)易错点:无图形环境的虚拟机上跑图形化安装/初始化(
./DMInstall.bin或 dbca)会报SWTError: No more handles [gtk_init_check() failed]——这是没有 X server 导致,改用-i命令行参数或 dminit 即可。
达梦的权限体系与 Oracle 高度相似:角色(ROLE)→ 用户(USER)→ 权限(GRANT),并支持资源限制文件(PROFILE):
-- 表空间(含自动扩展)
CREATE TABLESPACE "TSAL" DATAFILE '/dm/data/DMSALM/TSAL_01.DBF'
SIZE 512 AUTOEXTEND ON NEXT 32 MAXSIZE 10240;
-- 资源限制:失败 5 次锁定、90 天未登录锁定、修改 3 次后不能重用旧密码
CREATE PROFILE "PRO_SALM" LIMIT
FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LIFE_TIME 90
PASSWORD_LOCK_TIME 5 PASSWORD_REUSE_MAX 3;
-- 用户:默认表空间 + 索引表空间 + 资源限制 + 角色
CREATE USER "U_DMSALM" IDENTIFIED BY "Dameng123"
DEFAULT TABLESPACE "TSAL" INDEX_TABLESPACE "TINDEX" PROFILE "PRO_SALM";
GRANT RESOURCE, VTI, "ROLE_SALM" TO "U_DMSALM";
关键点:资源限制里"锁定"由两个参数配合——
FAILED_LOGIN_ATTEMPTS(触发条件)+PASSWORD_LOCK_TIME(锁多久),只填次数不填锁定时间,锁定不生效。
建表时需注意主键、外键、唯一、CHECK、NOT NULL等参数。两个容易翻车的点:
SERIALNUM INTEGER IDENTITY(1,1) 是自增列,直接插入序号会报 -1723,需先 SET IDENTITY_INSERT DMSALM.SALARY ON;,或插入时不写该列让系统自动编号。视图要注意连表用 JOIN...ON,过滤用 WHERE,且别名不能是保留字(如 MAX/MIN/AVG)。
CREATE MATERIALIZED VIEW "DMSALM"."V_TJ" AS
SELECT d.dname, MAX(s.basicsal+s.bonus), ...
GROUP BY d.dname HAVING AVG(...) > 10000;
-- 手动刷新(COMPLETE 全量、FAST 增量需物化视图日志、FORCE 自动降级)
REFRESH MATERIALIZED VIEW "DMSALM"."V_TJ" COMPLETE;
参考模拟题要求函数"返回薪资和备注"两个值。对应函数可写为
CREATE OR REPLACE FUNCTION "DMSALM"."F_GETGZ"(
p_empno INT, p_deptno INT, o_bz OUT VARCHAR)
RETURN DEC(10,2) AS
v_salary DEC(10,2);
BEGIN
SELECT s.basicsal+s.bonus, s.comm INTO v_salary, o_bz
FROM DMSALM.SALARY s JOIN DMSALM.EMP e ON s.empno=e.empno
WHERE e.empno=p_empno AND e.deptno=p_deptno;
RETURN v_salary;
EXCEPTION WHEN OTHERS THEN RETURN -1000;
END;
# 导出整个模式(schemas 导出所有对象和数据)
dexp SYSDBA/Dameng123@localhost:5240 file=/bakcup/dmsalm.dmp schemas=DMSALM
# 导入并映射到目标用户
dimp SYSDBA/Dameng123@localhost:5240 file=/bakcup/dmsalm.dmp remap_schema=DMSALM:SAL_BAK
易错点:导出目录必须 dmdba 有写权限(
chown dmdba:dinstall /backup),否则报Permission denied, code 13;导入报"无效的对象"通常是 dmp 里的模式在目标库不存在,先建同名用户或 remap 即可。
达梦提供 dmPython 驱动,从安装目录源码安装:
export DM_HOME=/dm/dmdbms
export LD_LIBRARY_PATH=/dm/dmdbms/bin:$LD_LIBRARY_PATH
cd /dm/dmdbms/drivers/python/dmPython && python3 setup.py install
import dmPython
conn = dmPython.connect(user='HR', password='xxx',
server='127.0.0.1', port=5236)
cursor = conn.cursor()
cursor.execute('SELECT * FROM HR.T_EMP WHERE ROWNUM <= 10')
print(cursor.fetchall())
易错点:
import dmPython报libdmP1.so: cannot open shared object file,是动态库路径问题,export LD_LIBRARY_PATH指到达梦 bin 目录即可;连接报-70028 创建连接失败,检查server参数(用127.0.0.1)和端口是否监听。
DCA 是纯实操考试,手熟程度决定得分。需要多做几遍
可以将备考期间遇到的每个报错进行整理,这些恰恰是考试最容易设的坑。
达梦官方《DM8 管理员手册》和 DCA 实验手册是考试范围的核心参考,网上资料仅供参考。遇到不确定的语法,建议查找手册原文。
达梦语法与 Oracle 高度兼容(PL/SQL、角色权限、物化视图逻辑一致),有 Oracle/MySQL 基础的人上手很快,差异点主要集中在工具链和安装部署。
5.尽量提前准备好考试相关环境,避免在考试时因环境问题出错
文章
阅读量
获赞
