写本文的主要目的在于总结自己的考试经验,并分享给可能需要的人。如果可以帮助他们避免一些考试可能存在的问题,将是本文存在的意义。
| 项目 | 实际情况 |
|---|---|
| 考试形式 | 上机考试,2 小时 |
| 前期培训 | 3 天培训,考试内容少于培训容量 |
| 评分规则 | 外部学员 70 分通过,达梦内部员工要求 90 分以上 |
两个关键特点:
DCA 考试覆盖了达梦数据库管理员的核心日常工作,整体上是一条从"装库"到"用库"的完整主线。
| 考点 | 主要内容 |
|---|---|
| 安装数据库管理系统 | 安装 DM8,创建用户和目录,图形化/命令行安装 |
| 初始化实例 | dminit 参数设置(页大小、簇大小、字符集等) |
| 管理实例 | 实例的启动、停止(服务方式/前台方式) |
| 连接数据库 | manager 图形化连接、disql 命令行连接 |
| 表空间管理 | 创建、修改、删除表空间,数据文件管理 |
| 用户、角色、资源限制 | 创建用户、角色,权限授予与回收,资源限制项 |
| 表管理 | 创建表,五大约束(主键、非空、唯一、检查、外键) |
| 导入数据 | 执行 SQL 脚本导入数据,注意提交与依赖顺序 |
| 视图创建 | 视图(多表连接、聚合、子查询)、物化视图 |
| 索引创建 | 普通索引、复合索引、唯一索引 |
| 逻辑备份 | dexp 四种级别导出(库/用户/模式/表) |
| 逻辑还原 | dimp 导入,模式映射,表存在时的处理策略 |
| 存储过程/函数 | 创建存储过程或函数,涉及异常处理 |
| ODBC/Python 接口 | 配置 ODBC 数据源、dmPython 连接 |
核心主线:
安装数据库管理系统 → 初始化实例(注意相关参数的设置)→ 管理实例(启停实例)→ 连接数据库(manager/disql)→ 表空间管理 → 用户、角色、资源限制项的创建、权限管理 → 表管理(创建表、表的五大约束)→ 导入数据 → 视图创建(复杂视图、物化视图)→ 索引创建 → 逻辑备份 → 逻辑还原 → 建存储过程/函数 → ODBC/Python 接口的配置
我的建议是:
平时自己练习时,需要自己创建 dmdba 用户、上传安装包、挂载,同时还需要给 dmdba 调用图形化的权限。
而正式考试时:
xhost + 调用所以自己练习时,这些前提准备工作都要提前做好,这样才能把时间花在真正的操作练习上。
# 创建安装用户和分组(考试环境通常已预建 dmdba)
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
# 创建安装目录并授权(关键!权限不足会导致安装失败)
mkdir -p /dm8
chown dmdba:dinstall /dm8
chmod -R 755 /dm8
# root 下放行 X 访问
xhost +
su - dmdba
export DISPLAY=:0.0 # 具体值以 echo $DISPLAY 实际输出为准
# sudo 命令准备
sudo visudo
#root ALL=(ALL) ALL 这一行下面添加
dmdba ALL=(ALL) ALL
初始化数据库是考试的第一道题,也是其他题目实现的前提。
cd /dm8/bin
./dminit PATH=/dm8/data DB_NAME=DAMENG INSTANCE_NAME=DMSERVER \
PORT_NUM=5236 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=1024 \
CHARSET=1 CASE_SENSITIVE=Y SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123
注意:
- 大小写敏感、页大小、簇大小、字符集确定后不可修改。考题要求什么就设什么,先看清题目再点"完成"。
- 单位换算:日志文件大小单位是 M,1024M=1G,2048M=2G,4096M=4G。
- 陷阱:有滑轮的选项处,鼠标不小心停留并滑动时,可能会将已选好的内容替换掉。
命令行方式初始化不会自动注册系统服务,图形化 dbca(./dbca.sh)默认自动注册,建议都练。
注意:图形化初始化时,日志部分,题目有时会要求日志文件大小设置,此时需要创建完成后,连接数据库后再进行修改,不要忘记这一步。
./DmServiceDMSERVER start ./DmServiceDMSERVER stop ./DmServiceDMSERVER status
启动后用 ps -ef | grep dmserver 确认进程存在,再用 disql 验证可连接。
./disql SYSDBA/Dameng123:5236
注意:如果端口不是默认的 5236,必须显式写上端口号。
-- 创建表空间 TBS,两个数据文件,各 32M,自动扩展每次 1M,上限 1G
CREATE TABLESPACE "TBS" DATAFILE '/dm8/data/DAMENG/TBS01.DBF' SIZE 32
AUTOEXTEND ON NEXT 1 MAXSIZE 1024,
'/dm8/data/DAMENG/TBS02.DBF' SIZE 32
AUTOEXTEND ON NEXT 1 MAXSIZE 1024 CACHE=NORMAL;
易错点:DM 数据文件最小不能低于页大小的 4096 倍(页大小 8K 时最小 32M),低于会创建报错。
-- 创建用户 TEST01:密码 Dameng123,默认表空间 TBSTEST,最多失败登录 5 次
CREATE USER "TEST01" IDENTIFIED BY "Dameng123"
DEFAULT TABLESPACE TBSTEST
LIMIT FAILED_LOGIN_ATTEMPS 5;
-- 创建角色并赋权(考试必考)
CREATE ROLE DMROLE;
GRANT CREATE TABLE TO DMROLE;
GRANT CREATE INDEX TO DMROLE;
GRANT CREATE VIEW TO DMROLE;
GRANT DMROLE TO TEST01;
-- 部门表(主表)
CREATE TABLE DEPT (
DEPTNO INT PRIMARY KEY,
DNAME VARCHAR(20) NOT NULL,
LOC VARCHAR(30)
);
-- 员工表(从表):五大约束齐全
CREATE TABLE EMP (
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(20) NOT NULL,
EMAIL VARCHAR(50) UNIQUE,
SALARY NUMERIC(10,2) CHECK (SALARY BETWEEN 2000 AND 8000),
DEPTNO INT,
CONSTRAINT FK_EMP_DEPT FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
);
-- 复杂视图:多表连接 + 聚合 + 子查询过滤
CREATE OR REPLACE VIEW V_DEPT_SAL AS
SELECT D.DEPTNO, D.DNAME, SUM(E.SALARY) AS TOTAL_SAL
FROM DEPT D JOIN EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY D.DEPTNO, D.DNAME
HAVING SUM(E.SALARY) > (SELECT AVG(SALARY) * 2 FROM EMP);
-- ① 先建物化视图日志(快速刷新前提!高频失分点)
CREATE MATERIALIZED VIEW LOG ON EMP
WITH ROWID (EMPNO, ENAME, SALARY, DEPTNO)
PURGE START WITH SYSDATE REPEAT INTERVAL '1' DAY;
-- ② 创建物化视图(快速刷新 + 定时刷新计划)
CREATE MATERIALIZED VIEW MV_EMP_SAL
REFRESH FAST WITH ROWID START WITH SYSDATE NEXT SYSDATE + 1 AS
SELECT EMPNO, ENAME, SALARY FROM EMP WHERE SALARY >= 5000;
考试技巧:先单独跑 SELECT 子句确认结果正确,再拼接
CREATE VIEW ... AS,避免视图创建失败反复调试。高频失分点:物化视图增量刷新(fast)必须先建日志表,忘记建日志表或日志列不齐,刷新会失败。
# 全库导出
./dexp SYSDBA/Dameng123 file=/dm8/backup/full.dmp log=/dm8/backup/full.log full=y
# 全库导入
./dimp SYSDBA/Dameng123 file=/dm8/backup/full.dmp full=y
# 模式映射(考试易错点)
./dimp SYSDBA/Dameng123 file=sche.dmp schemas='SRC' remap_schema=SRC:DST
考试时,存储过程和函数考其中之一,其中还会涉及异常处理。
CREATE OR REPLACE FUNCTION F_GET_SAL (
P_EMPNO INT,
P_MONTH VARCHAR(6)
) RETURN NUMERIC(10,2)
AS
V_SAL NUMERIC(10,2);
BEGIN
IF P_EMPNO IS NULL OR P_MONTH IS NULL THEN
RETURN -1;
END IF;
SELECT SALARY INTO V_SAL FROM EMP WHERE EMPNO = P_EMPNO;
IF SQL%NOTFOUND THEN
RETURN -1;
END IF;
RETURN V_SAL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN -1;
WHEN OTHERS THEN
RETURN -1;
END;
/
# odbcinst.ini:注册驱动
[DM8ODBC]
Description = DM ODBC DSN
Driver = /dm8/bin/libdmdpi.so
# odbc.ini:配置数据源
[DM8]
Description = DM Database
Driver = DM8ODBC
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5236
# Python 接口关键:配置环境变量
export PATH=$PATH:/dm8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin
结合个人备考经验,我最想强调以下三点:
1. 提前搭建相似环境
培训期间会提供操作系统镜像和 DM8 安装包,建议提前配置与考试环境相似的环境,以便在培训时跟随讲解操作,同时可以在考试前多次练习。环境搭建得越早,练习时间越充裕,考试时越从容。
2. 提前熟悉题型和细节
考试题数较多,建议提前熟悉考试题型和操作流程。如果平时练习不够,考试时很容易手忙脚乱。同时注意各种细节——初始化参数、单位换算、环境变量、密码大小写等,这些往往是失分点。
3. 熟悉常见问题的解决方式
在实际考试时,可能会遇到各种问题,如果现场查询很可能会浪费时间,建议提前熟悉所有可能遇到的问题,从而遇事不慌。
DCA 认证是一个强调动手能力的考试。它的考核重点不在于理论知识,而在于你是否能熟练、准确地完成一系列数据库管理操作。
通过考试的关键:
文章
阅读量
获赞
