达梦(DM)数据库中设置表空间

在达梦(DM)数据库中设置表空间数据文件路径,并在服务器上找到它,是数据库管理中的基础操作。

操作环节 关键动作/命令 核心要点与说明
创建时设置路径 CREATE TABLESPACE ... DATAFILE '路径/文件名.DBF' ... 路径必须是绝对路径,且目录需已存在。
查找路径 SELECT FILE_NAME, TABLESPACE_NAME FROM DBA_DATA_FILES; 查询所有数据文件及其所属表空间。
SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE df WHERE ts.ID=df.GROUP_ID; 关联系统视图,精确查看对应关系。
验证文件存在 ls -l 在Linux服务器上使用ls命令确认文件物理存在。

设置数据文件路径

创建表空间时,DATAFILE子句用于指定数据文件的完整路径和文件名

  • 基本语法示例

    复制代码
    CREATE TABLESPACE "DMTBS" DATAFILE '/dm8/data/DAMENG/DMTBS01.dbf' SIZE 128;

    这条命令会在服务器的 /dm8/data/DAMENG/目录下创建一个名为 DMTBS01.dbf、初始大小为128MB的数据文件。

  • 关键规则

    • 绝对路径 :必须提供从根目录开始的完整路径,例如 /home/dmdbms/DAMENG/TBS01.dbf。仅指定文件名(如 LXH_TEST.DBF)时,数据库通常会将其创建在实例的默认目录下,但这在某些工具中可能引发错误。

    • 目录先行:指定的路径必须在操作系统层面已经存在,否则创建会失败。

    • 可选设置 :可以设置文件自动扩展,以避免空间不足。例如:SIZE 128 AUTOEXTEND ON NEXT 100 MAXSIZE 10240表示文件满时可自动扩展100MB,最大到10GB。

在服务器上查找文件

创建成功后,可以通过数据库查询和操作系统命令两种方式验证和查找文件。

  1. 查询数据库系统视图:这是最直接的方式。执行以下SQL语句,可以查看所有表空间和数据文件的对应关系。

    复制代码
    -- 查看表空间名称、数据文件路径和大小
    SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 AS "SIZE(MB)" 
    FROM DBA_DATA_FILES;
    
    -- 或者使用动态性能视图关联查询
    SELECT ts.NAME AS "表空间名", df.PATH AS "数据文件路径"
    FROM V$TABLESPACE ts, V$DATAFILE df 
    WHERE ts.ID = df.GROUP_ID;
  2. 在操作系统层面验证:获得文件路径后,可以登录服务器,使用命令行工具确认文件物理存在。

    复制代码
    # 使用 ls 命令查看文件详细信息
    ls -l /dm8/data/DAMENG/DMTBS01.dbf

    如果文件存在,ls命令会显示其属性;如果不存在或路径错误,则会提示"No such file or directory"。

重要注意事项

  • 修改文件路径 :如果需要更改现有数据文件的路径,必须在数据库处于联机(ONLINE) ​ 状态下,先将表空间置为脱机(OFFLINE) ,然后使用 RENAME DATAFILE命令修改,最后再将其恢复为联机状态。操作前务必做好备份。

    复制代码
    ALTER TABLESPACE "DMTBS" OFFLINE;
    ALTER TABLESPACE "DMTBS" RENAME DATAFILE '/old_path/DMTBS01.dbf' TO '/new_path/DMTBS01.dbf';
    ALTER TABLESPACE "DMTBS" ONLINE;
  • 权限问题 :在服务器上查看或操作数据文件时,请确保使用的操作系统账户(如dmdba)有访问该路径的足够权限。

  • 空间监控:定期检查表空间的使用率,避免磁盘空间耗尽。可以使用类似下面的查询语句:

    复制代码
    SELECT a.tablespace_name, 
           round((a.total - b.free) / a.total * 100, 2) AS "使用率(%)"
    FROM (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) a,
         (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) b
    WHERE a.tablespace_name = b.tablespace_name;
相关推荐
小豪GO!2 小时前
操作系统-八股
java
周某人姓周2 小时前
sqli-labs注入靶场搭建与sql语句
sql·安全·网络安全
Geek攻城猫2 小时前
Java 实现大文件上传与断点续传:原理、实践与优化
java
启明真纳2 小时前
MySQL基本概念
数据库·mysql
Kratzdisteln2 小时前
【1902】自适应学习系统 - 完整技术方案
java·python·学习
wregjru2 小时前
【QT】1.QT 基础入门
数据库
2301_818732062 小时前
前端一直获取不到后端的值,和数据库字段设置有关 Oracle
前端·数据库·sql·oracle
皙然2 小时前
MyBatis 执行流程源码级深度解析:从 Mapper 接口到 SQL 执行的全链路逻辑
数据库·sql·mybatis
橘橙黄又青2 小时前
Spring篇
java·后端·spring