达梦(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;
相关推荐
考虑考虑8 小时前
JDK25模块导入声明
java·后端·java ee
_小马快跑_10 小时前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
jiayou6411 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北12 小时前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Re_zero12 小时前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记12 小时前
Spring Boot条件注解详解
java·spring boot
程序员清风1 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
皮皮林5511 天前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
NE_STOP1 天前
springMVC-HTTP消息转换器与文件上传、下载、异常处理
spring