达梦(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;
相关推荐
wespaul4 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
驭渊的小故事4 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
一只鹿鹿鹿9 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
哦虎!9 小时前
【JavaEE】网络初识
java
2603_965148119 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__9 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
AI砖家9 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq10 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec10 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界10 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统