达梦数据库DM8使用介绍

达梦数据库DM8使用介绍

  • 达梦数据库DM8使用介绍
    • 一、安装达梦数据库
    • 二、初始化数据库实例
    • 三、SQL 分类
      • DML(Data Mannipulation Language)数据操纵语言:
      • DDL(Data Definition Language)数据定义语言:
      • DCL(Data Control Language)数据控制语言:
      • TCL(Transactional Control Language)事物控制语言:
      • DELETE 和 TRUNCATE 的区别:
      • SQL 的基础组成:
      • 单表查询:
      • 多表连接
    • 四、 DM 内存结构
      • 数据缓冲区
      • 重做日志缓冲区
      • SQL 缓冲区
      • 字典缓冲区
      • 主内存池(共享内存池)
    • 五、表空间的管理
      • 管理表空间
      • 管理数据文件
      • 管理系统表空间
      • 管理重做日志文件
    • 六、数据字典
    • 七、 动态性能视图
    • 八、备份还原
    • 九、DM8开发

达梦数据库DM8使用介绍

一、安装达梦数据库

1.挂载数据库iso

创建挂载目录

mkdir  /mnt/dm

挂载iso

mount dm8_xx_xx_xx_xx.iso  /mnt/dm

在这里插入图片描述

2.进入/mnt/dm可以看到达梦数据库安装文件

在这里插入图片描述

3.安装达梦数据库不建议在root用户下所以在安装之前创建一个用户dmdba将达梦数据库安装在此目录下

创建用户组

groupadd dinstall
useradd -g dinsatll -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba

在这里插入图片描述

4.在root用户下创建达梦数据库安装目录并赋权给dmdba

mkdir /dm8
chown  -R  dinstall:dmdba  /dm8

在这里插入图片描述

查看目录/dm8 所属用户

ls -ld /dm8

在这里插入图片描述

5.设置图形化

在root用户下执行

echo $DISPLAY
xhost +

在这里插入图片描述

在dmdba用户执行

export DISPLAY=:0.0

在这里插入图片描述

6.图形化安装达梦数据库

进入 /mnt/dm执行 ./DMInstall.bin

报错tmp空间不够

解决办法

创建一个新目录作为安装程序临时目录

mkdir  tmp_dm8
export DM_INSTALL_TMPDIR=/home/dmdba/tmp_dm8

在这里插入图片描述

在这里插入图片描述

7.图形化安装步骤

设置语言与时区

点击确定

在这里插入图片描述

达梦数据库安装向导

点击下一步

在这里插入图片描述

点击接受许可证协议

点击下一步

在这里插入图片描述

如果有dm.key文件

选择key文件路径

没有点击下一步

在这里插入图片描述

选择典型安装

点击下一步

在这里插入图片描述

选择数据库安装位置/dm8

在这里插入图片描述

点击确定

在这里插入图片描述

查看安装小结

在这里插入图片描述

在root用户下执行对话框命令

在这里插入图片描述
在这里插入图片描述

数据库安装完成

二、初始化数据库实例

点击【初始化】

在这里插入图片描述

点击创建数据库实例

点击【开始】

在这里插入图片描述

选择【一般用途】,取消【自动调整数据库性能参数】,点击【下一步】

在这里插入图片描述

选择【数据库数据目录】

在这里插入图片描述

修改【数据库名】,【实例名】,【端口号】

在这里插入图片描述

选择【控制文件】路径

在这里插入图片描述

选择【数据文件】路径

在这里插入图片描述

选择【日志文件】路径

在这里插入图片描述

选择【初始化日志】文件路径

在这里插入图片描述

点击【下一步】,修改【数据化初始参数】簇大小、页大小、字符集等

在这里插入图片描述

点击下一步,修改【数据库密码】

在这里插入图片描述

点击下一步,【创建示例库】

在这里插入图片描述

点击完成

在root用户下执行命令
在这里插入图片描述
在这里插入图片描述

[root@localhost /]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost /]# systemctl enable DmServiceDMSERVER.service
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service.
[root@localhost /]# systemctl start DmServiceDMSERVER.servicesystemctl

可以看到数据库创建完成,点击【完成】

在这里插入图片描述

三、SQL 分类

DML(Data Mannipulation Language)数据操纵语言:

查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。

默认情况下,DM 中 DML 不自动提交,需要手工提交(commit)和回滚(rollback);对数据的操作会产生 REDO 重做日志和 UNDO 回滚日志;

DDL(Data Definition Language)数据定义语言:

建立、修改、删除数据库中数据表等对象,包含 CREATE、ALTER、DROP、TRUNCATE、COMMENT。默认情况下,DDL 自动提交。

DCL(Data Control Language)数据控制语言:

用于执行权限授予与收回操作,包含 GRANT、REVOKE。

TCL(Transactional Control Language)事物控制语言:

维护数据的一致性,包含 COMMIT、ROLLBACK、SAVEPOINT。

DELETE 和 TRUNCATE 的区别:

DELETE:DML 语言,产生 redo 和 undo,删除大量数据会很慢;可以带 where 条件,支持回滚,delete 删除的数据支持闪回查询、不立即释放空间(DM 中系统定时自动清理回滚页,时长由参数 undo_retention 指定)。

TRUNCATE:DDL 语句,不产生 REDO 和 UNDO,只能删除整张表的数据,且立即释放空间,不支持回滚,不支持 WHERE 条件,TRUNCATE 表很快(大表也依然很快)。TRUNCATE可以降低表的水位线。DM 中,TRUNCATE 会重置表的自增列。

SQL 的基础组成:

SELECT:(必选)查询列,聚合函数、distinct 去重

FROM:(可选)查询的表

WHERE:(可选)查询条件

GROUP BY:(可选)分组列。默认 select 出现的列(非聚合函数),group by 中要出现。

Having:(可选)聚合的过滤条件(配合 group by 使用)

ORDER BY:(可选)排序,默认 asc, 倒序排 desc,NULL 默认排在最前面(由参数

ORDER_BY_NULLS_FLAG,Oracle 默认排在最后面)

DM中union和distinct只去重,不排序。

Oracle中union和distinct去重且排序。

单表查询:

select t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.EMAIL, t.PHONE_NUM
from dmhr.employee t;

在这里插入图片描述

select t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.EMAIL, t.PHONE_NUM
from dmhr.employee t
where t.DEPARTMENT_ID = 101;

在这里插入图片描述

select employee_id,employee_name,salary as sal
from dmhr.employee
where employee_name like '马%'
order by 3 desc;

在这里插入图片描述

group by和having的用法:

select a.DEPARTMENT_ID, count(*) as empnum
from dmhr.employee a 
group by a.DEPARTMENT_ID
having count(*) >=30;

在这里插入图片描述

select a.DEPARTMENT_ID, a.JOB_ID, count(*) as empnum
from dmhr.employee a 
group by cube(a.DEPARTMENT_ID, a.JOB_ID)
having count(*) >=20;

在这里插入图片描述

select a.DEPARTMENT_ID, a.JOB_ID, count(*) as empnum
from dmhr.employee a 
group by rollup(a.DEPARTMENT_ID, a.JOB_ID)
having count(*) >=20;

order by 用法:

DM 中空值排序,默认排在最前面。可以指定排在最后面。

select a.DEPARTMENT_ID, count(*) as empnumfrom dmhr.employee a group by a.DEPARTMENT_IDhaving count(*) >=30order by empnum desc;update dmhr.employee t set t.salary=null where t.employee_id=1100;commit;select t.EMAIL, t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.DEPARTMENT_ID, t.SALARYfrom dmhr.employee twhere t.DEPARTMENT_ID = 101order by t.SALARY desc NULLS LAST ;

在这里插入图片描述

CUBE 与 ROLLUP

达梦的 GROUP BY 语句除了最基本的语法外,还支持 ROLLUP 和 CUBE 语句。

ROLLUP(A, B, C): 首先会对(A、B、C)进行 GROUP BY,然后对(A、B)进行 GROUP BY,然后是(A)进行 GROUP BY,最后对全表进行 GROUP BY 操作,合计 N+1 的组合(N 表示分组列数)。

CUBE(A, B, C):首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),©,最后对全表进行 GROUP BY 操作,合计 8 种组合(2 的 N 次方,N 表示分组列数)。

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

多表连接

内连接:返回两张表中满足连接条件的记录。

外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不

满足条件的行,这种连接称为左(或右)外连接

两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,

这种连接称为全外连接。

表的连接方式:nested loop join、HASH JOIN 等

两张小表关联可以使用 nested loop join,连接列上可以创建索引。

Hash join:主要用于两张大表的连接。以较小的表为驱动表,连接效率更快。

[执行语句1]:

select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID
having count(*) >=30
order by empnum desc;

执行失败(语句1)

第6 行附近出现错误[-4080]:

不是 GROUP BY 表达式

NATURAL JOIN用法:

select department_id deptid, b.DEPARTMENT_NAME,
count(a.employee_id) empnum,
sum(a.salary) sum_salary,
min(a.salary) min_salary,
max(a.salary) max_salary,
avg(a.salary) avg_salary
from dmhr.employee a NATURAL JOIN dmhr.DEPARTMENT b
where (DEPARTMENT_ID BETWEEN 101 and 201 ) --and a.SALARY >= 10000
group by DEPARTMENT_ID, b.DEPARTMENT_NAME
having avg(a.salary) >=10000
order by empnum desc;

JOIN USING用法:

select department_id deptid, b.DEPARTMENT_NAME,
count(a.employee_id) empnum,
sum(a.salary) sum_salary,
min(a.salary) min_salary,
max(a.salary) max_salary,
avg(a.salary) avg_salary
from dmhr.employee a JOIN dmhr.DEPARTMENT b 
using (department_id, manager_id)
where (DEPARTMENT_ID BETWEEN 101 and 201 ) --and a.SALARY >= 10000
group by DEPARTMENT_ID, b.DEPARTMENT_NAME
having avg(a.salary) >=10000
order by empnum desc;

内连接案例:

select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a, dmhr.DEPARTMENT b
where a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
having count(*) >=30
order by empnum desc;
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
having count(*) >=30
order by empnum desc;

左外连接:

构造数据:

update dmhr.employee a 
set a.DEPARTMENT_ID = null
where a.DEPARTMENT_ID = 101;
commit;
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as
empnum
from dmhr.employee a, dmhr.DEPARTMENT b
where a.DEPARTMENT_ID = b.DEPARTMENT_ID(+)
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
-- having count(*) >=30
--order by empnum desc;
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as
empnum
from dmhr.employee a left join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
-- order by empnum desc;

右外关联:

insert into dmhr.DEPARTMENT(DEPARTMENT.DEPARTMENT_ID,
DEPARTMENT.DEPARTMENT_NAME)
values(888888,'Test');
commit;
select a.DEPARTMENT_ID, b.DEPARTMENT_id, b.DEPARTMENT_NAME,
count(a.employee_id) as empnum
from dmhr.employee a, dmhr.DEPARTMENT b
where a.DEPARTMENT_ID(+) = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_id, b.DEPARTMENT_NAME;
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as
empnum
from dmhr.employee a right join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;

全外关联:

select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as
empnum
from dmhr.employee a full join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;

子查询:

Exists、in、内关联的不同写法

SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E
WHERE EXISTS
( SELECT * FROM DMHR.JOB_HISTORY J
WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID );
SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E
WHERE E.EMPLOYEE_ID in
( SELECT J.EMPLOYEE_ID FROM DMHR.JOB_HISTORY J);
SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME
FROM DMHR.EMPLOYEE E join DMHR.JOB_HISTORY J
on E.EMPLOYEE_ID = J.EMPLOYEE_ID;
Not exist、Not In、 外关联的不同写法
explain SELECT count(*)
FROM DMHR.EMPLOYEE E
WHERE not EXISTS
( SELECT * FROM DMHR.JOB_HISTORY J
WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID );
explain SELECT count(*)
FROM DMHR.EMPLOYEE E
WHERE E.EMPLOYEE_ID not in
( SELECT J.EMPLOYEE_ID FROM DMHR.JOB_HISTORY J);
explain SELECT count(*)
FROM DMHR.EMPLOYEE E left join DMHR.JOB_HISTORY J
on E.EMPLOYEE_ID = J.EMPLOYEE_ID
where j.EMPLOYEE_ID is null;

DML:

Insert

插入时表名后建议带上列名。支持多行插入:

DELETE子查询更新:

Mysql的写法:

DELETE DMHR.EMPLOYEE, DMHR.JOB_HISTORY
FROM DMHR.EMPLOYEE E
JOIN DMHR.JOB_HISTORY J ON E.EMPLOYEE_ID = J.EMPLOYEE_ID;

转换到达梦中的写法:

写法一:

DELETE FROM DMHR.EMPLOYEE E
where exists**(select** 1 from DMHR.JOB_HISTORY J where E.EMPLOYEE_ID = 
J.EMPLOYEE_ID);

写法二:

DELETE FROM DMHR.EMPLOYEE E
where E.EMPLOYEE_ID in (**select** J.EMPLOYEE_ID from DMHR.JOB_HISTORY**);

四、 DM 内存结构

数据缓冲区

用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,包含四个类型,分别是 normal、fast、recycle、keep,由 INI 配置中的 BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制不同。

数据缓冲区采用 LRU(Latest Recently Used 最近最少使用)算法淘汰。

数据缓冲区的大小影响数据库的读写性能,OLTP 数据缓冲区占内存 40-60%,OLAP 可以稍大;系统应尽量减少物理读,提高逻辑读。

当数据库执行检查点时会做数据缓冲区的刷盘,检查点将数据缓冲区中的脏页(被修改的数据页)写入对应数据文件。

从磁盘的数据文件中读取数据—物理读从内存(数据缓冲区)读取数据—逻辑读

select * from v$bufferpool; --数据缓冲区

select * from SYS.“V$PARAMETER” t

WHERE name in (‘BUFFER’,‘FAST_POOL_PAGES’,‘RECYCLE’,‘KEEP’);

修改数据缓冲区大小为500M:

alter system set ‘BUFFER’= 500 spfile;

DM 默认读 1 页,可以开启读多页(依赖业务场景),有参数 MULTI_PAGE_GET_NUM 指定。

重做日志缓冲区

重做日志是数据库与磁盘间的一层缓存,将随机的磁盘写转换成顺序写,日志缓冲区是

数据库和日志间的缓存对应 INI 参数 RLOG_BUF_SIZE

减少 commit 次数,可以提高性能。

SQL 缓冲区

缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启)

SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息(PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG比较多、复杂的系统,建议将该参数调大。

参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。

对应参数 CACHE_POOL_SIZE,如果 sql 较多、结果集缓存,可以适当调大 sql 缓冲区。

相关数据字典:

select * from v$cacheitem;

select * from v$cachesql;

select * from v$cachepln;

select * from v$cachers;

DM 支持执行计划的清理和绑定:

select * from v$ifun t where name like ‘%PLN%’;

select t.name, b.* from v i f u n t , S Y S . " V ifun t, SYS."V ifunt,SYS."VIFUN_ARG" B

where t.name like ‘%SP_CLEAR_PLAN_CACHE%’

and t.id = b.id;

SP_CLEAR_PLAN_CACHE(PLAN_ID); --清理执行计划

–SP_SET_PLN_BINDED --绑定执行计划

字典缓冲区

字典缓冲区是存在数据库对象的一片缓冲区,对应 INI 参数 DICT_BUF_SIZE,DM8 里面

数据对象其实对应的是系统表上的一些信息,内存中的数据对象是通过将系统表上的信息取

出并解析出来得到的,该缓冲区一是避免了频繁向磁盘请求获取系统表信息,二是可以减少

系统表信息解析开销。

select * from v$dynamic_tables t where T.NAME like ‘%DICT%’;

select * from V$DICT_CACHE_ITEM;

select * from V$DICT_CACHE;

select name, type, value, sys_value, file_value from v$parameter t where name like

‘DICT_BUF_SIZE’;

主内存池(共享内存池)

当其他内存池(比如运行时内存池:虚拟内存池 vm pool 和会话池 session pool 等)不够时,会先向主内存池申请空间。

服务器启动时从操作系统申请的一大片内存,后续服务器运行过程中,一般情况下,很多需要内存分配的地方都是从该池分配,如果需要的内存大于配置值(MEMORY_POOL),共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小.

select * from V$mem_pool;
select name, type,value, sys_value, file_value from v$parameter t
where name like 'MEMORY%';
MEMORY_POOL:初始大小
MEMORY_EXTENT_SIZE:扩展大小
MEMORY_TARGET:目标大小
MEMORY_N_POOL:共享内存池个数,默认为 1,高并发时可设置多个。
MAX_OS_MEMORY:内存占用操作系统内存的比例,默认 100,建议调整到 80-90%

运行时的内存池

特点:使用时申请,用完即释放。包含:虚拟内存池 vm pool、会话池 session pool、RT_HEAP,(排序区、HASH 区)等。

排序区和 HASH 区

排序区:SORT_BUF_SIZE

少量的数据排序,优先在内存中排序,此时占用排序区;

大量的数据排序,内存中放不下,占用临时表空间排序。

如果业务经常有排序,可以适当调大排序区,提高效率。

select name, type, value, sys_value, file_value from v$parameter t  where name  like 'SORT%';

HASH 区:HJ_BUF_SIZE

HASH 连接、HASH 分区占用哈希区。如果业务 hash 连接较多,可以调大哈希区。

select name, type, value, sys_value, file_value from v$parameter t where name like 'HJ%';

HASH 区和排序区都属于虚拟缓冲区,实际申请时使用虚拟内存池或会话内存池。

虚拟内存池 VM POOL 和会话内存池 SESSION POOL.

相关参数:

VM_POOL_SIZE 64 静态

系统执行时虚拟机内存池大小,在执行过程中用到的内存大部分是从这里申请的,它的空间是从操作系统中直接申请的,有效值范围(32~1024*1024)

VM_POOL_TARGET 16384 静态

虚拟机内存池能扩充到的最大大小,以 KB为单位,有效值范围(0~1010241024),0 表示不限制

SESS_POOL_SIZE 64 动态,系统级

会话缓冲区大小,以 KB 为单位,有效值范围(16~1024*1024)。若所申请的内存超过实际能申请的大小,则系统将按 16KB 大

小重新申请

SESS_POOL_TARGET 16384 动态,系统级

会话缓冲区能扩充到的最大大小,以 KB 为单位,有效值范围(0~1010241024),0 表示不限制

Sql 执行会占用会话池或虚拟池。

五、表空间的管理

管理表空间

创建表空间

创建表空间时需要指定表空间名和其拥有的数据文件列表。

create tablespace tbs DATAFILE 'TBS01.DBF' size 64 AUTOEXTEND on NEXT 2 MAXSIZE 10240;
create tablespace tbs DATAFILE 'tbs02.dbf' size 64 AUTOEXTEND on NEXT 2 MAXSIZE 10240;

–AUTOEXTEND OFF|ON [NEXT <文件扩展大小>] [MAXSIZE <文件限制大小>]
若未指定文件扩展大小,文件也会自动扩展,扩展大小由 INI 参数 TS_AUTO_EXTEND_SIZE 决定。

为 0 或者 UNLIMITED 表示无限制,单位是 M,缺省为无限制。

扩展表空间

扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。

删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。

DROP TABLESPACE bookshop;

修改表空间名
可修改已存在的由用户创建的表空间的名称。

alter TABLESPACE tbs rename to tbs02;

修改表空间状态
用户表空间有联机和脱机两种状态。

系统(SYSTEM)表空间、回滚(ROLL)表空间、重做日志表空间(RLOG)和临时(TEMP)表空间不允许脱机。

设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。

ALTER TABLESPACE bookshop OFFLINE;
ALTER TABLESPACE bookshop ONLINE;

修改表空间数据缓冲区
系统(SYSTEM)表空间、回滚(ROLL)表空间、重做日志表空间(RLOG)和临时(TEMP)表空间不允许修改数据缓冲区。

可以使用的数据缓冲区有 NORMAL 和 KEEP。表空间修改成功后,并不会立即生效,而是需要服务器重启。

例:将 bookshop 表空间绑定到 KEEP 缓冲区。

ALTER TABLESPACE tbs01 cache="KEEP";
ALTER TABLESPACE tbs01 cache="NORMAL"

管理数据文件

添加数据文件
一个表空间中,数据文件和镜像文件一起不能超过 256 个。

alter TABLESPACE tbs01 add datafile 'tbs01_2.dbf' size 64 AUTOEXTEND off;

删除数据文件

删除表空间中数据文件时必须遵守文件 ID 从大到小的原则。

ALTER TABLESPACE tbs01 DROP DATAFILE 'tbs01_2.dbf';

扩展数据文件的大小
比如扩展 bookshop 表空间中数据文件 book.dbf 大小至 128M。

alter tablespace TBS01 resize datafile 'tbs01_2.dbf' to 65;

修改数据文件的路径
待修改的数据文件所在表空间必须处于脱机状态

alter TABLESPACE TBS01 offline;
alter TABLESPACE TBS01 rename datafile 'tbs01_2.dbf' to '/dm8/data/DM01/TBS/TBS01.DBF';
alter TABLESPACE TBS01 online;

添加 HUGE 数据文件路径
可以为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间

ALTER TABLESPACE bookshop ADD HUGE PATH '/dm8/data/HUGE';

管理系统表空间

SYSTEM表空间对应的数据文件自动扩展属性不允许关闭。

ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。

遇到“-7120:回滚记录版本太旧,无法获取用户记录”(等同于 Oracle 的快照过旧的错误)。

解决方法:

1、 查询时间过长导致,可以考虑优化查询,加快查询速度。

2、增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。

MAIN:用户默认表空间,当创建用户时,如果没有指定用户的默认表空间,则 MAIN为用户的默认表空间。相当于 Oracle 的 USERS 表空间。

TEMP:临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。

注意:DM 中临时表空间大小由参数 TEMP_SIZE 指定,如果要修改TEMP表空间大小需要修改系统参数TEMP_SIZE。

达梦 TEMP 表空间,数据库启动时会重建 TEMP 表空间。

DM 服务器关闭的状态下可使用 dmctlcvt 工具将控制文件转换为文本文件

首先转换控制文件到文本文件:

./dmctlcvt TYPE=1 SRC=/opt/dm.ctl DEST=opt/dmctl.txt

编辑 ctl.txt 文本文件中 fil_path

最后转换文本文件到控制文件:

./dmctlcvt  TYPE=2 SRC=/opt/dmctl.txt DEST=/opt/dm.ctl

这种修改文件路径的方法也可用于重做日志文件,SYSTEM 表空间文件、回滚表空间等路径的修改。

管理重做日志文件

修改redo文件大小

alter database resize LOGFILE 'DM0101.log' to 300;
alter database resize LOGFILE 'DM0102.log' to 300;

修改redo文件路径

alter DATABASE mount;
alter database rename logfile 'DM0101.log'to '/dm8/data/DM01/rlog/DM0101.log';
alter DATABASE rename LOGFILE 'DM0102.log' to '/dm8/data/DM01/rlog/DM0102.log';
alter DATABASE open;

增加redo文件

alter DATABASE add LOGFILE '/dm8/data/DM01/rlog/DM0103.log' size 300;

查看redo文件

select * from v$rlog;
select * from v$rlogfile;

六、数据字典

存储在 SYSTEM 表空间中,包含对象定义、权限、用户角色等信息。

USER_* 用户所拥有的对象信息

ALL_* 用户能访问的对象信息

DBA_* 整个数据库中的对象信息

系统中所有对象的信息

SELECT * FROM SYSOBJECTS;

系统中所有索引定义信息

SELECT * FROM SYSINDEXES;

系统中所有列定义的信息

SELECT * FROM SYSCOLUMNS

select * from sysstats;

select * from SYSOBJECTS t where id = 1058;

select * from SYSCONS;

七、 动态性能视图

动态性能视图是从内存中或控制文件中读取的数据

SELECT * FROM V$BUFFERpool; –数据缓冲区

SELECT * FROM V$mem_pool;

显示数据文件、表空间信息

SELECT * FROM V$DATAFILE;

SELECT * FROM V$tablespace;

显示当前进程、线程信息

SELECT * FROM V$PROCESS;

SELECT * FROM V$threads;

事务等待案例验证:

会话一:在 t_testpid(pid 为主键)中插入一行记录(不提交):

打开会话二:在 t_testpid 中插入相同记录:

查询事务等待:

select * from v$trxwait;

select * from v$lock t where t.blocked =1;

109 / 139*select** a.sess_id, a.sql_text, a.state, b. from v s e s s i o n s a , v sessions a, v sessionsa,vtrxwait b

where a.trx_id = b.id;

select * from sys.sysobjects t where id= 1069; --查询被锁的表

sp_close_session(sess_id); --结束某个会话

– 查询未提交事务

select b.object_name, c.sess_id, c.thrd_id, c.state, c.sql_text, a.*

from v l o c k a , d b a o b j e c t s b , v lock a, dba_objects b, v locka,dbaobjectsb,vsessions c

where a.table_id = b.object_id

and a.ltype = ‘OBJECT’

and a.trx_id = c.trx_id

and a.ign_flag=0;

在这里插入图片描述

八、备份还原

备份还原

备份就是数据库在某一个时间点的副本

数据库备份目的:防止数据丢失,防止天灾人祸(地震、火灾、人为操作、硬件故障)

备份主要有物理备份和逻辑备份

物理备份主要是备份使用过的有效的数据页,逻辑备份主要是备份数据库对象(表,索引,视图,存储过程等)

物理备份:分为联机备份和脱机备份;完全备份和增量备份

完全备份:备份的是整个数据库或者表空间的全部数据

增量备份:备份的是上一次全备或增备后,以后每次备份只需要备份修改过的数据页

还原就是将某个时间点的数据库副本拷贝到对应的目录下。

恢复就是在完成数据库还原之后,应用部分或者是全部归档日志。

物理备份

冷备:

冷备:不需要开启归档,需要开启DmAP服务,需要关闭数据库实例,针对整库做备份

1、console工具备份

[dmdba@localhost bin]$ ./DmServiceDMSERVER stop

2、用dmrman工具备份,只支持冷备

[dmdba@localhost backup]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';

热备:

需要开启归档,数据库需要打开(open)

可以备份数据库、表空间、表、归档日志

查看数据库归档模式:

SQL> select name,arch_mode from v$database;

在这里插入图片描述

用manager工具做热备

整库备份查看备份

命令行做全备:disql工具

SQL> backup database full to "DB_DAMENG_FULL";--备份到参数文件中的备份路径
SQL> backup database full to "DB_DAMENG_FULL2" BACKUPSET '/dm8/backup';

做增量备份

backup database increment to "DB_DAMENG_INCRE_2024_09_08_18_24_15" backupset
'DB_DAMENG_INCRE_2024_09_08_18_25_06';

表空间备份

表空间备份只能联机,还原只能脱机

用manager工具

用disql

backup tablespace "DMHR" full to "TS_DMHR_FULL" backupset'TS_DMHR_FULL';
表备份:backup table "DMHR"."DEPARTMENT" to "TAB_DMHR_DEPARTMENT"backupset 'TAB_DMHR_DEPARTMENT';

归档备份:

backup archivelog all to "ARCH_BAK" backupset 'ARCH_BAK';

物理还原

检查备份集是否有效

Console工具还原

恢复dmrman工具还原

RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/arch';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

表空间还原

RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace MAIN from backupset
'/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace MAIN;

逻辑备份

备份的是数据库对象

逻辑备份可以用来迁移和重组数据库,是数据库辅助型备份

dexp/dimp四个级别导入导出:

库级别

用户

模式

查看帮助:

[dmdba@localhost bin]$ ./dexp help
[dmdba@localhost bin]$ ./dimp help

全库导出:

[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=full.dmp log=full.log
directory=/dm8/backup full=y

用户导出:

[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=dmhr.dmp log=dmhr.log
directory=/dm8/backup owner=dmhr

导出表:

[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=emp.dmp log=emp.log
directory=/dm8/backup tables=emp

全库导入:

[dmdba@localhost bin]$ ./dimp SYSDBA/Dameng123 file=full.dmp log=imp_full.log
directory=/dm8/backup full=y

注意事项:执行用户导入时,如果用户不存在,要先创建用户。

九、DM8开发

Linux配置odbc

用root配置

检查gcc包

[root@localhost ]# rpm -qa|grep gcc

在这里插入图片描述

[root@localhost opt ]# tar -zxvf unixODBC-2.3.0.tar.gz
[root@localhost opt ]# cd unixODBC-2.3.0/
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
[root@localhost unixODBC-2.3.0]# odbcinst -j

在这里插入图片描述

配置文件/usr/local/etc/odbcinst.ini

配置文件/usr/local/etc/odbc.ini

[root@localhost unixODBC-2.3.0]#cd /usr/local/etc/

对/usr/local/etc目录下的2个文件(odbc.ini和odbcinst.ini)进行修改配置

其中DRIVER根据达梦8数据库的安装路径而定

[root@localhost etc]# vim odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
DRIVER = /dm8/bin/libdodbc.so
[root@localhost etc]# vi odbc.ini
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5237

其中SERVER、UID、PWD、TCP_PORT可以根据实际情况进行修改

export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH

测试连接

用dmdba账号

[dmdba@localhost bin]$ isql dm8

在这里插入图片描述
达梦社区地址:https://eco.dameng.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1538235.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

springboot实训学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记&#xff08;4&#xff09;(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次&#xff0c;点赞7…

城市级河流三维处理及展示的一些技术

本文是一些算法技术的初探分析&#xff0c;会陆续修订。 1、问题 河流是一种非常复杂的多边形。在二维地图可以采用多边形填充算法(DDA)对任意复杂的多边形进行绘制与填充。但是三维引擎只能采纳三角面进行渲染。但在如此复杂的多边形面前&#xff0c;简单的三角化算法不能解…

Java 回顾方法的定义

一、方法的定义 1&#xff0e;修饰符&#xff08;public static…&#xff09;详见博客【Java 方法的定义】 2&#xff0e;返回值&#xff08;int, double, char[],…., void&#xff09;详见博客【Java 方法的定义】 3. break&#xff1a;跳出switch 结束循环&#xff0c;详…

2024年09月18日《每日一练》

1、 智慧城市建设参考模型包括有依赖关系的5层结构和对建设有约束关系的3个支撑体系&#xff0c;5层结构包括物联感知层、通信网络层、计算与存储层、数据及服务支撑层、智慧应用层;3个支撑体系除了建设和运营管理体系、安全保障体系之外还包括&#xff08;&#xff09;。 A 人…

使用arduino玩基于esp8266的nodemcu开发板

一、简介 中秋节到图书馆看书&#xff0c;看到了arduino方面的书籍&#xff0c;里面有提到ESP8266模块。让我想起我抽屉里吃灰很久了的基于esp8266的nodemcu开发板。于是把书借回家研究了一下。这里做个记录。 二、我目前在使用的云服务器推荐 学Linux不搞个云服务器始终感觉…

进行直流充电桩测试仪的步骤和规范

直流充电桩测试仪是一种用于检测和评估直流充电桩性能的设备。它能够测量充电桩的输出电压、电流、功率等参数&#xff0c;并能够模拟各种负载条件&#xff0c;以测试充电桩的稳定性和可靠性。下面是进行直流充电桩测试仪的步骤和规范&#xff1a; 确保测试环境安全&#xff0…

2024.9.18 作业+思维导图

练习&#xff1a;提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串:" << endl;string str;int shuzi 0,zimu0,space 0,q…

MAGDA:多智能体指南驱动的诊断助手

MAGDA&#xff1a;多智能体指南驱动的诊断助手 秒懂大纲提出背景精细拆解输入输出全流程创意视角中文意译 论文&#xff1a;MAGDA: Multi-agent guideline-driven diagnostic assistance 秒懂大纲 ├── MAGDA: Multi-agent guideline-driven diagnostic assistance【研究主…

安全运维教程(非常详细)从零基础入门到精通,看完这一篇就够了

一、安全运维-网络 1、IP地址相关 IP地址属于网络层地址&#xff0c;用于标识网络中的节点设备。 IP地址由32bit构成&#xff0c;每8bit一组&#xff0c;共占用4个字节。 IP地址由两部分组成&#xff0c;网络位和主机位。 IP地址分类&#xff1a; 类别网络位子网掩码私有地…

嵌入式基本知识梳理

一、CPU的组成 CPU&#xff1a;中央处理器-----》soc(片上系统)&#xff08;描述的是一种芯片&#xff0c;这个芯片具有运算程序的能力&#xff09;、 UART: Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09;是一种广泛使用的串行通信协…

达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?

问题&#xff1a;我将同事给我的xml文件迁移到盗梦数据库&#xff0c;xml文件大约2G&#xff0c;在导入过程中&#xff0c;总是导入一半都不到就失败了。 原因&#xff1a;我的原因是我的电脑的系统的运行内存是16G的&#xff0c;后来我发现在没导入之前&#xff0c;其他进程已…

MODIS/Landsat/Sentinel下载教程详解【常用网站及方法枚举】

⛄前言 在当今快速发展的地球观测时代&#xff0c;遥感技术作为获取地球表面及其环境信息的重要手段&#xff0c;正以前所未有的广度和深度改变着我们对自然界的认知与管理方式。MODIS&#xff08;Moderate-resolution Imaging Spectroradiometer&#xff0c;中分辨率成像光谱…

Cloud Removal in Remote Sensing Using Sequential-BasedDiffusion Models论文翻译

MDPI 2023 论文名称:基于序列扩散模型的遥感云去除 摘要&#xff1a; 通过太空光学卫星收集的光学观测数据大多受到云层或雾霾的干扰&#xff0c;这限制了地球观测的进一步应用&#xff1b;因此&#xff0c;探索一种理想的去云方法至关重要。在本文中&#xff0c;我们提出了一…

电脑监控如何多画面显示?3个妙招分享,第一个你学会了吗?

电脑监控实现多画面显示&#xff0c;可以通过多种方法实现&#xff0c;以下是三个妙招的分享&#xff1a; 1. 使用专业监控软件 方法概述&#xff1a; 专业监控软件如安企神等&#xff0c;提供了强大的多画面显示功能。 这些软件通常支持自定义画面布局&#xff0c;如4分屏、…

鸿蒙Harmony应用开发,数据驾驶舱页面的实现

先来看看我们要实现的驾驶舱的页面是什么样的 对于这种 响应式布局的页面构建&#xff0c;我们的脑子里面要有一个概念&#xff0c;就是"分而治之"。我们把这个页面进行分割&#xff0c;分割成不同的块然后再来逐个实现. 不难发现&#xff0c;我们可以将这个看到的效…

【研发日记】嵌入式处理器技能解锁(六)——ARM的Cortex-M4内核

文章目录 前言 背景介绍 指令集架构 ARM起源 ARM分类 Cortex-M4 内核框架 指令流水线 实践应用 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(…

数据结构与算法(Python)

引入 先来看一道题: 如果 abc1000&#xff0c;且 a^2b^2c^2&#xff08;a,b,c 为自然数&#xff09;&#xff0c;如何求出所有a、b、c可能的组合? 枚举法&#xff1a; # 如果 abc1000&#xff0c;且 a^2b^2c^2&#xff08;a,b,c 为自然数&#xff09;&#xff0c;如何求出…

ROS和ROS2借助智能大模型的学习和研究方法

机器人相关知识的本身和价值-CSDN博客 知识本身在智能时代毫无价值&#xff0c;需要基于知识应用和创新才有价值。 学历报废并非来自扩招&#xff0c;而是智能模型的快速发展。-CSDN blink-领先的开发者技术社区 2024年中秋&#xff0c;智能模型实力已经如此&#xff0c;但还…

Modbus_tcp

目录 一&#xff1a;modbus起源 1.起源 2. 分类&#xff1a; 3. 优势&#xff1a; 4. 应用场景&#xff1a; 5.ModbusTCP特点&#xff08;掌握&#xff09;&#xff1a; 二、 ModbusTCP的协议 1. 报文头 2. 寄存器 1. 线圈&#xff08;Coils&#xff09; 2. 离…

栈和队列OJ题C语言版

前情提要&#xff1a; 本次OJ题需要能够独立实现栈和队列&#xff0c;如果对栈和队列还不熟悉可以参考一下&#xff1a;栈和队列(C语言版)-CSDN博客 一、循环队列 1.题目 2.循环队列的概念 循环队列也是一种线性的数据结构&#xff0c;其操作表现基于先进先出的特性&#xff…