注册
01 达梦数据库体系结构-存储结构
专栏/技术分享/ 文章详情 /

01 达梦数据库体系结构-存储结构

让世界为你转身 2022/11/17 1627 0 2
摘要

1.存储结构

1.1 三大文件查看

查看数据文件:

SQL> select GROUP_ID,PATH,ID,STATUS$ from v$datafile; 行号 GROUP_ID PATH ID STATUS$ ---------- ----------- ---------------------------------------------------- ----------- ----------- 1 0 /home/dmdba/dmdbms/data/ECARD/SYSTEM.DBF 0 1 2 1 /home/dmdba/dmdbms/data/ECARD/ROLL.DBF 0 1 3 3 /home/dmdba/dmdbms/data/ECARD/TEMP.DBF 0 1 4 4 /home/dmdba/dmdbms/data/ECARD/MAIN.DBF 0 1 5 5 /home/dmdba/dmdbms/data/ECARD/DMHR.DBF 0 1 6 6 /home/dmdba/dmdbms/data/ECARD/V8_TABLESPACE.dbf 0 1 7 7 /home/dmdba/dmdbms/data/ECARD/OPENPLARTFORM_DATA.dbf 0 1 8 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_01.dbf 0 1 9 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_02.dbf 1 1 10 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_03.dbf 2 1 11 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_04.dbf 3 1 行号 GROUP_ID PATH ID STATUS$ ---------- ----------- ------------------------------------------------- ----------- ----------- 12 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_05.dbf 4 1 12 rows got

查看重做日志文件:

SQL> select path from v$rlogfile; 行号 PATH ---------- ----------------------------------------- 1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log 2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log 3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log 已用时间: 0.730(毫秒). 执行号:1308. SQL> select path,rlog_size/1024/1024 from v$rlogfile; 行号 PATH RLOG_SIZE/1024/1024 ---------- ----------------------------------------- -------------------- 1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log 256 2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log 256 3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log 256 已用时间: 0.989(毫秒). 执行号:1309.

查看控制文件:

SQL> select para_name,para_value from v$dm_ini where para_name= 'CTL_PATH'; 行号 PARA_NAME PARA_VALUE ---------- --------- ------------------------------------ 1 CTL_PATH /home/dmdba/dmdbms/data/ECARD/dm.ctl 已用时间: 10.951(毫秒). 执行号:1313. SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH'; 行号 PARA_NAME PARA_VALUE ---------- ------------ ------------------------------------- 1 CTL_BAK_PATH /home/dmdba/dmdbms/data/ECARD/ctl_bak 已用时间: 4.678(毫秒). 执行号:1314. SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM'; 行号 PARA_NAME PARA_VALUE ---------- ----------- ---------- 1 CTL_BAK_NUM 10 已用时间: 6.657(毫秒). 执行号:1315. SQL> select para_name,para_value from v$dm_ini where para_name in ('CTL_PATH','CTL_BAK_PATH','CTL_BAK_NUM');

1.2 表空间管理

1.2.1 表空间介绍

DM 默认预定义 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五个表空间。

  • SYSTEM

系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角色权限信息等,部分隐含参数写入 SYSTEM 表空间),SYSTEM 表空间自动扩展不允许关闭。

  • ROLL

回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo,undo 信息放入 ROLL 表空间对应的数据文件中,redo 信息写入联机日志文件,用于保证数据的一致性。
ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。遇到查询记录过旧的错误(等同于 oracle 的快照过旧的错误)。

解决方法:

1.增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。
2.查询时间过长导致,可以考虑优化查询
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';

行号     NAME           TYPE VALUE      SYS_VALUE  FILE_VALUE
---------- -------------- ---- ---------- ---------- ----------
           DESCRIPTION                                                                             
           ----------------------------------------------------------------------------------------
1          UNDO_RETENTION SYS  180.000000 180.000000 90.000000
           Maximum retention time in seconds for undo pages since relative transaction is committed
  • MAIN

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

  • 临时表空间

临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。DM 中临时表空间由参数 TEMP_SIZE 指定,不支持单独创建临时表空间。

达梦 TEMP 表空间,数据库启动时会按照如下参数重建 TEMP 表空间。

SQL> select name, value, type from v$parameter t where name like 'TEMP%'; 行号 NAME VALUE TYPE ---------- ---------------- ---------------------- --------- 1 TEMP_PATH /dm8/dmdbms/data/ECARD READ ONLY 2 TEMP_SIZE 10 IN FILE 3 TEMP_SPACE_LIMIT 0 SYS

相关参数说明:

TEMP_SIZE:临时表空间初始大小 TEMP_PATH: 临时表空间路径 TEMP_SPACE_LIMIT:临时表空间的空间限制,0 表示不限制。

收缩 TEMP 表空间的方法:

1.重启数据库,TEMP 表空间数据文件会重建。 2.在线收缩临时表空间使用 SP_TRUNC_TS_FILE 函数 SQL> select id,name from v$ifun where name='SP_TRUNC_TS_FILE'; 行号 ID NAME ---------- ----------- ---------------- 1 1298 SP_TRUNC_TS_FILE SQL> select * from v$ifun_arg where id=1298; 行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$ ---------- ----------- ------- ----------- ---------------- ----------- ----------- ------- -------- 1 1298 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL 2 1298 TS_ID 0 INTEGER 4 0 IN NULL 3 1298 FILE_ID 1 INTEGER 4 0 IN NULL 4 1298 TO_SIZE 2 INTEGER 4 0 IN NULL

调大temp表空间的方法:

--可以直接修改temp文件的大小,但重启后会重建为temp_size指定的大小 alter tablespace temp resize datafile 'TEMP.DBF' to 50; --永久修改大小方法 alter system set 'TEMP_SIZE' =50 spfile;
  • HMAIN

HUGE 表的默认表空间(HTS 表空间)

1.2.1 创建表空间

创建名为tbs1的表空间,并指定该空间上拥有 2个数据文件,每个数据文件的大小为50M ,设置自动扩展

-- 达梦表空间数据文件单位默认为M,不需要带单位,路径可以省略,使用system_path的路径 create tablespace tbs1 datafile '/home/dmdba/dmdbms/data/ECARD/TBS101.DBF' size 50 autoextend on next 10 maxsize 10240,'/home/dmdba/dmdbms/data/ECARD/TBS102.DBF' size 50 autoextend on next 10 maxsize 10240;

1.2.2 修改表空间名

DM 预定义表空间不支持重命名,自定义表空间支持重命名。

alter tablespace tbs1 rename to tbs1_new;

1.2.3 修改表空间状态

用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许
脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。 脱机后可对表
空间的数据进行备份.

alter tablespace tbs1 offline; alter tablespace tbs1 online;

1.2.4 修改表空间数据缓冲区

用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不
允许修改数据缓冲区。可以使用的数据缓冲区有 NORMAL 和 KEEP。表空间修改成功后,并不会立即生效,
而是需要服务器重启。缓冲池名 KEEP 是达梦的保留关键字,使用时必须加双引号。

SQL> alter tablespace tbs1_new cache="KEEP"; SQL> select name,cache from v$tablespace; SQL> alter tablespace tbs1_new cache="NORMAL";

1.2.5 删除表空间

只可以删除用户创建的表空间并且只能删除未使用过的表空间,删除表空间时会删除其拥有的所有数据文件。

drop tablespace tbs1;

1.2.6 管理数据文件

1.添加数据文件

--可以使用相对路径 alter tablespace tbs1 add datafile 'TBS103.DBF' size 50;

2.设置数据文件自动扩展

alter tablespace tbs1 add datafile 'TBS103.DBF' autoextend on;

3.修改数据文件大小

--dm老版本不支持将数据文件改小,2022年9月份以后的版本支持 alter tablespace tbs1 RESIZE DATAFILE 'TBS103.DBF' TO 100;

4.迁移自定义表空间数据文件

alter tablespace tbs offline; --Oracle19c之前,需要手动拷贝数据文件,然后再进行rename alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/DM/TBS/TBS01.DBF'; alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO '/dm8/data/DM/TBS/TBS02.DBF'; alter tablespace tbs online;

1.2.7 表空间相关查询

相关数据字典:

select * from dba_tablespaces; select * from DBA_DATA_FILES; select * from v$tablespace; select * from v$datafile; --查询数据文件剩余空间 select * from DBA_FREE_SPACE;

表空间和数据文件对应关系查询:

SQL> SELECT df.GROUP_ID,ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID= df.GROUP_ID; 行号 GROUP_ID NAME PATH ---------- ----------- ------ --------------------------------- 1 0 SYSTEM /dm8/dmdbms/data/ECARD/SYSTEM.DBF 2 7 TEST /dm8/dmdbms/data/ECARD/TEST02.DBF 3 7 TEST /dm8/dmdbms/data/ECARD/TEST01.DBF 4 5 DMHR /dm8/dmdbms/data/ECARD/DMHR.DBF 5 4 MAIN /dm8/dmdbms/data/ECARD/MAIN.DBF 6 3 TEMP /dm8/dmdbms/data/ECARD/TEMP.DBF 7 1 ROLL /dm8/dmdbms/data/ECARD/ROLL.DBF 7 rows got -- file_id是针对某个表空间内部排序的 SQL> select TABLESPACE_NAME,FILE_ID,FILE_NAME from dba_data_files order by 1,2; 行号 TABLESPACE_NAME FILE_ID FILE_NAME ---------- --------------- ----------- --------------------------------- 1 DMHR 0 /dm8/dmdbms/data/ECARD/DMHR.DBF 2 MAIN 0 /dm8/dmdbms/data/ECARD/MAIN.DBF 3 ROLL 0 /dm8/dmdbms/data/ECARD/ROLL.DBF 4 SYSTEM 0 /dm8/dmdbms/data/ECARD/SYSTEM.DBF 5 TEMP 0 /dm8/dmdbms/data/ECARD/TEMP.DBF 6 TEST 0 /dm8/dmdbms/data/ECARD/TEST01.DBF 7 TEST 1 /dm8/dmdbms/data/ECARD/TEST02.DBF 7 rows got

1.3 重做日志文件管理

重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。

联机重做日志:存放 redo 信息,循环使用,不断覆盖,默认重做日志大小256M。联机日志 v$rlog 中记录有日志序列号(LSN: Log Sequence Number)。

DM 数据库联机日志自动切换,不能手工切换,无法删除重做日志。DM 联机日志没有日志组。

1.3.1 调整重做日志大小

--建议所有日志大小一样 alter database resize logifle 'DAMENG01.log' to 500; alter database resize logifle 'DAMENG02.log' to 500;

1.3.2 添加重做日志

alter database add logfile 'DAMENG03.log' SIZE 500;

1.3.3 修改重做日志路径

alter database mount; alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log'; alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log'; alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log'; alter database open;

1.3.4 重做日志相关查询

相关视图:

select * from v$rlogfile; --cur_file表示正在使用的联机日志 select * from v$rlog;

查询redo日志相关信息:

--查询redo log日志信息 SQL> select group_id,file_id,path,rlog_size/1024/1024 M from v$rlogfile; 行号 GROUP_ID FILE_ID PATH M ---------- ----------- ----------- ---------------------------------- -------------------- 1 2 0 /dm8/dmdbms/data/ECARD/ECARD01.log 256 2 2 1 /dm8/dmdbms/data/ECARD/ECARD02.log 256
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服