尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

达梦数据库DCA认证题库解析:从内存构造到并发处理的实操指南

达梦数据库DCA认证题库解析:从内存构造到并发处理的实操指南 简介这份达梦DCA考试题库文档面向准备达梦数据库认证考试的学习者与数据库运维初学者围绕达梦数据库基础知识和系统管理两大模块整理成题帮助读者在备考阶段快速梳理考点、检验掌握程度。内容覆盖数据库内存构造、线程构造、日志管理、数据文件、SYSTEM数据库、段簇页关系以及数据库管理员职责等核心知识点并延伸至DM管理工具、ISQL交互式查询工具、主备方案与集群部署等安装卸载相关考点题型以选择题为主便于自测与查漏补缺。资源包共1个doc文件大小约318KB结构紧凑适合打印或导入笔记软件反复练习。目前已有97人学习下载可作为达梦DCA备考的专项刷题材料也可供日常运维人员对照复习数据库构造与工具使用要点。1. 从一份 DCA 题库文档说起达梦数据库认证到底在考什么很多人第一次接触达梦数据库不是因为项目选型而是因为单位要求过 DCA 认证。DCA 是达梦数据库认证助理工程师考试覆盖面比想象中宽——内存构造、线程模型、表空间与文件组、用户权限、模式对象、并发与事务几乎把 DM8 的核心管理面全扫了一遍。这份《DCA考试题库.doc》就是围绕这七章整理的题目集合包含单选、多选和判断题目本身带答案适合拿来当自测清单用。它的价值不在于“背题就能过”而在于帮你快速定位知识盲区。比如“DM 内存构造包含哪三个部分”这种题如果你答不上来说明你还没真正理解 DM 的共享内存池和数据缓冲区是怎么配合工作的。再比如“监听线程的作用是什么”这直接关系到你排查连接问题时能不能看懂服务器日志。所以这份题库更适合当成一张知识地图顺着题目去补对应的实操能力而不是死记选项。适合谁用准备 DCA 考试的人、刚接手达梦运维的工程师、以及从 Oracle 或 MySQL 转过来的 DBA。如果你已经能熟练操作 DM 管理工具和 iSQL这份题库可以帮你查漏补缺如果你连 dmserver 怎么启动都还不清楚建议先装一套 DM8 环境再来看题效果会好很多。2. 达梦数据库的体系结构从内存构造到线程模型2.1 内存构造三件套数据缓冲区、日志缓冲区、共享内存池DM 数据库的内存构造不是一块铁板而是按用途切成了三个核心区域。数据缓冲区存放的是从磁盘读上来的数据页大小由BUFFER参数控制单位是 MB。日志缓冲区专门给重做日志用事务提交时先写日志缓冲区再落盘这是 WAL 机制的基础。共享内存池解决的是小片内存频繁申请释放的问题避免内存碎片拖慢服务器响应。这三个区域在 dm.ini 里都有对应参数。数据缓冲区看BUFFER日志缓冲区看RLOG_BUF_SIZE共享内存池看MEMORY_POOL。调优的时候不要拍脑袋改先用SELECT * FROM V$BUFFERPOOL;看看命中率命中率低于 90% 再考虑加 BUFFER。日志缓冲区一般不用动除非你有大量长事务频繁提交。-- 查看数据缓冲区使用情况 SELECT NAME, N_PAGES, FREE_PAGES, DIRTY_PAGES FROM V$BUFFERPOOL; -- 查看共享内存池状态 SELECT * FROM V$MEM_POOL;第一条语句返回缓冲池的页数、空闲页和脏页数量。如果 FREE_PAGES 长期很低而 DIRTY_PAGES 很高说明缓冲区不够或者检查点频率太低。第二条语句看内存池的分配情况重点关注意外增长正常应该稳定在一个区间内。2.2 线程构造用户线程、日志线程、服务器线程、后台线程DM 的线程模型跟 Oracle 的进程模型不一样它用线程来承载连接和任务。用户线程在用户请求连接时启动每个连接对应一个。服务器线程在建立会话时启动负责执行 SQL。日志线程专门刷日志后台线程干检查点、归档这些杂活。监听线程独立于这些之外只负责在端口上等连接请求。这里有个容易混淆的点用户线程和服务器线程不是一回事。用户线程管连接服务器线程管执行。你在 iSQL 里敲一条 SQL用户线程负责把请求传进去服务器线程负责跑出结果。如果连接数暴涨但 CPU 不高可能是用户线程太多而服务器线程不够用这时候要看MAX_SESSIONS和MAX_THREADS这两个参数。# 查看当前线程数 ps -eLf | grep dmserver | wc -l # 查看监听端口 netstat -tlnp | grep dmserver第一条命令统计 dmserver 进程下的线程总数跟MAX_THREADS对比一下就知道有没有到瓶颈。第二条确认监听端口是否正常如果端口没起来客户端连不上就不是权限问题而是服务没起。2.3 存储构造文件组、段、簇、页的层级关系DM 的存储构造分逻辑和物理两层。逻辑层是数据库、文件组、段、簇、页物理层是数据文件、控制文件、日志文件。一个数据库包含多个文件组一个文件组包含一个或多个数据文件一个数据文件只属于一个数据库。段由簇组成簇是磁盘块的集合页是 I/O 的基本单位。这里有个血泪经验段可以跨越多个物理文件但簇不能。所以你在规划表空间的时候如果一张大表要跨磁盘做条带化得靠文件组来组织不能指望簇自己跨文件。另外页大小在建库时就定了DM8 支持 4K、8K、16K、32K建完不能改。OLTP 场景一般用 8KOLAP 或者有大量大字段的场景可以考虑 16K 或 32K。-- 查看数据库页大小 SELECT PAGE_SIZE FROM V$DATABASE; -- 查看文件组和数据文件对应关系 SELECT GROUP_ID, FILE_ID, PATH, TOTAL_SIZE FROM V$DATAFILE;第一条确认页大小迁移或备份恢复时两边页大小必须一致否则起不来。第二条看文件组的物理分布如果所有文件都在同一块盘上I/O 瓶颈迟早会出现。3. 安装部署与实例管理从 dmserver 到 iSQL 的完整链路3.1 Linux 下安装 DM8 的关键步骤与参数Linux 下装 DM8 跟装 Oracle 比简单不少但有几个坑必须提前避开。首先用管理员身份登录检查磁盘空间——系统盘至少留 500M数据盘至少 5G。然后挂载光盘镜像进入目录执行./DMInstall.bin。图形化安装需要 X11 转发如果服务器没桌面环境就用命令行模式加-i参数。安装过程中会让你选安装类型典型、服务器、客户端、自定义。做 DBA 练习直接选典型会把管理工具、iSQL、DTS 都装上。安装路径默认/opt/dmdbms建议别改后面配环境变量省事。安装完成后必须执行root下的脚本注册服务否则 dmserverd 起不来。# 挂载光盘 mount -o loop dm8_setup.iso /mnt/cdrom # 命令行安装 cd /mnt/cdrom ./DMInstall.bin -i # 安装后注册服务 cd /opt/dmdbms/script/root ./dm_service_installer.sh -t dmserver -p DMSERVER -i /opt/dmdbms/bin/dm.ini第一条挂载镜像-o loop是把文件当块设备用。第二条-i进入交互式命令行安装按提示选典型安装即可。第三条注册系统服务-t dmserver指定服务类型-p DMSERVER是服务名后缀-i指向 dm.ini 路径。注册完就能用systemctl start DmServiceDMSERVER来管理了。3.2 启动停止的三种方式菜单、服务、命令行DM 服务启停有三种路子。Windows 下可以用菜单里的“DM 服务查看器”也可以用services.msc里的服务项还可以进 bin 目录跑dmserver命令。Linux 下推荐用 systemd 服务systemctl start/stop DmServiceDMSERVER最稳。命令行方式适合调试直接./dmserver /path/to/dm.ini前台跑日志直接打屏幕上。这里有个常见翻车点用dmserver命令前台启动后直接关终端窗口会把数据库带崩。正确做法是启动后另开一个终端操作或者用nohup挂后台。如果已经崩了看dm_xxx.log里有没有 “abnormal shutdown” 字样有的话说明是非正常关闭下次启动会走实例恢复时间长短取决于 redo 日志量。# 前台启动调试用 cd /opt/dmdbms/bin ./dmserver /opt/dmdbms/data/DAMENG/dm.ini # 服务方式启动 systemctl start DmServiceDMSERVER # 查看服务状态 systemctl status DmServiceDMSERVER第一条前台启动能看到完整的启动日志适合排查启动失败。第二条走 systemd生产环境用这个。第三条看服务状态重点看 Active 那一行是不是 running以及最近的日志有没有报错。3.3 iSQL 登录与常用管理命令iSQL 是 DM 的命令行客户端跟 Oracle 的 sqlplus 定位一样。Windows 下进 bin 目录跑isql.exe然后login按提示输服务器、用户名、密码、端口。Linux 下更简单直接./isql SYSDBA/SYSDBAlocalhost:5236一行搞定。端口默认是 5236不是 MySQL 的 3306 也不是 Oracle 的 1521别记混。登录进去之后常用命令跟 sqlplus 有差异。查看所有表用SELECT * FROM USER_TABLES;查看表结构用SP_TABLEDEF(模式名,表名);退出用exit。注意 DM 默认端口在 dm.ini 里由PORT_NUM控制如果连不上先netstat看端口有没有监听再看防火墙有没有放行。-- 登录后查看当前用户 SELECT USER FROM DUAL; -- 查看所有模式 SELECT NAME FROM SYSOBJECTS WHERE TYPE$SCH; -- 查看表结构 SP_TABLEDEF(SYSDBA,TEST);第一条确认当前登录用户避免用错账号。第二条列出所有模式DM 里每个用户默认有一个同名模式。第三条是 DM 特有的存储过程比DESC命令返回的信息更全包含列类型、是否可空、默认值等。4. 用户权限与模式对象管理避开权限设计的三个坑4.1 登录、用户、模式的三层关系DM 的权限体系分三层登录、用户、模式。登录是身份认证用户是数据库内的账号模式是对象的容器。一个登录只能对应一个数据库中的一个用户但一个用户可以拥有多个模式。系统建用户时会自动建一个同名模式作为默认模式你也可以手动建其他模式。这里最容易搞混的是登录和用户不是一一对应的。你可以建一个登录但不建用户也可以建用户但不建登录用操作系统验证。SYSDBA 是默认的超级管理员登录名和用户名都是 SYSDBA密码初始也是 SYSDBA。生产环境第一件事就是改密码别留着默认的。-- 创建登录 CREATE USER TEST_USER IDENTIFIED BY Test12345; -- 创建模式 CREATE SCHEMA TEST_SCHEMA AUTHORIZATION TEST_USER; -- 授予权限 GRANT CREATE TABLE, CREATE VIEW TO TEST_USER;第一条建用户密码必须满足口令策略默认要求大小写加数字加特殊字符。第二条建模式并指定所属用户。第三条给系统权限CREATE TABLE和CREATE VIEW是最常用的两个。注意 DM 的密码是区分大小写的引号不能省。4.2 系统权限与对象权限的授予和回收DM 权限分系统权限和对象权限。系统权限不针对特定对象比如CREATE TABLE、BACKUP DATABASE。对象权限针对具体对象比如对某张表的SELECT、INSERT。授予用GRANT回收用REVOKE。系统权限回收不会级联对象权限回收可能级联——如果你把权限授给了 AA 又授给了 B你从 A 回收时 B 的权限也会被收走。角色是用来简化权限管理的。DM 有系统角色如 DBA、RESOURCE、PUBLIC也可以自定义角色。把权限授给角色再把角色授给用户比一个个授权限省事得多。注意DB_AUDIT_ADMIN和DB_POLICY_ADMIN这两个角色权限很大别随便给。-- 创建角色 CREATE ROLE APP_READONLY; -- 给角色授对象权限 GRANT SELECT ON SYSDBA.TEST TO APP_READONLY; -- 把角色授给用户 GRANT APP_READONLY TO TEST_USER; -- 回收对象权限 REVOKE SELECT ON SYSDBA.TEST FROM APP_READONLY;第一条建角色。第二条给角色授表的查询权限。第三条把角色给用户用户就自动有了角色里的所有权限。第四条回收权限注意如果角色已经授给了用户回收后用户立即失去对应权限。4.3 模式对象的创建与管理表、索引、视图、序列模式对象里最常用的是表、索引、视图、序列。建表时可以指定主键、唯一约束、检查约束、外键。索引分唯一索引和非唯一索引B 树结构可以升序或降序。视图是虚表数据字典里只存定义数据还在基表里。序列用来生成自增主键比 MySQL 的 AUTO_INCREMENT 灵活。建索引有个原则WHERE 子句频繁出现的字段建唯一值很少的字段不建经常作为连接字段的建。DM 支持索引压缩重复键值多的场景可以省空间。视图要注意权限检查——如果视图创建者也是基表创建者访问视图时不检查基表权限否则要检查。-- 建表带约束 CREATE TABLE SYSDBA.EMP ( ID INT PRIMARY KEY, NAME VARCHAR(50) NOT NULL, SALARY NUMBER(10,2) CHECK (SALARY 0), DEPT_ID INT ); -- 建索引 CREATE INDEX IDX_EMP_DEPT ON SYSDBA.EMP(DEPT_ID); -- 建序列 CREATE SEQUENCE SEQ_EMP_ID START WITH 1 INCREMENT BY 1 NOMAXVALUE; -- 建视图 CREATE VIEW V_EMP_HIGH AS SELECT ID, NAME, SALARY FROM SYSDBA.EMP WHERE SALARY 10000;第一条建表PRIMARY KEY自带唯一约束和非空约束CHECK约束保证工资为正。第二条在部门 ID 上建索引加速按部门查询。第三条建序列NOMAXVALUE表示不设上限。第四条建视图只暴露高薪员工信息起到权限隔离作用。5. 并发处理与数据操作事务、锁和 MERGE 的实战细节5.1 INSERT SELECT 与 MERGE 的适用场景数据复制有两种常用方式INSERT SELECT和MERGE。INSERT SELECT适合批量追加把一张表的数据整块搬到另一张表。MERGE适合“有则更新、无则插入”的场景比如从临时表同步数据到主表。MERGE的语法跟 Oracle 基本一致但要注意 DM 里MERGE INTO的目标表不能有重复匹配行否则报错。INSERT SELECT的坑在于字段顺序和类型必须严格对应少一个字段就报错。MERGE的坑在于ON条件如果匹配到多行DM 会直接抛异常而不是随便选一行。所以用MERGE之前先用SELECT确认ON条件在源表里是唯一的。-- INSERT SELECT 批量插入 INSERT INTO SYSDBA.TEST2 (ID, NAME) SELECT ID, NAME FROM SYSDBA.TEST1 WHERE ID 100; -- MERGE 有则更新无则插入 MERGE INTO SYSDBA.TEST2 T USING SYSDBA.TEST1 S ON (T.ID S.ID) WHEN MATCHED THEN UPDATE SET T.NAME S.NAME WHEN NOT MATCHED THEN INSERT (ID, NAME) VALUES (S.ID, S.NAME);第一条把 TEST1 里 ID 大于 100 的记录插到 TEST2。第二条MERGE按 ID 匹配匹配上就更新 NAME匹配不上就插入新行。注意MERGE语句末尾不能有分号以外的多余符号否则语法报错。5.2 事务控制与 ROLLBACK 的正确用法DM 默认是自动提交模式每条 DML 执行完就提交。如果你要手动控制事务得先SET AUTOCOMMIT OFF;然后COMMIT或ROLLBACK。ROLLBACK只能撤销未提交的更改提交之后想恢复就得靠闪回或者备份了。DM 没有 Oracle 那么强的闪回查询所以改数据之前最好先SELECT确认一遍。有个容易翻车的点在 iSQL 里执行UPDATE忘了加WHERE整张表都被改了。如果自动提交开着ROLLBACK也救不回来。所以生产环境操作数据前先SET AUTOCOMMIT OFF;改完确认无误再COMMIT。这个习惯能帮你省掉很多后悔药。-- 关闭自动提交 SET AUTOCOMMIT OFF; -- 更新数据 UPDATE SYSDBA.EMP SET SALARY SALARY * 1.1 WHERE DEPT_ID 10; -- 确认无误后提交 COMMIT; -- 如果有问题则回滚 ROLLBACK;第一条关自动提交。第二条给部门 10 的员工涨薪 10%注意WHERE条件不能漏。第三条确认影响行数正确后提交。第四条如果发现改错了在提交前执行回滚。5.3 PL/SQL 块、存储过程与触发器的权限检查DM 支持 PL/SQL包括存储过程、函数、包、触发器。存储过程可以没有返回值用CALL调用。函数必须有RETURN语句。包分规范和主体规范先定义主体后实现。触发器分语句级和行级还有INSTEAD OF触发器用于视图。权限检查是这里最容易踩坑的地方。创建存储过程时检查引用对象的权限调用时检查执行权限。如果存储过程里引用了其他用户下的表要么用AUTHID CURRENT_USER让权限按调用者算要么确保创建者有足够权限。触发器里如果做 DML 操作也要检查对应权限否则触发器编译不过。-- 创建存储过程 CREATE OR REPLACE PROCEDURE SYSDBA.P_RAISE_SALARY( P_DEPT_ID IN INT, P_PERCENT IN NUMBER ) AS BEGIN UPDATE SYSDBA.EMP SET SALARY SALARY * (1 P_PERCENT/100) WHERE DEPT_ID P_DEPT_ID; COMMIT; END; / -- 调用存储过程 CALL SYSDBA.P_RAISE_SALARY(10, 10);第一条建存储过程两个入参部门 ID 和涨幅百分比。过程体里执行更新并提交。第二条调用过程给部门 10 涨 10%。注意 DM 里存储过程结尾的/要单独一行否则 iSQL 不认。6. 题库自测与实操验证把选择题变成排查能力题库里的题不是背完就完了得把它变成排查问题的直觉。比如“监听线程的作用”这道题标准答案是“监听用户连接请求在客户端和服务器之间建立连接”。但实际工作中你更该关心的是如果监听线程挂了客户端报什么错答案是“网络通信异常”或“连接被拒绝”。这时候你去看dm_xxx.log会看到监听线程退出的记录重启服务就能恢复。再比如“DM 内存构造包含哪三个部分”这道题背下来是数据缓冲区、日志缓冲区、共享内存池。但实操中你要知道数据缓冲区不够会频繁读磁盘日志缓冲区不够会频繁刷盘共享内存池不够会报“内存分配失败”。对应的排查命令分别是V$BUFFERPOOL、V$RLOG、V$MEM_POOL。把题目和视图对应起来才算真正掌握了。下面这张表把题库里的高频考点和对应的验证命令列出来建议对着表在测试环境里跑一遍。考点验证命令正常值参考数据缓冲区命中率SELECT NAME, N_PAGES, FREE_PAGES FROM V$BUFFERPOOL;FREE_PAGES 占比 10%日志缓冲区状态SELECT * FROM V$RLOG;无频繁等待共享内存池SELECT * FROM V$MEM_POOL;无异常增长会话与线程SELECT COUNT(*) FROM V$SESSIONS;低于 MAX_SESSIONS文件组分布SELECT GROUP_ID, PATH FROM V$DATAFILE;分散在不同磁盘锁等待SELECT * FROM V$LOCK;无长时间阻塞跑完这些查询再回头看题库里的选择题你会发现很多题的答案自然就记住了。比如“v$SESSION 描述什么”这道题你查过V$SESSIONS视图就知道它存的是会话信息而不是锁信息。锁信息在V$LOCK里。这种通过实操建立起来的记忆比死背选项牢固得多。最后说一个我自己的习惯每次准备 DCA 或者 DCP 考试之前我都会在虚拟机里装一套全新的 DM8从建库、建用户、建表、建索引一路做到备份恢复然后把题库里每一道错题对应的知识点在环境里复现一遍。比如题目问“删除模式时级联删除会有什么后果”我就真的建一个模式里面放几张表然后DROP SCHEMA ... CASCADE看看表是不是真的都没了。这种验证方式花时间但比刷十遍题都管用。从那以后我每次带新人都强制让他们先装环境再刷题光看文档不动手考试能过活干不了。希望帮到你。本文还有配套的精品资源点击获取
返回列表