本文整理了DCA(达梦数据库管理员)认证培训的核心内容,涵盖DM数据库的安装部署、实例创建、逻辑存储结构、SQL基础语法、索引与视图、序列与同义词、DBLINK、备份还原、存储过程与触发器等内容。截图来自培训课件,按主题配以文字说明,便于复习查阅。
达梦数据库按功能定位分为标准版、企业版和开发版三个版本。标准版面向中小型企业,不支持集群等特性,满足常规生产应用需求;企业版在标准版基础上增加了安全特性,如强制访问控制、审计等,适用于大中型生产环境;开发版限制使用时间,不能作为商用。
实际选型时根据业务规模和合规要求来确定。
DM数据库支持三种安装方式。
图形化安装:Linux中图形界面基于X Window系统或Wayland,需要X11、GTK、QT等相关基础库,应先配置X服务器访问权限和显示设置,再执行安装程序 ./DMInstall.bin;
命令行安装:不需要图形界面相关依赖包,直接执行 ./DMInstall.bin -i;
静默安装:需先配置安装配置文件(XML),然后执行 ./DMInstall.bin /XX/XXX.xml,适合批量部署场景。
图形化安装的第一步,在安装介质目录下以dmdba用户执行 ./DMInstall.bin 启动安装向导,终端会输出版本信息等提示。
启动后进入安装向导欢迎界面,一路点击"下一步"继续。
许可证选择步骤。正式环境需提供购买的license授权文件,测试或学习环境选择"否"即可,不影响后续安装。
选择要安装的组件,如服务器、客户端、驱动、用户手册、数据库服务等,按需勾选,界面会实时显示所需空间。
选择达梦数据库的安装目录,如 /dm/dmdbms,同时确认磁盘可用空间是否满足所需空间要求。
安装完成后,需要以root用户执行配置脚本 /dm/dmdbms/script/root/root_installer.sh,用于注册数据库服务等系统级操作。
命令行安装执行 ./DMInstall.bin -i,按提示依次选择时区(中国为21,GMT+08:00)、安装类型(1典型安装、2服务器、3客户端、4自定义)和安装目录,确认后自动开始安装。服务器上无图形环境时常用此方式。
安装完成后通过图形化工具 ./dbca.sh(DM数据库配置助手)创建实例。第一步选择数据库模板,可选用途(一般用途)、联机分析处理(OLAP)或联机事务处理(OLTP),并勾选是否自动调整数据库性能参数(高性能/平衡)。
指定数据库所在目录,如 /dm/dmdbms/data,实例文件将存放在该目录下。
查看数据库文件所在位置,包括控制文件、数据文件、日志文件和初始化日志的完整路径,如 /dm/data/DAMENG/DAMENG01.log 等。
设置数据库初始化参数:簇大小、页大小(范围8~256,通常选8K)、日志文件大小、时区设置、页校验、字符集(默认GB18030)等。
口令管理。为SYSDBA、SYSAUDITOR等系统用户设置口令,口令长度8~48位,需同时包含大写字母、小写字母、数字,可以为每个系统用户设置不同口令,也可统一设置。
创建数据库概要确认后,同样需要以root用户执行配置脚本:注册服务(DmServiceDMSERVER.service)、设置开机自启(systemctl enable)、启动服务(systemctl start),完成后数据库实例创建成功。
DM提供多种启动方式。
DM服务查看器(图形化):root执行tool目录下dmservice.sh打开,对新手友好,但不支持启动到mount状态;
Linux服务方式:root用户使用systemctl start/stop/status/restart DmServiceDMSERVER管理;
dmserver命令前台启动:dmdba执行 dmserver /dm8/data/DAMENG/dm.ini,可加mount参数启动到mount状态;
DmService+实例名后台启动:适用于已注册数据库服务,命令为 DmServiceDMSERVER start/stop/status/restart,同样支持 start mount 启动到mount状态。
达梦数据库在逻辑上由多个表空间组成,每个表空间由一个或多个数据文件组成。结构自上而下为:用户→模式→表、索引→数据页(块)→操作系统(物理层数据文件)。逻辑对象最终映射到磁盘上的物理存储。
表空间(Tablespace)作为逻辑容器,用于组织和管理数据库对象(如表、索引等)的物理存储,将数据与物理存储位置解耦。
作用有四:
逻辑与物理分离(无需直接操作文件,通过表空间管理数据位置);
存储管理(不同对象分配不同表空间,优化IO性能);
资源隔离与权限控制(限制用户对表空间的写权限,增强安全性);
提高维护效率(支持单独备份、恢复或迁移某个表空间)。
表空间逻辑组成
表空间逻辑上采用段、簇和页的方式管理。段是簇的集合,可以包含多个簇,且可以跨越数据文件;簇是连续数据页的集合,一个簇只能在一个数据文件中;页是数据库最小的存储单元,也是最小的IO单元,数据页映射到磁盘块。
当表空间空间不足,或数据文件需要扩大、迁移至其他存储时,通过 ALTER TABLESPACE 语句管理数据文件。
RENAME DATAFILE 可实现数据文件的迁移和重命名;ADD DATAFILE 用于添加数据文件;RESIZE DATAFILE 用于扩大或缩小数据文件(要求表空间ONLINE、数据库OPEN,且只有未分配的簇才能缩减);
DROP DATAFILE 删除数据文件,必须先删除最大文件ID的文件,不能删除表空间中0号文件或唯一文件。
DDL(数据定义语言)用于定义和管理数据库结构,负责对象的创建、修改、删除。常用命令:CREATE(创建表、索引、视图等)、ALTER(修改现有对象结构,如添加列)、DROP(删除对象)、TRUNCATE(快速清空表数据,保留表结构)、RENAME(重命名对象)、COMMENT(添加注释)。
DML(数据操作语言)负责数据的增、删、改、查操作。常用命令:INSERT(插入新数据)、UPDATE(更新现有数据)、DELETE(删除数据)、MERGE(合并数据,匹配则更新、不匹配则插入)。
核心功能不同:DDL定义或修改数据库结构,DML操作数据。事务性不同:多数DDL隐式提交(自动提交、不可回滚),DML支持事务可回滚。性能影响不同:DDL可能影响整个表或数据库结构,DML通常只影响单行或部分数据。
INSERT 用于向表中插入数据,语法:INSERT [INTO] 表名 [(column,…)] VALUES (value,…)。
插入一行示例:向TEST.T_USERINFO加一条记录。需要一次性插入多行时,用逗号分隔多组值即可。
UPDATE 用于更新表中的数据,使用WHERE子句更新指定条件的数据。语法:UPDATE 表名 SET 列=值 [, …] [WHERE condition]。
示例:修改用户编码为2的邮箱信息 UPDATE test.t_userinfo SET email=’…’ WHERE userid=2。
DELETE 用于删除表中的数据,支持整表删除和多表联合删除。语法:DELETE [FROM] 表名 [WHERE condition]。
指定WHERE子句可删除特定行,如删除userid=1的记录;不带WHERE则删除全部数据,生产环境务必慎重。
数据库约束(Constraint)是为保证数据完整性(正确性)而实现的一套校验机制,核心目标是保证数据的完整性和一致性。约束分为列级和表级两类,处理机制相同,列级约束针对单列,表级约束可以用于多列。
常见约束类型:主键(唯一标识行)、外键(跨表引用完整性)、唯一约束、检查约束(限制值范围或逻辑)、默认值约束、非空约束。
主键约束用来唯一标识表中的每一行记录。一张表只能创建一个主键,主键列数据不能重复且不能为空。
创建时若未指定约束名,默认使用CONS开头的约束名。
添加主键:ALTER TABLE t_userinfo ADD CONSTRAINT pk_userinfo_userid PRIMARY KEY(userid);
删除主键:ALTER TABLE t_userinfo DROP PRIMARY KEY。
图中同时展示了管理工具中通过表设计界面设置主键的操作。
数据存储在表中,表由行(Tuple或Row)和列(Column)组成,列构成表结构,行组成表数据。
SELECT语句从表中查询所需数据,但不会改变表中的数据,只是将数据提取并显示出来。
SELECT语句的三大关键要素:选择(查询符合条件的行)、投影(查询符合条件的列)、连接(从多个表中查询数据,是关系型数据库的核心,把数据放在不同表里,通过连接获得完整信息)。
通过 AS alias_name 子句为表或列名指定别名,目的是简化表名和列名,使SQL可读性更强。
语法:列和表的别名分别跟在相应的列名和表名后面,中间可以加或不加AS关键字。
示例:select t.employee_name, t.salary, t.salary+1000 as newsal from dmhr.employee t,查询结果中显示别名列名。
WHERE条件用于过滤数据,条件由表达式与操作符共同指定,且条件返回的值是TRUE或UNKNOWN。
predicate子句支持多种形式:比较运算(=、>、<等)、 LIKE 字符串匹配、BETWEEN 范围、IS NULL 空值判断、 IN 集合匹配、 EXISTS 存在性判断。
查询条件由表达式和操作符组成,操作符包含比较操作符、逻辑操作符等。当查询条件与字符及日期类型的数据比较时,必须用单引号引起来。
常见的比较操作符:=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>(不等于)、BETWEEN…AND…(介于两个值之间,包含这两个值)、IN(set)(与值列表的任一值匹配)、LIKE(与某个字符模式匹配)、IS NULL(为空值)。
如果希望返回的结果满足多个条件,使用AND连接这些条件;如果希望返回的结果满足多个条件之一即可,使用OR连接。
常用的逻辑操作符有AND、OR和NOT,运算结果有三个值:TRUE、FALSE和NULL(表示未知)。
运算优先级顺序为:NOT > AND > OR。
LIKE谓词一般用来进行字符的模糊匹配。
语法:<列名> LIKE <匹配字符串常数>。匹配串中可以用两个通配符:百分号"%“代表任意字符串(可以是空串),下划线”_"代表任意一个字符。
示例:查询姓李的员工信息,条件写 WHERE T.EMPLOYEE_NAME LIKE ‘李%’。
9.6NULL与空字符串
NULL表示"未知"或"缺失"的值(无数据),所有类型均可为NULL;空字符串表示长度为0的字符串(有数据),仅适用于字符类型。
比较逻辑上,NULL=NULL返回NULL(非真),空串=空串返回TRUE。
查询NULL用 IS NULL/IS NOT NULL。聚合函数会忽略NULL,但空串作为有效值参与计算。这是达梦与Oracle一致、与部分其他数据库不同的地方,写SQL时要注意。
查询两个或两个以上表或视图的查询称为连接查询,通常建立在存在相互关系的父子表之间。
SQL92标准中,CROSS JOIN、NATURAL JOIN、JOIN USING、JOIN ON 和 JOIN+WHERE 是表连接的多种方式:交叉连接、自然连接、USING子句、ON子句、自连接、内连接、外连接(左外连接、右外连接、全外连接)。
几条连接查询的规范:使用表前缀可以限定多个表中的列名;使用表前缀可以提高性能;使用列别名可以区分位于不同表中但名称相同的列;使用表别名可以简化查询;N张表至少要有N-1个连接条件。
交叉连接(CROSS JOIN)返回两个表的笛卡尔积,即左表每一行与右表所有行的组合。
特点:无需连接条件,结果集行数=左表行数×右表行数。示例:SELECT * FROM DMHR.EMPLOYEE E CROSS JOIN DMHR.DEPARTMENT D。
卡尔积通常没有业务意义,实际中较少单独使用。
自然连接(NATURAL JOIN)根据两表中同名列自动匹配连接,隐式使用这些列作为等值连接条件。
若两表无同名列,结果等价于CROSS JOIN。
慎用:可读性差,依赖隐式行为;若只是列名相同而数据类型不同则会产生错误;表结构变化可能导致非预期结果。
JOIN ON(显式条件连接)通过自定义条件连接表,支持灵活的非同名列、复杂表达式、非等值连接等。
这是最常用的连接方式。优点:灵活性最高,支持非等值连接、多条件组合;可读性强,显式声明逻辑。
示例:SELECT * FROM dmhr.employee e JOIN dmhr.department d ON e.department_id = d.department_id。
外连接语法:SELECT table1.column, table2.column FROM table1 [LEFT|RIGHT|FULL [OUTER]]|[INNER] JOIN table2 ON (table1.column_name = table2.column_name)。
不加外连接关键字时默认为INNER内连接。左外连接保留左表全部行,右外连接保留右表全部行,全外连接保留两表全部行。
内连接(INNER JOIN)返回两个表中满足连接条件的行(交集),只保留匹配的行,非匹配行被丢弃。
这是默认的连接方式,INNER关键字可省略。
示例:查询员工及其部门名称,SELECT E.EMPLOYEE_ID, E.EMPLOYEE_NAME, D.DEPARTMENT_NAME FROM DMHR.EMPLOYEE E JOIN DMHR.DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID。
ORDER BY子句用于对查询语句返回的行根据指定的列进行排序,一般放在SELECT语句的末尾。
默认按升序ASC排列,DESC为降序。NULLS FIRST/LAST关键字指定ORDER BY列中NULL值的排序位置,默认NULL FIRST。
COLLATE关键字指定排序规则,目前仅支持 Chinese_PRC_CS_AS_KS_WS(按中文拼音排序),且仅适用于VARCHAR类型的列。
TOP子句用来筛选结果集的前N条记录。用法:TOP <n> 选择结果的前n条记录;TOP <m,n> 选择第m条记录之后的n条记录;TOP <n> PERCENT 选择结果的前n%条记录;
TOP <n> PERCENT WITH TIES 在前n%的基础上返回额外的行——与最后一行排序键相同的所有行。WITH TIES必须与ORDER BY子句同时出现,没有ORDER BY则忽略。
数据限制功能包括LIMIT子句和OFFSET子句。
LIMIT限制查询返回的行数,OFFSET设置开始返回的位置。
支持四种写法:LIMIT N(前N条);
LIMIT M,N(第M条之后的N条);
LIMIT N OFFSET M;
OFFSET M LIMIT N。
注意:一个查询表达式中不能同时包含LIMIT和TOP子句;LIMIT子句可用在UPDATE或DELETE操作之后,如 DELETE FROM T1 LIMIT 2。
索引(Index)是数据库中用于加速数据检索的一种数据结构,类似于书籍的目录,通过预排序关键字段的引用,减少查询时的全表扫描开销。索引是一种数据库对象,通过指针加速查询速度,通过快速定位数据的方法减少磁盘IO。索引与表相互独立,且占用存储空间,由数据库自动使用和维护。
索引数据有序,按照索引列值排序;索引中存储列值和ROWID,可快速定位数据、减少磁盘IO;索引数据需要占用额外存储空间,一般单独规划表空间用于存储索引数据;索引会导致增删改操作变慢,DML操作需同步维护索引数据。
DM支持的索引类型包含:位图索引(BITMAP)、位图连接索引、全文索引(CONTEXT)、空间索引(SPATIAL)、聚簇索引(CLUSTER)、非聚簇索引(NOT PARTIAL)、唯一/非唯一索引、函数索引、组合索引、全局索引和分区索引。
适合建索引的场景:
高频查询列——当检索大表中的少量行,WHERE条件列可创建索引;
被驱动表的连接列——多个表连接时,在被驱动表的连接列(ON连接键)上创建索引;
排序与分组列——ORDER BY、GROUP BY涉及的列;
唯一性约束——创建主键/唯一键约束时,系统会自动为主键/唯一键列创建索引(如手机号码)。
大表中查询少量数据,查询列可以创建索引;
索引列选择值相对比较唯一(高区分度)、取值范围大的;
索引和表可以放在不同表空间(在不同磁盘上),减少磁盘争用;
索引不是越多越好,过多的索引降低基表DML效率;
创建组合索引时遵循最左前缀原则(如索引(A,B,C)可优化A、A+B查询),经常查询的列应放在最前面;
小表不需要索引;
CLOB和TEXT只能建立全文索引,BLOB不能建立任何索引。
索引有两个重要属性。失效/有效:索引默认为有效(VALID)状态,无效(UNUSABLE)的索引需要重建;可见/不可见:索引默认为可见(VISIBLE)状态,对执行计划可见,不可见(INVISIBLE)的索引执行计划不会选择。查询索引状态可查 user_indexes 视图的 visibility、status 字段。

视图(View)是一种虚拟表,由视图名和查询语句组成,其内容由预定义的SQL查询动态生成。视图特征:不占用存储空间——数据动态生成,仅保存查询定义(DDL),数据来源于底层基表;增强数据安全——通过视图限制用户访问敏感字段(如隐藏密码、薪资列);简化查询——封装多表关联、复杂过滤条件或聚合操作;逻辑独立性——基表结构变更时,可通过调整视图定义保持上层应用不受影响。
视图的分类如下
简单视图:基于单表的查询,不含聚合或复杂逻辑(如 SELECT * FROM users),简单视图数据可更新。
复杂视图:包含多表连接、子查询、聚合函数(如JOIN、SUM())等。
物化视图:包含物化视图表(MTAB开头)和物化视图,物化视图存储数据,数据存储在物化视图基表中。
动态性能视图(Dynamic Performance Views)是以V或GV开头的视图,是数据库运行时生成的虚拟表,用于实时监控数据库实例的状态、性能和资源使用情况等。数据存储在内存中,由数据库实例动态更新。
DM中可以通过查询 VDYNAMIC_TABLES 获得所有的动态性能视图信息。常用于查看会话信息、等待事件、内存分配等。

常用动态性能视图:vdynamic_tables(系统中所有动态性能视图)、vbuffer(记录缓冲池页结构的信息)、vdatafile(数据文件信息)、vcachepln(SQL缓冲区中执行计划)、vsessions(会话信息和阻塞情况)、v$trxwait(事务等待)。日常排障时这几个视图用得最多。
数据来源不同:普通视图基于基表(基表删除视图会变),动态性能视图来自内存(临时存储)。内容类型不同:普通视图是静态数据,动态性能视图是动态运行时状态(性能指标)。生命周期不同:普通视图持久化,动态性能视图临时存在,实例重启后重置。访问权限不同:普通视图需拥有对象权限或SELECT VIEW权限,动态性能视图需对象权限或VTI权限。访问时数据库状态不同:普通视图要求OPEN,动态性能视图MOUNT、OPEN均可访问。
创建视图语法:CREATE [FORCE] [IF NOT EXISTS] [<模式名>.]<视图名>[(<列名>{,<列名>})] AS <SELECT查询语句> [WITH CHECK OPTION]|[WITH READ ONLY]。
说明:创建视图要有CREATE VIEW权限,且对查询语句中的表有SELECT权限;视图列名不得同名,可省略(默认使用SELECT查询语句中的列名);FORCE选项用于强制创建视图,基表可以不存在,视图处于无效状态;WITH CHECK OPTION用于可更新视图,指明INSERT或UPDATE的数据必须满足视图定义中查询说明所指定的条件。
物化视图(Materialized View)的本质是预先计算并存储查询结果的物理表,并通过定期或实时刷新来保持与基表的数据同步。
系统在创建物化视图时会自动创建物化视图和物化视图表(MTAB$_开头,数据保存在物化视图表中)。基表数据实时更新,物化视图数据需要定时或手工刷新才能保证数据同步。
创建物化视图语法要点:
<辅助表子句> BUILD IMMEDIATE(立即填充,默认)或 BUILD DEFERRED(延迟填充,第一次刷新必须为COMPLETE完全刷新);<预建表子句> FOR <预建表表名> ON PREBUILT TABLE(指定一个已存在的表作为物化视图的辅助表);<刷新选项> REFRESH 刷新方法 FAST/COMPLETE/FORCE、刷新时机 ON DEMAND/ON COMMIT/START WITH/NEXT、刷新规则 WITH PRIMARY KEY/WITH ROWID、完全刷新方式 USING DEFAULT/TRUNCATE/DELETE。
物化视图日志(Materialized View Log)是支持物化视图增量刷新的核心机制,高效跟踪基表的数据变化,避免物化视图刷新时的全量数据重建,提升刷新性能。
工作原理:日志记录(基表DML数据变化记入MLOG$_表)→增量刷新(基于物化视图日志数据增量刷新物化视图)→日志清理(已处理的日志会被清理或标记过期)。
物化视图日志创建语法:
CREATE MATERIALIZED VIEW LOG ON [<模式名>.]<表名> [<表空间子句>] [<STORAGE子句>] [<WITH子句>] [<PURGE选项>]。
WITH子句指定基表中哪些列包含到日志中(PRIMARY KEY/ROWID/SEQUENCE/(列名列表)),SEQUENCE为默认选项,使用WITH PRIMARY KEY则基表必须有主键。
PURGE选项指定无用记录的清除方式:PURGE IMMEDIATE立即清除(缺省)或 PURGE START WITH…定时清除。一个物化视图日志对应一个基表。
物化视图日志刷新:
可以使用DBMS_MVIEW系统包的REFRESH方法刷新物化视图,如 DBMS_MVIEW.REFRESH(‘DMHR.MV_EMPNUM’,‘C’)。参数说明:LST——要刷新的物化视图名称,多个物化视图用逗号隔开;METHOD——对应刷新方式,'F’表示快速刷新,'C’表示完全刷新,空串表示默认刷新方式,标记不区分大小写;ATOMIC_REFRESH——LST中所有物化视图如果有失败的话,是提交已成功刷新的记录还是全部不提交,TRUE表示全部不提交(缺省),FALSE表示提交已成功的记录。
数据存储:普通视图不存储数据,仅保存查询逻辑语句(虚拟表);物化视图存储查询结果的物理数据(实体表)。查询性能:普通视图每次查询动态计算可能较慢;物化视图直接读取预计算结果,速度极快。刷新机制:普通视图实时(查询时自动生成结果);物化视图手动或自动定期刷新。数据实时性:普通视图实时;物化视图非实时有延迟(可基于事务刷新做到实时)。适用场景:普通视图适合简单查询、逻辑封装;物化视图适合复杂聚合、高频查询优化、历史数据快照。
序列(Sequence)是数据库中生成唯一、有序数字序列的对象,通常用于为表的主键列自动提供唯一值。核心特性:唯一性——确保生成的数值不重复;有序性——数值按创建规则递增或递减;高效性——避免手动生成主键的竞争和性能问题。作用:自动生成数值(无需手动插入,减少代码复杂度)、跨会话共享(多个用户或事务可安全获取唯一值)、灵活控制(可定义起始值、步长、循环等规则)。
创建语法:
CREATE SEQUENCE [<模式名>.]<序列名> [<序列选项列表>]。选项包括:INCREMENT BY <增量值>、START WITH <初值>、MAXVALUE/MINVALUE(最大/最小值)、CYCLE(循环)、CACHE <缓存值>(预分配,放在内存中以便更快访问)、ORDER等。
升序序列最大值缺省为9223372036854775807,最小值缺省为1;若指定的最大/小值超出缺省值,系统自动置为缺省最大/小值。
DM提供序列修改语句,可修改序列步长值、最大/最小值、缓存值、循环属性、ORDER属性、当前值,也可为序列重命名。
语法:ALTER SEQUENCE [<模式名>.]<序列名> {<序列修改选项列表>|<序列重命名选项>}。
注意:序列的拥有者或具有ALTER ANY SEQUENCE权限的用户才能修改序列;起始值不能修改,当前值可以修改(介于最小值和最大值之间);修改当前值后,需要使用NEXTVAL获取修改后的序列当前值。
示例:ALTER SEQUENCE test.seq_test CURRENT VALUE 200。
不用的序列可以删除,语法:
DROP SEQUENCE [IF EXISTS] [<模式名>.]<序列名>。
序列的拥有者或具有相应权限的用户才能删除。
图中展示了达梦管理工具中删除序列的图形化操作,删除需慎重。
同义词(Synonym)是数据库对象(如表、视图、存储过程等)的别名,允许用户通过简化的名称访问目标对象,隐藏对象的实际位置和名称。
作用:简化访问(为复杂对象名提供简短别名,如emp替代hr.employees);解耦代码(对象物理位置变化时,只需修改同义词,无需调整代码);权限隔离(通过同义词控制访问入口,避免直接暴露原对象);跨模式访问(无需在SQL中指定模式名)。
同义词分为两类。
私有同义词(SYNONYM):属于特定用户,默认仅创建者可用,不能与现有模式下对象名重名,访问方式为"模式名.同义词名"。
公有同义词(PUBLIC SYNONYM):属于数据库全局,所有用户均可访问,不能和已有公有同义词重名,直接使用同义词名访问,无须额外权限。两者创建语句、所需权限、命名约束和访问权限均不同。
删除原对象后,同义词仍存在但访问会报错。
16DBLINK
DBLINK(数据库链接)是一种允许用户在一个数据库中访问另一个数据库对象的技术,通过DBLINK可以跨数据库执行查询、数据操作或事务处理。它是一种特殊的数据库实体对象,记录了远程数据库的连接和路径信息。通过多台数据库间的相互通讯,用户可以透明地操作远程数据库的数据,使应用程序看起来只有一个大型数据库。用户在远程数据库中的请求,都被自动转换为网络请求,并在相应结点上实现相应的增删改查等操作。
DBLINK是轻量级跨库解决方案,适用于实时场景。使用场景:实时数据同步(从远程数据库直接拉取最新数据到本地报表系统)、跨库联合查询(合并本地和远程数据库的数据)、备份与恢复(将数据通过DBLINK传输到备份数据库)。注意事项:网络延迟可能导致查询变慢,建议批量操作而非频繁小事务;明文密码存储风险,建议使用加密连接(如SSL选项);跨数据库事务需支持XA协议;不同数据库类型可能需转换(如Oracle的DATE vs 达梦的DATETIME);远程用户需具备访问目标对象的权限。
分为私有DBLINK(普通DBLINK,只有创建语句中标识的用户才可以访问远程数据库,需要CREATE LINK权限,存储于用户模式下,同一用户下不可重名)和公共DBLINK(PUBLIC DBLINK,本地数据的所有用户都可以访问远程数据库,需要CREATE PUBLIC LINK权限,全局唯一,所有用户共享同一名称空间)。
创建语法:CREATE [OR REPLACE] [PUBLIC] LINK [IF NOT EXISTS] <外部链接名> CONNECT [’<连接库类型>’] WITH <登录名> IDENTIFIED BY <登录口令> USING ‘<外部连接串>’ [<OPTION子句>]。
连接库类型:DPI、ODBC、DAMENG、ORACLE。
DPI和DAMENG用于连接达梦数据库;ODBC可以连接所有支持ODBC协议的数据库;ORACLE用于连接ORACLE数据库。
DAMENG链接串通过MAL系统访问远程达梦数据库,需要配置DMMAL.INI。
DPI方式用于DM至DM的DBLINK,通过DPI接口访问远程达梦数据库,不需要额外配置,支持不同操作系统间的数据库链接。
链接串格式:<IP地址>:<端口号>:<服务名>,其中IP和端口指目标数据库(被链接的数据库)的IP和端口,服务名需在 /etc/dm_svc.conf 中配置网络服务名。
ODBC方式可以连接所有支持ODBC协议的数据库。使用此方式需先在源库服务器安装目标数据库的ODBC驱动,并配置ODBC数据源名称,<ODBC外部链接串>指 odbc.ini 中配置的数据源名称(DSN)。
备份本质是用存储成本换取业务生存权。备份分两大类。物理备份:备份数据库物理文件(数据文件、控制文件、归档日志等),备份数据库中有效的数据页,既支持联机备份也支持脱机备份,还原时可以利用归档日志恢复到故障前一刻或指定时间点,支持库级/表空间级/表级备份、完全备份/增量备份,备份效率高速度快,可以恢复数据文件、解决数据文件误删或磁盘损坏的问题,缺点是不支持细粒度的备份控制。逻辑备份:备份数据库的逻辑对象和数据(表、索引、过程等),导出SQL保存至dmp文件中,只能联机备份,支持库级/用户级/模式级/表级备份,优点是可细粒度指定包含/不包含哪些对象、是否包含数据行、索引等,支持模式映射(A模式导入到B模式)、表映射等,缺点是效率低,不能恢复数据文件,无法解决数据文件丢失等问题。
逻辑导入导出通过达梦数据库提供的工具(dexp/dimp),将数据库中的对象结构和数据以逻辑格式(dmp文件)导出为文件,再通过导入工具将文件解析为数据库可执行命令,重建对象并插入数据。dexp和dimp是达梦逻辑导出和导入的命令行工具,位于安装目录bin下。使用场景:数据库迁移(高低版本的迁移)、历史数据归档、重新组织表、物理备份的辅助。
逻辑导入导出通过达梦数据库提供的工具(dexp/dimp),将数据库中的对象结构和数据以逻辑格式(dmp文件)导出为文件,再通过导入工具将文件解析为数据库可执行命令,重建对象并插入数据。dexp和dimp是达梦逻辑导出和导入的命令行工具,位于安装目录bin下。使用场景:数据库迁移(高低版本的迁移)、历史数据归档、重新组织表、物理备份的辅助。
dexp是逻辑导出的命令行工具,可以对本地或者远程数据库进行逻辑备份。备份内容灵活,包含是否备份索引、数据行、权限、约束等,备份时可以生成备份日志文件。dexp工具有两种:dexp和dexpdp,区别在于dexp文件存放在客户端,dexpdp文件存放在服务器端。dexpdp是将客户端命令发给服务器启动dexp执行,如果客户端连接使用dm-svc.conf配置,则服务器端也需要和客户端配置一致。
dexp工具位于DM安装bin目录下,执行 dexp help 可查看使用帮助。常用参数:USERID(用户名/口令,必须是命令行中的第一个参数)、FILE(导出文件,默认dexp.dmp)、DIRECTORY(导出文件所在目录)、FULL(整库导出,默认N)、OWNER(以用户方式导出,格式user1,user2,…)、SCHEMAS(以模式方式导出)、TABLES(以表方式导出)、LOG(屏幕输出的日志文件)。
dimp用于使用dexp生成的备份文件对本地或远程数据库进行联机逻辑导入,是dexp的相反过程。dimp有两种写法:dimp和dimpdp,区别在于dimp文件必须存放在客户端,dimpdp文件必须存放在服务器端。由于dimpdp是将客户端命令发给服务器启动dimp执行,如果客户端连接使用dm-svc.conf配置,服务器端需要和客户端配置一致。
dimp常用参数:
SHOW/DESCRIBE(仅查看不执行导入,Y:仅展示待导入的数据文件的内容信息列表);SHOW_SERVER_INFO(控制是否显示服务器信息);
REMAP_SCHEMA(将源模式中的数据导入到目标模式中,跨用户导入时须指定,多个模式映射逗号分隔);
REMAP_TABLE(将源表/视图中的数据导入到目的表/视图中);REMAP_TABLESPACE(表空间映射,使用前提是导出文件中包含源表表空间TABLESPACE=Y);
PRIMARY_CONFLICT(主键冲突处理:IGNORE不盖主键冲突行数据、OVERWRITE覆盖、OVERWRITE2覆盖并更新);
TABLE_EXISTS_ACTION(要导入的表已存在时的处理方式:SKIP、APPEND、TRUNCATE、REPLACE、TRUNCATE CASCADE);
IGNORE(忽略创建数据库对象错误,缺省N)。
本笔记围绕 DCA(达梦数据库管理员)认证培训,系统梳理了 DM 数据库从安装部署、实例创建与启停,到逻辑存储、表空间、SQL 语法、约束、查询、索引、视图、序列、同义词、DBLINK、备份还原等核心知识点。整体内容既覆盖日常开发所需的 DDL/DML、查询与对象管理,也涵盖 DBA 运维所需的安装配置、存储管理、备份恢复和自动化逻辑。复习时应重点掌握各类对象的创建、修改、删除语法及适用场景,理解逻辑结构与物理存储之间的映射关系,并熟悉常用工具(如 dbca.sh、dmservice.sh、dexp/dimp、DISQL 及管理工具)的使用。通过本笔记,可为达梦数据库的日常管理、开发支持和故障处理打下基础。
文章
阅读量
获赞
