暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库DM表空间管理全解析:从创建到扩容实战

1378

引言

在达梦数据库(DM)中,表空间是数据存储的核心单元,直接影响数据库性能与维护效率。本文深入解析表空间的创建、扩容、维护及故障恢复等关键操作,助你轻松掌握管理技巧!


一、表空间定义与类型

  1. 普通表空间:仅存储普通表(非HUGE表)
  2. 混合表空间:支持存储普通表和HUGE表,需通过<HUGE路径子句>
    创建

参数说明

  1. <表空间名> 表空间的名称,最大长度 128 字节;
  2. <文件路径> 指明新生成的数据文件在操作系统下的路径+新数据文件名。数据文件的存放路径符合 DM 安装路径的规则,且该路径必须是已经存在的;
  3. MIRROR 数据文件镜像,用于在数据文件出现损坏时替代数据文件进行服务; MIRROR 数据文件的<文件路径>必须是绝对路径。要使用数据文件镜像,必须在建库时开启页校验的参数 PAGE_CHECK;
  4. <文件大小> 整数值,指明新增数据文件的大小(单位 MB),取值范围 4096页大小~2147483647页大小;
  5. <缓冲池名> 系统数据页缓冲池名 NORMAL 或 KEEP。缓冲池名 KEEP 是 DM 的保留关键字,使用时必须加双引号;
  6. <加密算法> 可通过查看动态视图 V$CIPHERS 获取算法名;
  7. <加密密码> 最大长度 128 字节,若未指定,由 DM 随机生成;
  8. <指定 DFS 副本子句> 专门用于指定分布式文件系统 DFS 中副本的属性;
  9. < 副本数> 表空 间文件 在 DFS 中 的副 本 数, 默 认为 DMDFS.INI 中 的DFS_COPY_NUM 的值;
  10. <副本策略子句> 指定管理 DFS 副本的区块:宏区(GREAT)或是微区(MICRO)。
    由于版本迭代速度较快,建议定期查阅手册👉手册在实践中以具体部署的版本为准

二、创建表空间实战

  • 语法格式
CREATE TABLESPACE [IF NOT EXISTS] <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>][<HUGE路径子句>][<STORAGE子句>]
<STORAGE子句> ::= 
 STORAGE (ON <RAFT组名>)|
 STORAGE (ON <BP组名>)
<数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>}
<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>]
<自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句>] |OFF
<每次扩展大小子句> ::= NEXT <扩展大小>
<最大大小子句> ::= MAXSIZE <文件最大大小> |
         UNLIMITED
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<存储加密子句> ::= ENCRYPT WITH <加密算法> <密码子句>
<密码子句>::=BY <加密密码> | 
           BY WRAPPED <加密密码密文>
<HUGE路径子句> ::= WITH HUGE PATH <HUGE数据文件路径> 

1. 基础语法

CREATE TABLESPACE TS1 DATAFILE 'TS1.dbf' SIZE 128;

  • 示例:
11:24:17 SYSDBA@dmdb:5236 SQL> CREATE TABLESPACE TS1  DATAFILE 'TS1.dbf' SIZE 100;
CREATE TABLESPACE TS2  DATAFILE 'TS2.dbf' SIZE 100;
第1 行附近出现错误[-2410]:数据文件[TS2.dbf]大小无效.
已用时间: 0.483(毫秒). 执行号:0.
11:24:34 SYSDBA@dmdb:5236 SQL>
11:24:44 SYSDBA@dmdb:5236 SQL> select page();
 
PAGE()
-----------
32768
 
已用时间: 0.895(毫秒). 执行号:2008.
11:24:52 SYSDBA@dmdb:5236 SQL>

  • 最小限制:当页大小为32K时,初始大小需≥128MB(计算公式:4096页*32K=128MB
10:07:17 SYSDBA@dmdb:5236 SQL> CREATE TABLESPACE TS1 DATAFILE 'TS1.dbf' SIZE 128;
操作已执行
已用时间: 29.194(毫秒). 执行号:2004.
10:07:26 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f
orde2   3   4   5   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
6 rows got
 
已用时间: 360.013(毫秒). 执行号:2005.
10:07:35 SYSDBA@dmdb:5236 SQL>

2. 自动扩展配置

CREATE TABLESPACE TS2 DATAFILE 'TS2.dbf' SIZE 128 
AUTOEXTEND ON NEXT 2 MAXSIZE 1024;

参数说明

  • NEXT 2
    :每次扩展2MB

  • MAXSIZE 1024
    :最大扩展至1024MB

  • 示例:

12:39:52 SYSDBA@dmdb:5236 SQL> CREATE TABLESPACE TS2 DATAFILE 'TS2.dbf' SIZE 128  autoextend on next 2 maxsize 1024 CACHE = NORMAL;
操作已执行
已用时间: 14.135(毫秒). 执行号:2010.
12:40:10 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f
orde2   3   4   5   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    128         NULL
TS2             0           dm/dmdata/dmdb/TS2.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
7 rows got
 
已用时间: 13.445(毫秒). 执行号:2011.
12:40:30 SYSDBA@dmdb:5236 SQL>


三、表空间状态管理

1. 脱机与联机操作

ALTER TABLESPACE TS1 OFFLINE;  -- 脱机
ALTER TABLESPACE TS1 ONLINE;   -- 联机

  • 示例:
--将脱机的TS1表空间恢复到联机状态
12:42:40 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS1 ONLINE;
操作已执行
已用时间: 4.460(毫秒). 执行号:2015.
--查询表空间状态信息
12:46:50 SYSDBA@dmdb:5236 SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;
 
TABLESPACE_NAME STATUS
--------------- -----------
SYSTEM          0
ROLL            0
TEMP            0
MAIN            0
test            0
TS1             0
TS2             0
MAIN            NULL
 
8 rows got
 
已用时间: 0.946(毫秒). 执行号:2016.
12:46:56 SYSDBA@dmdb:5236 SQL>

2. 状态查询

SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES;

状态码
状态说明
0
联机
1
脱机
  • 示例:
--将脱机的TS1表空间恢复到联机状态
12:42:40 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS1 ONLINE;
操作已执行
已用时间: 4.460(毫秒). 执行号:2015.
--查询表空间状态信息
12:46:50 SYSDBA@dmdb:5236 SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;
 
TABLESPACE_NAME STATUS
--------------- -----------
SYSTEM          0
ROLL            0
TEMP            0
MAIN            0
test            0
TS1             0
TS2             0
MAIN            NULL
 
8 rows got
 
已用时间: 0.946(毫秒). 执行号:2016.
12:46:56 SYSDBA@dmdb:5236 SQL>


四、表空间维护技巧

  • 修改表空间语法格式
ALTER TABLESPACE <表空间名> [ONLINE|OFFLINE|CORRUPT|<表空间重命名子句>|<数据
文件重命名子句>|<增加数据文件子句>|<修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲池子句>|<DSC集群表空间负载均衡子句>|<增加HUGE路径子句>|<删除表空间文件>|<缩减表空间大小>]
<表空间重命名子句> ::= RENAME TO <表空间名>
<数据文件重命名子句>::= RENAME DATAFILE <文件路径>{,<文件路径>} TO <文件路径>{,<文件路径>}
<增加数据文件子句> ::= ADD <数据文件子句>
<数据文件子句> ::= 参考3.4.1 表空间定义语句中的<数据文件子句>
<修改文件大小子句> ::= RESIZE DATAFILE <文件路径> TO <文件大小> [ON RAFT_NAME]
<修改文件自动扩展子句> ::= DATAFILE <文件路径>{,<文件路径>}[<自动扩展子句>]
<自动扩展子句> ::= 参考3.4.1 表空间定义语句中的<自动扩展子句>
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<DSC集群表空间负载均衡子句> ::= OPTIMIZE <DSC集群节点号>
<增加HUGE路径子句> ::= ADD HUGE PATH <HUGE数据文件路径>
<删除表空间文件>::=DROP DATAFILE <文件路径>
<缩减表空间大小>::=RESIZE DATAFILE <文件路径> TO <文件大小>

1. 扩容方案

  • 调整数据文件大小
ALTER TABLESPACE TS1 RESIZE DATAFILE 'TS1.dbf' TO 256;

  • 示例:
12:46:56 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    128         NULL
TS2             0           dm/dmdata/dmdb/TS2.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
7 rows got
 
已用时间: 190.928(毫秒). 执行号:2017.
12:51:32 SYSDBA@dmdb:5236 SQL>
--RESIZE数据文件
12:52:01 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS1 RESIZE DATAFILE '/dm/dmdata/dmdb/TS1.dbf'  to 256;
操作已执行
已用时间: 2.915(毫秒). 执行号:2018.
--检查表空间扩展
12:52:25 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    256         NULL
TS2             0           dm/dmdata/dmdb/TS2.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
7 rows got
 
已用时间: 162.524(毫秒). 执行号:2019.
12:52:40 SYSDBA@dmdb:5236 SQL>

  • 新增数据文件
ALTER TABLESPACE TS1 ADD DATAFILE 'TS02.dbf' SIZE 128;

  • 示例:
--添加数据库文件
12:55:42 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE "TS1" ADD DATAFILE '/dm/dmdata/dmdb/TS02.dbf' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 1024;
操作已执行
已用时间: 6.830(毫秒). 执行号:2021.
12:56:04 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             1           dm/dmdata/dmdb/TS02.dbf   128         NULL  --查询数据文件存在,添加完成
TS1             0           dm/dmdata/dmdb/TS1.dbf    256         NULL
TS2             0           dm/dmdata/dmdb/TS2.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
8 rows got
 
已用时间: 15.156(毫秒). 执行号:2022.
12:56:10 SYSDBA@dmdb:5236 SQL>

2. 修改数据文件路径

-- 1. 脱机表空间
ALTER TABLESPACE TS2 OFFLINE;
-- 2. 修改路径
ALTER TABLESPACE TS2 RENAME DATAFILE '旧路径' TO '新路径';
-- 3. 重新联机
ALTER TABLESPACE TS2 ONLINE;

  • 示例:
--检查表空间状态
12:56:04 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             1           dm/dmdata/dmdb/TS02.dbf   128         NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    256         NULL
TS2             0           dm/dmdata/dmdb/TS2.dbf    128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
8 rows got
--首先将表空间脱机
已用时间: 15.156(毫秒). 执行号:2022.
12:56:10 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS2 OFFLINE;
操作已执行
已用时间: 6.853(毫秒). 执行号:2023.
 
--更换路径表空间路径
12:59:29 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS2 RENAME DATAFILE '/dm/dmdata/dmdb/TS2.dbf' to '/dm/dmdata/TS2.dbf';
操作已执行
已用时间: 00:00:02.434. 执行号:2024.
--将表空间恢复到联机状态
13:00:26 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS2 ONLINE;
操作已执行
已用时间: 4.356(毫秒). 执行号:2025.
 
--更换完成之后确认表空间状态、路径信息
13:00:45 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             1           dm/dmdata/dmdb/TS02.dbf   128         NULL
TS1             0           dm/dmdata/dmdb/TS1.dbf    256         NULL
TS2             0           dm/dmdata/TS2.dbf         128         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
8 rows got
 
已用时间: 10.838(毫秒). 执行号:2026.
13:00:56 SYSDBA@dmdb:5236 SQL>

3. 缩容限制

  • 老版本:不支持缩容,仅能扩展

  • 新版本(如1-2-174-2022.11.21):支持缩容操作

  • 示例:

--查询版本信息
13:29:49 SYSDBA@dmdb:5236 SQL> select BUILD_VERSION from SYS."V$INSTANCE";
 
BUILD_VERSION
------------------------------------
1-2-174-2022.11.21-175072-20024-SEC
 
已用时间: 1.508(毫秒). 执行号:2036.
13:31:25 SYSDBA@dmdb:5236 SQL>
--先将TS2扩展到256M
13:29:05 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS2 resize datafile '/dm/dmdata/TS2.dbf' to 256;
操作已执行
已用时间: 3.518(毫秒). 执行号:2032.
13:29:22 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           dm/dmdata/dmdb/ROLL.DBF   128         NULL
ROLL            1           dm/dmdata/dmdb/ROLL01.DBF 200         NULL
SYSTEM          0           dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS2             0           dm/dmdata/TS2.dbf         256         NULL
test            0           dm/dmdata/dmdb/test.dbf   128         NULL
 
7 rows got
--将TS2缩小为128
已用时间: 17.423(毫秒). 执行号:2033.
13:29:38 SYSDBA@dmdb:5236 SQL> ALTER TABLESPACE TS2 resize datafile '/dm/dmdata/TS2.dbf' to 128;
操作已执行
已用时间: 4.909(毫秒). 执行号:2034.
--查询状态可以看到修改成功
13:29:43 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           /dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            0           /dm/dmdata/dmdb/ROLL.DBF   128         NULL
ROLL            1           /dm/dmdata/dmdb/ROLL01.DBF 200         NULL
SYSTEM          0           /dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           /dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS2             0           /dm/dmdata/TS2.dbf         128         NULL
test            0           /dm/dmdata/dmdb/test.dbf   128         NULL
 
7 rows got
 
已用时间: 9.896(毫秒). 执行号:2035.
13:29:49 SYSDBA@dmdb:5236 SQL>



五、特殊表空间注意事项

ROLL/TEMP/SYSTEM表空间

  • 不允许删除或脱机
  • 回滚表空间扩容示例:
ALTER TABLESPACE ROLL ADD DATAFILE 'ROLL01.DBF' SIZE 200;

  • 示例:
--添加一个回滚表空间
13:06:02 SYSDBA@dmdb:5236 SQL> alter tablespace ROLL add datafile '/dm/dmdata/dmdb/ROLL01.DBF' size 128;
操作已执行
已用时间: 7.593(毫秒). 执行号:2027.
--扩展回滚表空间
13:06:03 SYSDBA@dmdb:5236 SQL> alter tablespace ROLL resize datafile 'ROLL01.DBF' TO 200;
操作已执行
已用时间: 2.729(毫秒). 执行号:2028.
--更换完成之后确认表空间状态
13:06:25 SYSDBA@dmdb:5236 SQL> select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space --表空间最大值
,(SELECT MAX(block_id)*8/1024 FROM dba_extents WHERE tablespace_name = 'TS_DATA') max_space --已使用表空间的最大值
from dba_data_files f orde2   3   4   r by tablespace_name;
 
TABLESPACE_NAME FILE_ID     FILE_NAME                  TOTAL_SPACE MAX_SPACE
--------------- ----------- -------------------------- ----------- -----------
MAIN            0           /dm/dmdata/dmdb/MAIN.DBF   128         NULL
ROLL            1           /dm/dmdata/dmdb/ROLL01.DBF 200         NULL
ROLL            0           /dm/dmdata/dmdb/ROLL.DBF   128         NULL
SYSTEM          0           /dm/dmdata/dmdb/SYSTEM.DBF 212         NULL
TEMP            0           /dm/dmdata/dmdb/TEMP.DBF   74          NULL
TS1             1           /dm/dmdata/dmdb/TS02.dbf   128         NULL
TS1             0           /dm/dmdata/dmdb/TS1.dbf    256         NULL
TS2             0           /dm/dmdata/TS2.dbf         128         NULL
test            0           /dm/dmdata/dmdb/test.dbf   128         NULL
 
9 rows got
 
已用时间: 13.439(毫秒). 执行号:2029.
13:06:35 SYSDBA@dmdb:5236 SQL>


六、表空间失效文件恢复(Linux用)

1. 检查失效文件

SP_FILE_SYS_CHECK();

2. 恢复步骤

-- 准备恢复
SP_TABLESPACE_PREPARE_RECOVER('test');

-- 查找进程PID
ps -ef | grep dmserver

-- 复制文件副本
cp /proc/<PID>/fd/11 /原路径/test.dbf

-- 完成恢复
SP_TABLESPACE_RECOVER('test');

22:08:52 SYSDBA@dmdb:5236 SQL> SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 1.103(毫秒). 执行号:3204.
22:09:02 SYSDBA@dmdb:5236 SQL>
22:09:04 SYSDBA@dmdb:5236 SQL> exit
[dmdba@dm92 ~]$ cd /dm/dmdata/dmdb/
[dmdba@dm92 dmdb]$ ls
bak      dm.ctl      dmdb02.log  dminit20230103140932.log  HMAIN     ROLL01.DBF  sqllog.ini  TEMP.DBF  trace
ctl_bak  dmdb01.log  dm.ini      dm_service.prikey         MAIN.DBF  ROLL.DBF    SYSTEM.DBF  test.dbf
[dmdba@dm92 dmdb]$ rm -rf test.dbf
[dmdba@dm92 dmdb]$ disql SYSDBA/SYSDBA
 
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.070(ms)
上次登录ip       : ::ffff:192.168.24.116
上次登录时间   : 2023-01-08 22:04:57
登录失败次数   : 0
口令是否过期   : 未过期
密钥过期时间:2023-06-25
disql V8
22:09:26 SYSDBA@dmdb:5236 SQL> SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 0.514(毫秒). 执行号:3504.
22:09:32 SYSDBA@dmdb:5236 SQL>


七、删除表空间

DROP TABLESPACE TS1;  -- 确保表空间无活跃事务

注意:system、 temp、 roll 表空间不允许脱机,TEMP表空间不许被删除。


总结

掌握DM
表空间管理技能,是保障数据库高效运行的关键!本文涵盖创建、扩容、维护及故障恢复全流程,建议收藏备用。关注我,获取更多数据库技术干货!

互动:你在表空间管理中遇到过哪些问题?欢迎留言讨论!👇


文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论