信息技术应用创新 | 基于KylinV10的达梦数据库DM8基本操作
目录
文章目录
- 目录
- 一、登录达梦数据库
- 二、用户的管理
- 2.1 用户相关视图
- 2.2 用户操作实例
- 2.2.1创建用户
- 2.2.2对用户授权
- 2.2.3连接用户
- 2.2.4查看当前用户
- 2.2.5 为用户授予权限
- 三、表空间的管理
- 3.1.1创建表空间
- 3.1.2扩展表空间
- 3.1.3修改表空间的扩展属性
- 3.1.4修改表空间名
- 3.1.5查看当前有什么表空间
- 3.1.6删除表空间
- 四、表的管理
- 4.1 普通表的管理
- 4.1.1 创建表
- 4.1.2 查询建表
- 4.1.3 重命名表
- 4.1.4 添加数据进入表中
- 4.1.5 查看表的结构
- 4.1.6 删除列
- 4.1.7 向表中插入数据。
- 4.1.8 删除数据
- 4.1.9 删除表
- 4.1.10 查找表
- 4.1.11 更新表
- 五、HUGE表的管理
- 5.1 huge表
- 5.1.1 huge表的基本概念
- 5.1.2 HUGE表空间的创建
- 5.1.3 HUGE表的创建
- 5.1.4 查看HUGE表的结构
- 5.1.5 HUGE表的其它操作
- 六、索引的管理
- 6.1 索引
- 6.1.1 索引的基本概念
- 6.1.2 索引的创建
- 6.1.3 查看索引的定义
- 6.1.4 创建唯一索引
- 6.1.5 修改索引的名称
- 6.1.4 查看索引
- 6.1.5 删除索引
- 七、备份与还原
- 7.1 逻辑备份和还原
- 7.1.1 逻辑备份和还原的基本使用
- 7.1.2 逻辑备份全库导出
- 7.1.3 逻辑还原全库导入
- 7.1.4 逻辑备份用户导出
- 7.1.5 逻辑还原用户导入
- 7.1.6 逻辑备份表的导出
一、登录达梦数据库
可以使用达梦数据自带的disql工具进行登录,默认设置的用户名为SYSDBA
[dmdba@localhost bin]$ disql
disql V8
用户名:SYSDBA
密码:Gdcp@2025服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.399(ms)
SQL>
二、用户的管理
2.1 用户相关视图
关于用户的几个视图。可以直接使用select * from <视图>; 来查看视图的信息。
| 视图 | 作用 |
|---|---|
| DBA_ROLES | 显示系统中所有的角色 |
| DBA_TAB_PRIVS | 显示系统中所有用户的数据库对象权限信息 |
| DBA_SYS_PRIVS | 显示系统中所有传授给用户和角色的权限 |
| DBA_USERS | 显示系统中所有的用户 |
| DBA_ROLE_PRIVS | 显示系统中所有的角色权限 |
SQL> select * from DBA_ROLES;

SQL> select username,user_id,account_status from DBA_USERS;

2.2 用户操作实例
2.2.1创建用户
在创建用户时,如果没有指定表空间,则使用默认的表空间MAIN表空间。
创建用户wjy,密码为Gdcp@123。
SQL> create user wjy identified by "Gdcp@123";
2.2.2对用户授权
为用户授予public和resouce表空间的权限。
SQL> grant public,resource to wjy;
2.2.3连接用户
切换用户为wjy。
SQL> conn wjy;
密码:服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 5.040(ms)
SQL> exit
2.2.4查看当前用户
SQL> select user();行号 USER
---------- ------
1 SYSDBA已用时间: 4.799(毫秒). 执行号:1401.
2.2.5 为用户授予权限
通常我们使用GRANT命令为用户授予相对应的权限。
如:当我们在用户SYSDBA下创建了表TEST01,则这个表的全称为SYSDBA.TEST01。
而新创建的用户WJY 由于没有对表SYSDBA.TEST01 的权限,所以无法对其进行SELECT,等操作。
GRANT 能够授予的常用权限如下:
| 权限 | 作用 |
|---|---|
| ANY | 全部权限 |
| CREATE {TABLE|USER|…} | 创建 |
| SELECT {ANY TABLE|…} | 查询 |
| INSERT ANY TABLE | 插入数据 |
| DELETE {TABLE|…} | 清除数据 |
| ALTER {USER|TABLE|…} | 更改 |
| DROP {ANY TABLE|…} | 删除 |
将表SYSDBA.TEST01的查询权限授予WJY,并且WJY能够将该权限授予他人。
当加上WITH DAMIN OPTION 时,表示被授权者可将权限再授予他人。
SQL> grant select on SYSDBA.TEST01 to WJY;
操作已执行
已用时间: 11.709(毫秒). 执行号:8601.
SQL> exit
[dmdba@localhost ~]$ disql WJY/Gdcp2025服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 5.681(ms)
disql V8
SQL> select * from SYSDBA.TEST01;
行号 ID NAME
---------- ----------- --------
1 1 zhangsan
已用时间: 4.709(毫秒). 执行号:8801. //能够查询SQL> delete from SYSDBA.TEST01; //无法删除表中的数据,因为只授予了查询权限
delete from SYSDBA.TEST01;
[-5502]:没有[SYSDBA.TEST01]对象的删除权限.
已用时间: 2.014(毫秒). 执行号:0.
三、表空间的管理
3.1.1创建表空间
create tablespace cndba :创建名为cndba的表空间
datafile ‘/dm/dmdbms/data/cndba/DAVE01.DBF’ :用于指定表空间对应的数据文件路径和文件名
size 64 :指定数据文件的初始大小为64MB
同时在系统中也会自动生成实体文件/dm/dmdbms/data/cndba/DAVE01.DBF
SQL> create tablespace cndba datafile '/dm/dmdbms/data/cndba/DAVE01.DBF' size 64;
操作已执行
已用时间: 97.378(毫秒). 执行号:1404.
3.1.2扩展表空间
扩展表空间有两种方式:①扩展现有数据文件大小;②增加新的数据文件属于表空间
在达梦数据库中,单个数据文件大小最大可达16384GB。
增加新的数据文件的SQL语句如下:
SQL> alter tablespace cndba add datafile '/dm/dmdbms/data/cndba/DAVE03.DBF' size 64;
操作已执行
已用时间: 49.111(毫秒). 执行号:1701.
扩展现有数据文件大小的SQL语句如下:
SQL> alter tablespace cndba resize datafile '/dm/dmdbms/data/cndba/DAVE01.DBF' to 128;
操作已执行
已用时间: 14.371(毫秒). 执行号:1702.

3.1.3修改表空间的扩展属性
表空间是默认进行自动扩展的,但是我们可以通过调整表空间的扩展属性进行修改。如下,
①是否启用自动扩展:AUTOEXTEN OFF | ON
②下次扩展大小: NEXT <文件扩展大小>,取值范围为0 ~ 2048 ,单位是MB
③数据文件最大大小:MAXSIZE <文件大小限制值>,取值为0 或 UNLIMITED,UNLIMTED表示没有限制,单位为MB。
SQL> alter tablespace cndba datafile '/dm/dmdbms/data/cndba/DAVE03.DBF' autoextend on next 10 maxsize unlimited;
操作已执行
已用时间: 22.419(毫秒). 执行号:1703.
3.1.4修改表空间名
如下,将名为cndba 的表空间的名字改为wjydba。
SQL> alter tablespace cndba rename to wjydba;
操作已执行
已用时间: 24.434(毫秒). 执行号:1704.
3.1.5查看当前有什么表空间
通过查询系统视图的DBA_TABLESPACES、
SQL> select tablespace_name from DBA_TABLESPACES;行号 TABLESPACE_NAME
---------- ---------------
1 SYSTEM
2 ROLL
3 TEMP
4 MAIN
5 WJYDBA已用时间: 6.587(毫秒). 执行号:1705.
3.1.6删除表空间
将名为wjydba的表空间进行删除。
SQL> drop tablespace wjydba;
操作已执行
已用时间: 89.646(毫秒). 执行号:1706.
四、表的管理
4.1 普通表的管理
4.1.1 创建表
创建一个名为test的表,其中字段为id和name。
SQL> create table test(id int,name varchar(20));
操作已执行
已用时间: 42.911(毫秒). 执行号:1710.
4.1.2 查询建表
查询建表的方式可以将建立的表直接复制查询语句的表结构和表数据,当参数CTAL_SEL_WITH_CONS 设置为1时,还可以连同原始表中的约束一起复制,
建立表test01,通过查询建表的方式复制表test。
SQL> create table test01 as select * from test;
操作已执行
已用时间: 18.698(毫秒). 执行号:1711.
4.1.3 重命名表
将表test重命名为表test01。
SQL> alter table test rename to test02;
操作已执行
已用时间: 36.330(毫秒). 执行号:1715.
4.1.4 添加数据进入表中
为表test01添加列gender,类型为varchar(10)。
SQL> alter table test01 add column(gender varchar(10));
操作已执行
已用时间: 43.998(毫秒). 执行号:1716.
4.1.5 查看表的结构
注意:这里的SYSDBA和TEST01 必须是大写。
SQL> sp_tabledef('SYSDBA','TEST01');

4.1.6 删除列
为表test01删除gender列。
SQL> alter table test01 drop column gender;
操作已执行
已用时间: 31.674(毫秒). 执行号:1721.

4.1.7 向表中插入数据。
向表test01中插入(1,zhangsan)和(2,lisi)
SQL> insert into test01 values(1,'zhangsan'),(2,'lisi');
影响行数 2已用时间: 2.590(毫秒). 执行号:1724.

4.1.8 删除数据
删除数据有两种方式,
①delete:delete的删除方式会产生大量的REDO日志和UNDO记录,所以delete 的删除方式能够被回滚。
②truncate:truncate 是一个DDL语句,不会产生任何的回滚信息,执行truncate 命令时,会立即提交。
使用delete的方式删除表test01中id为2的数据。
SQL> delete from test01 where id = 2;
影响行数 1已用时间: 4.445(毫秒). 执行号:1726.
使用delete的方式直接清空表test01。
SQL> delete from test01;
影响行数 1已用时间: 2.273(毫秒). 执行号:1728.
使用truncate的方式直接清空表test02。
SQL> truncate table test02;
操作已执行
已用时间: 40.128(毫秒). 执行号:1729.
4.1.9 删除表
删除表test02。
SQL> drop table test02;
操作已执行
已用时间: 32.639(毫秒). 执行号:1730.
4.1.10 查找表
查询所用用户的表
SQL> select owner,table_name from DBA_TABLES;
查找当前登录用户的表
SQL> select table_name from user_tables;

4.1.11 更新表
将表test01中的id=2 改为id=3。
SQL> update test01 set id = 3 where id = 2;
影响行数 1已用时间: 2.882(毫秒). 执行号:1738.

五、HUGE表的管理
5.1 huge表
5.1.1 huge表的基本概念
在达梦数据库中,表的存储方式分为行存储和列存储。HUGE表是一种列存储表,是建立在Huge File System(HFS)机制上。
HUGE表存储在HTS的表空间上,最多可以创建32767个HUGE表空间。默认的HUGE表空间是HMAIN 。
查看HUGE表空间SQL语句如下:
SQL> select * from v$huge_tablespace;行号 ID NAME PATHNAME DIR_NUM COPY_NUM SIZE_MODE
---------- ----------- ---- ------------------ ----------- ----------- ---------
1 4 MAIN /dm/data/db1/HMAIN 1 NULL NULL已用时间: 2.524(毫秒). 执行号:606.

5.1.2 HUGE表空间的创建
创建HUGE表空间htbs,物理路径为/dm/dmdbms/data/cndba/HTBS。
SQL> create huge tablespace htbs path'/dm/dmdbms/data/cndba/HTBS';
操作已执行
已用时间: 138.098(毫秒). 执行号:607.
5.1.3 HUGE表的创建
在新建的表空间上创建HUGE表h_dave。
with delta:启用DELTA存储机制,DELTA存储机制是针对HUGE表设计的增量存储特新,用于优化高频更新场景;
- 新插入或更新的数据会先写入一个临时的 “DELTA 区”(类似缓冲区),而非直接写入主存储区。
- 当 DELTA 区数据积累到一定量时,会通过后台合并机制(Merge)将其合并到主存储区,减少对主存储的直接 IO 压力,提升写入和更新性能。
on htbs:指定所创建表存储在名为htbs的表空间中。
SQL> create huge table h_dave(id int,name varchar(20)) storage(with delta,on htbs);
操作已执行
已用时间: 151.573(毫秒). 执行号:608.
5.1.4 查看HUGE表的结构
查看HUGE表H_DAVE的创建结构
SQL> sp_tabledef('SYSDBA','H_DAVE');行号 COLUMN_VALUE
---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------
1 CREATE HUGE TABLE "SYSDBA"."H_DAVE" ( "ID" INT, "NAME" VARCHAR(20)) STORAGE(STAT ASYNCHRONOUS, WITH DELTA, SECTION(65536), INITIAL 2, FILESIZE(64), ON "HTBS") LOG LAST ;已用时间: 12.514(毫秒). 执行号:609.
5.1.5 HUGE表的其它操作
HUGE表的其它操作几乎与其它表相同。
六、索引的管理
6.1 索引
6.1.1 索引的基本概念
索引通过预先构建表中一列或多列的排序结构,来快速定位表中的数据行,从而显著地提升查询效率,避免全表扫描。
索引就像是一本书的目录,通过目录中的章节标题和页码,能够快速地找到目标的内容,无需翻阅整本书进行查找。
6.1.2 索引的创建
同样的,索引也被存储在表空间下,若是在创建时没有指定表空间,则默认将索引放在用户的默认表空间下。
为表test01中的字段创建索引idx_id,并将其存储到表空间MAIN中。
SQL> create index idx_id on test01(id) storage(on main);
操作已执行
已用时间: 32.475(毫秒). 执行号:613.
6.1.3 查看索引的定义
使用INDEXDEF 函数来查看索引的定义,我们先需要查看索引的ID。
SQL> select ID from sysobjects where name = 'IDX_ID';行号 ID
---------- -----------
1 33555479已用时间: 3.500(毫秒). 执行号:614.
SQL> select INDEXDEF('33555479',1);行号 INDEXDEF('33555479',1)
---------- ----------------------------------------------------------------------------------------------------------
1 CREATE OR REPLACE INDEX "SYSDBA"."IDX_ID" ON "SYSDBA"."TEST01"("ID" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;已用时间: 3.550(毫秒). 执行号:615.
6.1.4 创建唯一索引
唯一索引可以保证索引的列值不会重复。在添加主键约束时,会自动创建唯一索引。
为表TEST02的字段id创建唯一索引idx_aq_id。
SQL> create unique index idx_aq_id on test02(id);
操作已执行
已用时间: 21.850(毫秒). 执行号:1005.
6.1.5 修改索引的名称
将索引idx_aq_id的名称修改为idx_uni_id。
SQL> alter index idx_aq_id rename to idx_uni_id;
操作已执行
已用时间: 16.420(毫秒). 执行号:1006.
6.1.4 查看索引
查看当前用户所有的索引。
SQL> select index_name,table_name from USER_INDEXES;行号 INDEX_NAME TABLE_NAME
---------- ------------- ------------------
1 IDX_ID TEST01
2 IDX_UNI_ID TEST02
3 INDEX33555451 ##HISTOGRAMS_TABLE
4 INDEX33555473 TEST01
5 INDEX33555475 H_DAVE$AUX
6 INDEX33555476 H_DAVE$RAUX
7 INDEX33555477 H_DAVE$DAUX
8 INDEX33555478 H_DAVE$UAUX
9 INDEX33555480 TEST02
10 INDEX33555474 H_DAVE10 rows got已用时间: 445.909(毫秒). 执行号:1009.
6.1.5 删除索引
将索引idx_uni_id 删除。
SQL> drop index idx_uni_id;
操作已执行
已用时间: 22.811(毫秒). 执行号:1010.
SQL> select index_name,table_name from USER_INDEXES;行号 INDEX_NAME TABLE_NAME
---------- ------------- ------------------
1 IDX_ID TEST01
2 INDEX33555451 ##HISTOGRAMS_TABLE
3 INDEX33555473 TEST01
4 INDEX33555475 H_DAVE$AUX
5 INDEX33555476 H_DAVE$RAUX
6 INDEX33555477 H_DAVE$DAUX
7 INDEX33555478 H_DAVE$UAUX
8 INDEX33555480 TEST02
9 INDEX33555474 H_DAVE9 rows got已用时间: 32.002(毫秒). 执行号:1011.
七、备份与还原
达梦数据库分为两种备份方式:①逻辑备份;②物理备份。
| 对比内容 | 逻辑备份 | 物理备份 |
|---|---|---|
| 备份内容 | 表、数据、索引、视图等逻辑对象 | 数据文件、日志文件、控制文件等物理文件 |
| 备份格式 | 文本格式(SQL语句)或者二进制压缩格式 | 二进制原始文件,无法直接阅读,必须通过数据库引擎解析 |
| 备份时机 | 需要在数据库运行状态下运行 | 支持联机备份和脱机备份,数据库关闭时直接复制文件 |
总结:
逻辑备份:备份数据内容,灵活且兼容性较好,但速度比较慢,适合小数据量或跨环境场景。
物理备份:备份原始文件,速度快且恢复高效,适合大数据量生产库和灾难恢复,但是兼容性差。
7.1 逻辑备份和还原
7.1.1 逻辑备份和还原的基本使用
逻辑备份使用dexp 命令进行执行,逻辑还原使用dimp 命令进行执行。
该命令必须在实例的OPEN状态下才能执行。
逻辑导出或导入有以下4种级别:
(1)数据库级别(FULL):导出或导入整个数据库中的所有对象
(2)用户级(OWNER):导出或导入1个或多个用户所拥有的所有对象。
(3)模式级(SCHEMAS):导出或导入1个或多个模式下的所有对象。
(4)表级(TABLE):导出或导入1个或多个指定的表或者表分区。
可以使用dexp/dimp help 的帮助来查看命令帮助。


7.1.2 逻辑备份全库导出
[dmdba@localhost ~]$ dexp SYSDBA/Gdcp2025 file=full_%U.dmp log=full_%U.log full=y directory=/dm/dmbak/full_bak filesize=128M parallel=4

导出结束后,可以看到刚刚dirctory所指定的目录中产生了新的 .dmp 和**.log** 文件。

7.1.3 逻辑还原全库导入
利用导出的文件对数据库进行还原。
需要注意的是,这次的日志文件不能导出时的日志文件重名。
[dmdba@localhost ~]$ dimp SYSDBA/Gdcp2025 full=y file=full_01.dmp log=full.log directory=/dm/dmbak/full_bak parallel=4
7.1.4 逻辑备份用户导出
导出用户wjy的全部对象。
[dmdba@localhost ~]$ dexp SYSDBA/Gdcp2025 file=wjy_bak.dmp log=wjy_bak.log owner=wjy parallel=4 directory=/dm/dmbak/wjybak/
7.1.5 逻辑还原用户导入
导入用户wjy的全部对象。
[dmdba@localhost ~]$ dimp SYSDBA/Gdcp2025 parallel=4 directory=/dm/dmbak/wjybak file=wjy_bak.dmp log=wjy_imp.log owner=wjy
由于创建一个用户时,会对应地创建与用户同名的模式,所以需要导入到其它用户时,只需要导入到其它模式中即可。
remap_schema: remap_schema=源模式:目的模式
[dmdba@localhost ~]$ dimp SYSDBA/Gdcp2025 parallel=4 directory=/dm/dmbak/wjybak/ file=wjy_bak.dmp log=wjy02_imp.log remap_schema=wjy:wjy01
7.1.6 逻辑备份表的导出
[dmdba@localhost ~]$ dexp SYSDBA/Gdcp2025 tables=SYSDBA.TEST01 directory=/dm/dmbak/table_bak file=test01_%U.dmp log=test01_exp.log parallel=4
