运维管理24 分钟阅读
达梦 DM8 表空间与数据文件运维 100 条命令
表空间告警先看还能不能分配新簇。表空间总大小、数据文件内未分配页、文件是否允许扩展,是三件不同的事;磁盘已经满时,自动扩展配置再大也没用。查清表空间对应的文件和路径后,再决定是扩文件、加文件,还是先处理对象增长。
2026年9月16日阅读—点赞—收藏—
dba100damengscenario
100 条命令系列文章专栏
表空间告警先看还能不能分配新簇。表空间总大小、数据文件内未分配页、文件是否允许扩展,是三件不同的事;磁盘已经满时,自动扩展配置再大也没用。查清表空间对应的文件和路径后,再决定是扩文件、加文件,还是先处理对象增长。
表空间告警先看还能不能分配新簇。表空间总大小、数据文件内未分配页、文件是否允许扩展,是三件不同的事;磁盘已经满时,自动扩展配置再大也没用。查清表空间对应的文件和路径后,再决定是扩文件、加文件,还是先处理对象增长。
这篇从表空间状态、数据文件容量和扩展上限开始整理命令。空间告警来了可以逐项对照;建议收藏,交接时也方便把具体文件和剩余量发给同事。
达梦 DM8 表空间与数据文件关系示意图
示例采用 Linux、DM8 单实例,SQL 在 DIsql 执行。页大小以每个文件的 PAGE_SIZE 为准,不能统一假设为 8 KB。扩文件和加文件的命令后续单列,执行前先核对磁盘空间、文件路径和备份。
1SELECT ID, NAME, TYPE$, STATUS$, FILE_NUM,2 TOTAL_SIZE, MAX_SIZE3FROM V$TABLESPACE4ORDER BY NAME;STATUS$ 要结合官方状态值确认联机、脱机或损坏。TOTAL_SIZE、MAX_SIZE 用页数表示;这里先看结构,不把总页数直接说成可用空间。
1SELECT ts.NAME AS TABLESPACE_NAME,2 df.PATH AS DATAFILE_PATH,3 df.GROUP_ID, df.PAGE_SIZE4FROM V$TABLESPACE AS ts5JOIN V$DATAFILE AS df6 ON df.GROUP_ID = ts.ID7ORDER BY ts.NAME, df.PATH;两张视图用表空间 ID 对应。RLOG 文件不在这份数据文件清单里,联机 Redo 的容量要另查日志视图。
1SELECT PATH, TOTAL_SIZE, FREE_SIZE, PAGE_SIZE,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS TOTAL_MB,3 ROUND(FREE_SIZE * PAGE_SIZE / 1048576.0, 2) AS FREE_MB4FROM V$DATAFILE5ORDER BY FREE_SIZE;TOTAL_SIZE 和 FREE_SIZE 是页数,乘该文件的页大小才是字节。FREE_SIZE 代表未分配页,和“对象可回收空间”不是一回事。
1SELECT PATH, PAGE_SIZE, TOTAL_SIZE, FREE_SIZE,2 ROUND(100.0 * FREE_SIZE / NULLIF(TOTAL_SIZE, 0), 2)3 AS FREE_PCT4FROM V$DATAFILE5WHERE TOTAL_SIZE > 06ORDER BY FREE_PCT;比例低只是线索。文件若能自动扩展且底层磁盘有空间,未必立刻报分配失败;下一条必须对照扩展上限。
1SELECT PATH, AUTO_EXTEND, NEXT_SIZE, MAX_SIZE,2 TOTAL_SIZE, PAGE_SIZE3FROM V$DATAFILE4ORDER BY PATH;AUTO_EXTEND=1 才允许自动扩展;NEXT_SIZE、MAX_SIZE 按 MB 解释,当前 TOTAL_SIZE 仍是页数。MAX_SIZE=0 表示未设置文件级上限,不等于磁盘可以无限增长。
1SELECT PATH,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS CURRENT_MB,3 MAX_SIZE AS MAX_MB, NEXT_SIZE AS NEXT_MB,4 AUTO_EXTEND5FROM V$DATAFILE6WHERE AUTO_EXTEND = 17ORDER BY CURRENT_MB DESC;如果文件已接近 MAX_MB,即使参数开着也快不能再长。NEXT_SIZE=0 在部分版本或 TEMP 文件上要结合 TS_AUTO_EXTEND_SIZE 的实例配置解释。
1SELECT ts.NAME, df.PATH,2 ROUND(df.FREE_SIZE * df.PAGE_SIZE / 1048576.0, 2)3 AS FREE_MB,4 df.AUTO_EXTEND, df.MAX_SIZE5FROM V$TABLESPACE AS ts6JOIN V$DATAFILE AS df7 ON df.GROUP_ID = ts.ID8WHERE ts.NAME = 'APP_TS'9ORDER BY FREE_MB;把 APP_TS 换成现场名称。同一表空间的文件余量可能很不均匀;扩展或加文件时还要看各文件所在磁盘,并非只看表空间总量。
1SELECT ts.NAME, df.PATH, df.TOTAL_SIZE,2 df.FREE_SIZE, df.PAGE_SIZE,3 df.AUTO_EXTEND, df.NEXT_SIZE4FROM V$TABLESPACE AS ts5JOIN V$DATAFILE AS df6 ON df.GROUP_ID = ts.ID7WHERE ts.NAME = 'TEMP';TEMP 由数据库维护,排序、建索引和中间结果会用到它。该文件的 NEXT_SIZE 可能显示 0,实际扩展大小由实例参数控制;不能用 0 判定它不扩展。
1df -h /dmdata/DAMENG/APP01.DBF路径换成第 2 条实际查到的文件。文件可自动扩展还要有文件系统剩余空间;若在 ASM 等非普通文件系统环境,改用相应存储工具检查。
1ls -lh /dmdata/DAMENG/APP01.DBFLinux 上文件被误删但数据库进程仍持有句柄时,简单的容量查询可能不足以发现问题。出现“数据文件被删除”错误要走官方的失效文件检查和恢复流程,别直接重建同名空文件。
1SELECT ts.NAME,2 ROUND(SUM(df.TOTAL_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS TOTAL_MB,3 ROUND(SUM(df.FREE_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS FREE_MB4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5GROUP BY ts.NAME ORDER BY TOTAL_MB DESC;这里汇总的是数据文件未分配页,不包含对象内部可以整理的空闲空间。
1SELECT ts.NAME,2 ROUND(100.0 * SUM(df.FREE_SIZE * df.PAGE_SIZE) /3 NULLIF(SUM(df.TOTAL_SIZE * df.PAGE_SIZE), 0), 2) AS FREE_PCT4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5GROUP BY ts.NAME ORDER BY FREE_PCT;百分比适合排序,是否告警还要看业务增长速度和自动扩展空间。
1SELECT ts.NAME,2 SUM(CASE WHEN df.AUTO_EXTEND = 1 THEN 1 ELSE 0 END) AS AUTO_FILES,3 COUNT(*) AS FILES4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5GROUP BY ts.NAME ORDER BY ts.NAME;至少一个文件可扩展不代表表空间一定安全,还要看该文件的 MAX_SIZE 和磁盘。
1SELECT PATH, TOTAL_SIZE, PAGE_SIZE, MAX_SIZE2FROM V$DATAFILE3WHERE AUTO_EXTEND = 14 AND MAX_SIZE > 05 AND TOTAL_SIZE * PAGE_SIZE / 1048576.0 >= MAX_SIZE;这类文件不会继续增长,应评估扩上限、扩文件或增加新文件。
1SELECT PATH,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS CURRENT_MB,3 MAX_SIZE,4 ROUND(MAX_SIZE - TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS HEADROOM_MB5FROM V$DATAFILE6WHERE AUTO_EXTEND = 1 AND MAX_SIZE > 07ORDER BY HEADROOM_MB;只计算文件配置上限,不代表底层文件系统真有同样多的可用空间。
1SELECT PATH,2 ROUND(FREE_SIZE * PAGE_SIZE / 1048576.0, 2) AS FREE_MB3FROM V$DATAFILE4WHERE AUTO_EXTEND = 05ORDER BY FREE_MB;固定大小文件接近耗尽时,需要在分配失败前安排扩容。
1SELECT PATH, CREATE_TIME, MODIFY_TIME,2 TOTAL_SIZE, FREE_SIZE3FROM V$DATAFILE4ORDER BY MODIFY_TIME DESC;最近扩容或移动过的文件可以通过时间快速定位,并与变更记录核对。
1SELECT ID, NAME, TYPE$, STATUS$,2 CASE STATUS$ WHEN 0 THEN 'ONLINE' WHEN 1 THEN 'OFFLINE'3 WHEN 2 THEN 'RES_OFFLINE' WHEN 3 THEN 'CORRUPT' ELSE 'UNKNOWN' END AS STATUS_NAME4FROM V$TABLESPACE ORDER BY ID;系统表空间、TEMP、ROLL 和 RLOG 的管理限制不同,不要套用用户表空间命令。
1SELECT ID, NAME, TYPE$, STATUS$2FROM V$TABLESPACE3WHERE STATUS$ <> 04ORDER BY NAME;看到 OFFLINE 或 CORRUPT 先查变更与故障记录,不能直接 ONLINE。
1SELECT PATH, FREE_PAGE_NO, FREE_SIZE, PAGE_SIZE2FROM V$DATAFILE3WHERE PATH = '/dmdata/DAMENG/APP01.DBF';缩减文件前要确认尾部空间是否可释放;总空闲多不等于文件尾部可收缩。
1SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM USER_SEGMENTS4ORDER BY BYTES DESC;先找大对象,再判断增长来自表、索引还是 LOB。
1SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM DBA_SEGMENTS4WHERE TABLESPACE_NAME = 'APP_TS'5ORDER BY BYTES DESC6LIMIT 30;扩容前先确认谁在增长,避免只解决一次告警。
1SELECT OWNER, ROUND(SUM(BYTES) / 1048576.0, 2) AS MB2FROM DBA_SEGMENTS3GROUP BY OWNER4ORDER BY MB DESC;用户汇总适合划分责任,但共享对象和系统对象要单独解释。
1SELECT SEGMENT_TYPE, ROUND(SUM(BYTES) / 1048576.0, 2) AS MB2FROM DBA_SEGMENTS3WHERE TABLESPACE_NAME = 'APP_TS'4GROUP BY SEGMENT_TYPE5ORDER BY MB DESC;索引占用过高时先检查重复索引和业务访问,不能直接重建全部索引。
1SELECT OWNER, SEGMENT_NAME AS TABLE_NAME,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM DBA_SEGMENTS4WHERE SEGMENT_TYPE = 'TABLE'5ORDER BY BYTES DESC6LIMIT 20;分区表可能按分区记录,需要把分区占用一起汇总。
1SELECT OWNER, SEGMENT_NAME AS INDEX_NAME,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM DBA_SEGMENTS4WHERE SEGMENT_TYPE LIKE 'INDEX%'5ORDER BY BYTES DESC6LIMIT 20;空间大不代表索引无效,结合使用频率和约束用途判断。
1SELECT OWNER, SEGMENT_NAME, PARTITION_NAME,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM DBA_SEGMENTS4WHERE SEGMENT_TYPE = 'TABLE PARTITION'5ORDER BY BYTES DESC6LIMIT 30;单分区异常增长时,检查分区键、数据保留策略和装载任务。
1SELECT OWNER, SEGMENT_NAME, PARTITION_NAME,2 ROUND(BYTES / 1048576.0, 2) AS MB3FROM DBA_SEGMENTS4WHERE SEGMENT_TYPE = 'INDEX PARTITION'5ORDER BY BYTES DESC6LIMIT 30;索引分区和表分区要按相同业务范围对应分析。
1SELECT OWNER, TABLE_NAME, TABLESPACE_NAME2FROM DBA_TABLES3WHERE OWNER = 'APP' AND TABLE_NAME = 'ORDERS';对象扩容或迁移前先确认当前落点,避免改错表空间。
1SELECT OWNER, INDEX_NAME, TABLE_NAME, TABLESPACE_NAME, STATUS2FROM DBA_INDEXES3WHERE OWNER = 'APP' AND TABLE_NAME = 'ORDERS';表和索引分开存放时,两边的容量都要监控。
1SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE2FROM DBA_USERS3WHERE USERNAME = 'APP';新对象落错空间时,先检查用户默认表空间和建表语句。
1SELECT TABLESPACE_NAME, SEGMENT_TYPE, COUNT(*) AS SEGMENTS2FROM DBA_SEGMENTS3GROUP BY TABLESPACE_NAME, SEGMENT_TYPE4ORDER BY TABLESPACE_NAME, SEGMENT_TYPE;对象数量多会增加管理复杂度,但不等于空间一定大。
1SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED2FROM DBA_OBJECTS3WHERE OWNER = 'APP'4ORDER BY CREATED DESC5LIMIT 30;空间突增时对照最近建表、索引和分区变更。
1SELECT *2FROM USER_RECYCLEBIN;若版本和配置启用了回收站,已删除对象可能仍占空间。清理前确认恢复需求。
1SELECT TABLE_NAME, TABLESPACE_NAME, INITIAL_EXTENT,2 NEXT_EXTENT, MIN_EXTENTS3FROM USER_TABLES4WHERE TABLE_NAME = 'ORDERS';存储参数影响后续簇分配。字段以现场版本返回为准。
1CREATE TABLESPACE APP_TS2DATAFILE '/dmdata/DAMENG/APP01.DBF' SIZE 1024;写操作。先确认路径、最小文件大小、命名规范、磁盘和备份策略。
1CREATE TABLESPACE APP_TS2DATAFILE '/dmdata/DAMENG/APP01.DBF' SIZE 10243AUTOEXTEND ON NEXT 100 MAXSIZE 10240;单位为 MB。MAXSIZE 不是磁盘配额,仍需文件系统告警。
1ALTER TABLESPACE APP_TS2ADD DATAFILE '/dmdata2/DAMENG/APP02.DBF' SIZE 1024;优先把新文件放到有容量和 I/O 余量的存储,文件数还受 TS_FIL_MAX_ID 限制。
1ALTER TABLESPACE APP_TS2ADD DATAFILE '/dmdata2/DAMENG/APP02.DBF' SIZE 1024 AUTOEXTEND OFF;适合要求严格控制文件边界的环境,但必须提前监控剩余空间。
1ALTER TABLESPACE APP_TS2ADD DATAFILE '/dmdata2/DAMENG/APP02.DBF' SIZE 10243AUTOEXTEND ON NEXT 100 MAXSIZE 10240;执行后立即回读 PATH、TOTAL_SIZE、AUTO_EXTEND、NEXT_SIZE 和 MAX_SIZE。
1ALTER TABLESPACE APP_TS2RESIZE DATAFILE '/dmdata/DAMENG/APP01.DBF' TO 2048;目标值是文件最终大小 MB,不是增加量。先确认磁盘余量。
1ALTER TABLESPACE APP_TS2DATAFILE '/dmdata/DAMENG/APP01.DBF'3AUTOEXTEND ON NEXT 100 MAXSIZE 10240;扩展步长范围和实际步长还受 TS_AUTO_EXTEND_SIZE 影响。
1ALTER TABLESPACE APP_TS2DATAFILE '/dmdata/DAMENG/APP01.DBF' AUTOEXTEND OFF;关闭前确认当前余量和后续人工扩容流程,避免突然分配失败。
1ALTER TABLESPACE APP_TS2DATAFILE '/dmdata/DAMENG/APP01.DBF'3AUTOEXTEND ON NEXT 100 MAXSIZE UNLIMITED;高风险配置。无限制只是不设文件级上限,最终仍受操作系统和文件系统限制。
1SELECT PARA_NAME, PARA_VALUE, PARA_TYPE2FROM V$DM_INI3WHERE PARA_NAME = 'TS_AUTO_EXTEND_SIZE';TEMP 和旧版本创建的 NEXT_SIZE=0 文件可能使用这个值。
1SELECT PARA_NAME, PARA_VALUE, PARA_TYPE2FROM V$DM_INI3WHERE PARA_NAME = 'TS_FIL_MAX_ID';增加文件前核对当前 FILE_NUM 与配置上限。
1SELECT PATH,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS CURRENT_MB,3 FREE_SIZE, AUTO_EXTEND, NEXT_SIZE, MAX_SIZE4FROM V$DATAFILE5WHERE PATH = '/dmdata/DAMENG/APP01.DBF';SQL 成功后以视图回读为准,并同步核对操作系统文件大小。
1ls -lh /dmdata/DAMENG/APP01.DBF数据库视图和文件系统两边都应符合预期。
1df -h /dmdata/DAMENG/APP01.DBF扩容完成不代表目录仍有安全余量,继续保留增长空间。
1df -i /dmdata/DAMENG/APP01.DBF数据库文件数量通常不多,但归档、备份与日志共盘时 inode 仍可能成为问题。
1CREATE TABLESPACE APP_IDX_TS2DATAFILE '/dmidx/DAMENG/APP_IDX01.DBF' SIZE 10243AUTOEXTEND ON NEXT 100 MAXSIZE 10240;表和索引分盘是否有收益取决于存储架构,不能只靠逻辑分开判断。
1CREATE TABLESPACE APP_LOB_TS2DATAFILE '/dmlob/DAMENG/APP_LOB01.DBF' SIZE 20483AUTOEXTEND ON NEXT 200 MAXSIZE 20480;大对象增长快,应设置独立监控阈值和备份策略。
1ALTER TABLESPACE APP_TS ADD HUGE PATH '/dmhuge/APP_TS/HUGE1';会把普通表空间升级为混合表空间。执行前确认业务对象、路径和版本支持。
1SELECT ts.NAME, df.PATH, df.GROUP_ID2FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID3WHERE df.PATH = '/dmdata2/DAMENG/APP02.DBF';避免路径拼写错误或文件加入了错误的表空间。
1SELECT ts.NAME,2 ROUND(SUM(df.TOTAL_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS TOTAL_MB,3 ROUND(SUM(df.FREE_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS FREE_MB4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5WHERE ts.NAME = 'APP_TS'6GROUP BY ts.NAME;把扩容前后两次结果一起放进变更记录。
1SELECT PATH, TOTAL_SIZE, FREE_SIZE, FREE_PAGE_NO, PAGE_SIZE,2 ROUND((TOTAL_SIZE - FREE_SIZE) * PAGE_SIZE / 1048576.0, 2) AS USED_MB3FROM V$DATAFILE4WHERE PATH = '/dmdata/DAMENG/APP01.DBF';USED_MB 只是粗略下界,真正能否缩减取决于文件尾部是否仍有已分配页。
1ALTER TABLESPACE APP_TS2RESIZE DATAFILE '/dmdata/DAMENG/APP01.DBF' TO 1536;高风险写操作。目标大小不能覆盖已使用页,执行前完成备份并确认尾部空间。
1SELECT PATH, TOTAL_SIZE, FREE_SIZE, PAGE_SIZE,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS TOTAL_MB3FROM V$DATAFILE4WHERE PATH = '/dmdata/DAMENG/APP01.DBF';确认数据库记录和操作系统文件都已变化,再关闭变更。
1ALTER TABLESPACE APP_TS OFFLINE;表空间存在未提交事务时会失败。SYSTEM、ROLL、RLOG、TEMP 不允许这样操作。
1ALTER TABLESPACE APP_TS ONLINE;先确认文件路径、权限和移动操作已完成,ONLINE 后做对象访问验证。
1ALTER TABLESPACE APP_TS RENAME TO APP_DATA_TS;会影响运维脚本和对象创建规范,执行前搜索所有依赖配置。
1SELECT NAME, STATUS$2FROM V$TABLESPACE3WHERE NAME = 'APP_TS';只有用户表空间处于 OFFLINE 才允许修改文件路径。
1cp --reflink=auto --preserve=all /dmdata/DAMENG/APP01.DBF /dmdata2/DAMENG/APP01.DBF表空间必须已脱机。复制完成后校验大小和校验和,不能边运行边移动。
1stat -c '%n %s' /dmdata/DAMENG/APP01.DBF /dmdata2/DAMENG/APP01.DBF大小一致只是第一步,关键文件建议继续做校验和比对。
1sha256sum /dmdata/DAMENG/APP01.DBF /dmdata2/DAMENG/APP01.DBF大文件计算会产生顺序读 I/O,安排在维护窗口内执行。
1ALTER TABLESPACE APP_TS2RENAME DATAFILE '/dmdata/DAMENG/APP01.DBF'3TO '/dmdata2/DAMENG/APP01.DBF';命令不会替你完成操作系统复制。路径切换后再将表空间 ONLINE。
1SELECT ts.NAME, df.PATH2FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID3WHERE ts.NAME = 'APP_TS';确认所有文件都指向新路径,尤其是一次移动多个文件时。
1ALTER TABLESPACE APP_TS2DROP DATAFILE '/dmdata2/DAMENG/APP03.DBF';高风险操作。只能按文件 ID 从大到小删除,ID 为 0 的文件不能删除,文件必须满足删除条件。
1DROP TABLESPACE APP_OLD_TS;只能删除用户创建且未使用过的表空间,并会删除其数据文件。执行前必须确认无对象和备份需求。
1ALTER TABLESPACE APP_TS CORRUPT;极高风险,仅在表空间已 OFFLINE 或确实损坏并按官方恢复方案处理时使用。
1SELECT PATH, TOTAL_SIZE, FREE_SIZE, PAGE_SIZE,2 ROUND(FREE_SIZE * PAGE_SIZE / 1048576.0, 2) AS FREE_MB3FROM V$DATAFILE4WHERE GROUP_ID = (SELECT ID FROM V$TABLESPACE WHERE NAME = 'TEMP');排序、哈希和建索引高峰会快速使用 TEMP,连续采样比单点值更有意义。
1SELECT ts.NAME, df.PATH, df.TOTAL_SIZE, df.FREE_SIZE, df.PAGE_SIZE2FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID3WHERE ts.NAME = 'ROLL';长事务和大回滚会影响 ROLL,不能用删除业务数据的方式处理。
1SELECT *2FROM V$RLOGFILE;RLOG 不在 V$TABLESPACE 和 V$DATAFILE 中,必须单独检查。
1SELECT *2FROM V$RLOG;字段随版本变化,关注当前日志、切换和归档相关状态。
1df -h /dm/arch归档盘满和数据表空间满是两类问题,处置方式不同。
1SELECT PATH, AUTO_EXTEND, NEXT_SIZE, MAX_SIZE2FROM V$DATAFILE3WHERE GROUP_ID = (SELECT ID FROM V$TABLESPACE WHERE NAME = 'TEMP');NEXT_SIZE=0 时结合 TS_AUTO_EXTEND_SIZE 判断实际扩展步长。
1SELECT *2FROM V$TRX3ORDER BY START_TIME;ROLL 压力异常时先识别长事务,不能盲目扩大后不处理根因。
1SELECT COUNT(*) AS WAITING_TRX2FROM V$TRXWAIT;空间不足伴随大量阻塞时,先稳定业务并找阻塞源头。
1SELECT *2FROM V$ARCH_STATUS;空间清理或迁移归档目录前,先确认归档链路状态和主备影响。
1SELECT INSTANCE_NAME, STATUS$, MODE$2FROM V$INSTANCE;主备环境的数据文件操作要按角色和守护方案执行,不能只在一端修改。
1SELECT PATH,2 ROUND(FREE_SIZE * PAGE_SIZE / 1073741824.0, 2) AS FREE_GB,3 AUTO_EXTEND, MAX_SIZE4FROM V$DATAFILE5WHERE FREE_SIZE * PAGE_SIZE < 10737418246ORDER BY FREE_GB;1 GB 只是示例阈值,应按增长速度和扩容周期调整。
1SELECT PATH,2 ROUND(100.0 * FREE_SIZE / NULLIF(TOTAL_SIZE,0), 2) AS FREE_PCT3FROM V$DATAFILE4WHERE FREE_SIZE / NULLIF(TOTAL_SIZE,0) < 0.105ORDER BY FREE_PCT;比例告警和绝对容量告警应同时设置,避免小文件频繁误报。
1SELECT PATH, FREE_SIZE, PAGE_SIZE2FROM V$DATAFILE3WHERE AUTO_EXTEND = 04 AND FREE_SIZE * PAGE_SIZE < 21474836485ORDER BY FREE_SIZE * PAGE_SIZE;这类文件最容易突然分配失败,应优先安排人工扩容。
1SELECT PATH, MAX_SIZE,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS CURRENT_MB3FROM V$DATAFILE4WHERE AUTO_EXTEND = 1 AND MAX_SIZE > 05 AND TOTAL_SIZE * PAGE_SIZE / 1048576.0 >= MAX_SIZE * 0.96ORDER BY CURRENT_MB DESC;达到 90% 只是示例,生产阈值要留出审批和扩容时间。
1SELECT ts.NAME, ts.STATUS$, ts.FILE_NUM,2 ROUND(SUM(df.TOTAL_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS TOTAL_MB,3 ROUND(SUM(df.FREE_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS FREE_MB4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5GROUP BY ts.NAME, ts.STATUS$, ts.FILE_NUM6ORDER BY FREE_MB;适合每日巡检留档,采样时间和数据库版本也应一并记录。
1SELECT PATH, AUTO_EXTEND, NEXT_SIZE, MAX_SIZE,2 ROUND(TOTAL_SIZE * PAGE_SIZE / 1048576.0, 2) AS CURRENT_MB3FROM V$DATAFILE4ORDER BY AUTO_EXTEND, PATH;人工复核关闭扩展、无上限扩展和接近上限三种情况。
1find /dmdata/DAMENG -maxdepth 1 -type f -printf '%s %p\n' | sort -nr | head -20确认数据库视图中的大文件与操作系统一致,不要删除不认识的数据库文件。
1du -xsh /dmdata/DAMENGdu 与 df 口径不同。差异很大时检查已删除但仍被进程占用的文件。
1lsof +L1 | grep dmserver发现数据或日志文件被删除仍占空间时,不要重启前盲目清理,先按故障流程处置。
1iostat -x 1 10扩容、移动和校验大文件会带来 I/O,执行期间持续观察业务盘延迟。
1SELECT ID, NAME, TYPE$, STATUS$, FILE_NUM2FROM V$TABLESPACE3ORDER BY ID;维护结束前确认没有用户表空间残留 OFFLINE 或 CORRUPT。
1SELECT PATH2FROM V$DATAFILE3ORDER BY PATH;把清单交给操作系统逐项核对,尤其是刚移动或新增的文件。
1SELECT ts.NAME,2 ROUND(SUM(df.TOTAL_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS TOTAL_MB,3 ROUND(SUM(df.FREE_SIZE * df.PAGE_SIZE) / 1048576.0, 2) AS FREE_MB4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5WHERE ts.NAME = 'APP_TS'6GROUP BY ts.NAME;结果与变更目标、磁盘余量和告警阈值对照。
1SELECT PATH, AUTO_EXTEND, NEXT_SIZE, MAX_SIZE2FROM V$DATAFILE3WHERE GROUP_ID = (SELECT ID FROM V$TABLESPACE WHERE NAME = 'APP_TS')4ORDER BY PATH;防止新文件漏配上限或旧文件仍保持临时配置。
1df -h /dmdata /dmdata2 /dmidx /dmlob只保留现场实际目录。扩容后的安全余量必须满足下一轮增长。
1find /dmdata/DAMENG -maxdepth 1 -name '*.DBF' -printf '%M %u:%g %s %p\n'新增或移动文件的属主、组和权限应与现有文件一致。
1SELECT COUNT(*)2FROM APP.ORDERS3WHERE 1 = 0;零行条件用于验证对象解析和表空间访问,不扫描整表。
1SELECT INDEX_NAME, STATUS, TABLESPACE_NAME2FROM DBA_INDEXES3WHERE OWNER = 'APP' AND TABLE_NAME = 'ORDERS';移动或空间故障恢复后,确认相关索引没有失效。
1SELECT ts.NAME, df.PATH, df.CREATE_TIME, df.MODIFY_TIME,2 df.TOTAL_SIZE, df.FREE_SIZE, df.PAGE_SIZE,3 df.AUTO_EXTEND, df.NEXT_SIZE, df.MAX_SIZE4FROM V$TABLESPACE ts JOIN V$DATAFILE df ON df.GROUP_ID = ts.ID5ORDER BY ts.NAME, df.PATH;原始页数和字节换算结果都保留,便于以后比较增长趋势。
1SELECT *2FROM V$VERSION;把版本、执行时间、变更 SQL、前后容量、文件系统余量和业务验证放进同一份记录。
达梦表空间告警不能只看一个使用率。先把表空间、数据文件、未分配页、自动扩展上限和底层磁盘对应起来,再查具体是哪个表、索引或分区增长。扩文件、加文件、移动和收缩都要留出备份与回读步骤。
建议把常用表空间名、文件目录和告警阈值整理成现场版本。空间问题越早发现,越不需要在业务高峰临时改文件。
更多数据库运维内容可在 ORA100 · DBA100 查看:
微信里搜索小程序 「三笠的百令册」,也可以继续查看这个系列。
ORA100 DBA100