ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Toad for Oracle 调整表空间 Datafile 大小:Usage、Used Pct of Max 与 RESIZE 实战

Toad for Oracle 调整表空间 Datafile 大小:Usage、Used Pct of Max 与 RESIZE 实战 在日常 Oracle 数据库运维中经常会遇到表空间使用率较高需要对 Datafile 进行扩容的情况。本文结合一次实际操作记录如何通过Toad for Oracle 16.1 64-bit将 Datafile 从4GB 扩容到 8GB。一、先简单说明两个使用率在 Toad 的 Tablespaces 页面中可以看到Usage Used Pct of Max简单理解Usage 当前已使用空间 / 当前实际分配空间而Used Pct of Max 当前已使用空间 / Datafile 最大可扩展空间例如Size 8 GB Used 3.61 GB Max 32 GB Usage 45% Used Pct of Max 11%其中3.61 / 8 ≈ 45%而3.61 / 32 ≈ 11%日常查看表空间时可以主要关注 Usage同时结合 Autoextend、Max Size 以及 ASM / 文件系统真实剩余空间综合判断。二、本次扩容场景本次目标表空间DS_SCYF扩容前Size 4 GB Used 3.61 GB Free ≈ 403 MB Usage ≈ 90% Autoextend ON Next 512 MB Max Size ≈ 32 GB当前实际分配的 4GB 空间已经使用约 90%因此计划将 Datafile4 GB ↓ 8 GB扩容后在数据量基本不变的情况下3.61 / 8 ≈ 45%所以 Usage 会从约90%下降到45%三、使用 Toad 修改 Datafile 大小编辑铅笔 → Size 改大小 → Show SQL 核对 → OK 执行。进入 ToadDatabase → Administer → Tablespaces找到目标表空间DS_SCYF进入Alter Tablespace → Files选择对应 Datafile然后点击编辑按钮。此时可以看到Size Auto Extend Next Extent Maximum Size本次只修改Size4 GB → 8 GB其他参数保持原配置Auto Extend ON Next Extent 512 MB Maximum Size 32767 MB四、执行前先看 Show SQL生产环境操作时建议不要直接点确定。可以先点击Show SQL确认 Toad 实际准备执行的 SQL。本次生成的核心 SQL如下ALTER DATABASE DATAFILE DATA/ERPCDB/XXXXXXXX/DATAFILE/ds_scyf.xxx.xxxxxxxxxx RESIZE 8G;本质上Toad 图形界面最终也是执行ALTER DATABASE DATAFILE datafile_path RESIZE 8G;五、RESIZE 8G 是什么意思这里有一个容易混淆的地方。执行ALTER DATABASE DATAFILE datafile_path RESIZE 8G;表示将 Datafile 当前实际大小调整为 8GB。也就是4 GB → 8 GB它并不是设置最大只能到 8GB如果原 Datafile 配置仍然是AUTOEXTEND ON NEXT 512M MAXSIZE 32767M那么扩容后就是当前大小8 GB 自动扩展开启 每次扩展512 MB 最大容量约 32 GB所以RESIZE控制的是当前实际大小而AUTOEXTEND / MAXSIZE控制的是以后空间不足时是否继续增长以及最大能增长到多少六、为什么不是直接 RESIZE 30G理论上也可以执行ALTER DATABASE DATAFILE datafile_path RESIZE 30G;但是这意味着 Datafile 会立即从4 GB变成30 GB直接额外占用约26 GB底层 ASM 空间。本次实际只使用约 3.61 GB因此没有必要一次性扩到 30GB。最终选择4 GB → 8 GB同时保留AUTOEXTEND ON NEXT 512 MB MAXSIZE ≈ 32 GB这样既解决当前空间使用率较高的问题又不会一次性占用过多存储空间。七、执行前检查 ASM 空间如果 Datafile 位于 ASMDATA建议扩容前确认磁盘组剩余空间SELECT name, total_mb, free_mb, ROUND(free_mb / total_mb * 100, 2) AS free_pct FROM v$asm_diskgroup WHERE name DATA;例如本次4 GB → 8 GB理论上还需要额外分配约4 GB因此必须保证 ASM 有足够的真实可用空间。八、执行扩容确认 ASM 空间、目标容量以及 SQL 均无问题后执行ALTER DATABASE DATAFILE DATA/ERPCDB/XXXXXXXX/DATAFILE/ds_scyf.xxx.xxxxxxxxxx RESIZE 8G;Datafile 扩容通常可以在线完成一般不需要停库 不需要重启实例 不需要重启监听九、执行后检查或者可以进入SQLplus用命令行查询SELECT tablespace_name, file_name, ROUND(bytes / 1024 / 1024 / 1024, 2) AS size_gb, autoextensible, ROUND(maxbytes / 1024 / 1024 / 1024, 2) AS max_gb FROM dba_data_files WHERE tablespace_name DS_SCYF;预期看到SIZE_GB 8 AUTOEXTENSIBLE YES MAX_GB ≈ 32Toad 中也可以看到扩容前Size 4 GB Used 3.61 GB Usage 90%扩容后Size 8 GB Used 3.61 GB Usage 45%说明扩容已经生效。十、注意扩容和缩容不是一回事Datafile 扩容4 GB → 8 GB通常比较直接。但缩容8 GB → 4 GB需要更加谨慎。如果 Datafile 尾部仍然存在已使用的数据块执行缩容可能报ORA-03297: file contains used data beyond requested RESIZE value因此生产环境中Datafile 扩容相对简单缩容则需要先检查文件高水位和数据块分布。十一、总结本次操作其实比较简单发现表空间 Usage 较高 ↓ 确认 Datafile 当前大小 ↓ 检查 ASM 剩余空间 ↓ Toad 修改 Size ↓ Show SQL 确认 ↓ 执行 RESIZE ↓ 再次检查 Datafile核心 SQLALTER DATABASE DATAFILE datafile_path RESIZE 8G;需要记住几个关键点1. Usage 主要反映当前已分配空间的使用率。 2. Used Pct of Max 是考虑最大可扩展容量后的使用率。 3. RESIZE 修改的是 Datafile 当前实际大小。 4. RESIZE 8G 不代表以后最大只能到 8G。 5. AUTOEXTEND 和 MAXSIZE 可以继续保留。 6. 扩容前一定要确认 ASM 或文件系统真实剩余空间。 7. 生产环境建议先使用 Toad 的 Show SQL 确认实际执行语句。 8. 扩容和缩容的风险不同缩容需要更加谨慎。对于 DBA 来说Toad 只是操作入口。真正需要理解的还是当前 Datafile 有多大、还能扩多少、底层存储是否有空间以及最终实际执行了什么 SQL。
返回列表