一、操作时间
2026 年 5 月 3 日 09:30
二、操作环境
- 平台:Oracle Database Appliance,ODA
- 数据库版本:Oracle Database 19c,19.25.0.0.0
- 主机:
teierp1 - 实例:
erpcdb1 - CDB:
ERPCDB - PDB:
YJXT - 存储:ASM
+DATA - 操作方式:在线扩容
本次操作为 Oracle 表空间在线扩容,不涉及业务数据修改,不需要停库。
三、登录数据库并进入 YJXT PDB
首先登录 ODA 主机,并切换至 oracle 用户:
1su - oracle 2
确认当前 Oracle 实例:
1echo $ORACLE_SID 2
结果显示:
1erpcdb1 2
使用本地认证方式登录数据库:
1sqlplus / as sysdba 2
登录后确认当前 CDB 下的 PDB 状态:
1show pdbs; 2
查询结果显示:
1CON_ID CON_NAME OPEN MODE 2----- -------- ---------- 32 PDB$SEED READ ONLY 43 YJXT READ WRITE 57 ECOLOGY READ WRITE 6
其中 YJXT PDB 为 READ WRITE 状态,可以进行表空间扩容操作。
切换到 YJXT PDB:
1alter session set container=yjxt; 2
再次确认当前 PDB:
1show pdbs; 2
结果显示当前会话已进入:
1YJXT READ WRITE 2
至此,后续所有表空间查询和扩容操作均在 YJXT PDB 内执行。
四、查询表空间使用率,定位高使用率表空间
进入 YJXT PDB 后,先查询业务表空间使用情况,发现以下表空间使用率偏高:
| 表空间 | 总大小 MB | 已用 MB | 空闲 MB | 使用率 |
|---|---|---|---|---|
| DS_ZTFW | 80,894 | 76,771 | 4,123 | 95% |
| DS_TXYX | 10,752 | 9,907 | 845 | 92% |
| DS_GGMK | 16,384 | 11,434 | 4,950 | 70% |
| DS_PXNL | 12,288 | 8,526 | 3,762 | 69% |
其中:
DS_ZTFW使用率 95%,已处于高风险状态。DS_TXYX使用率 92%,剩余空间不足 1GB,也需要优先处理。DS_GGMK、DS_PXNL使用率接近 70%,本次一并进行预防性扩容。
五、确认 ASM +DATA 剩余空间
扩容前先确认 ASM +DATA 磁盘组剩余空间,避免盲目扩容。
执行:
1set lines 200 2col name for a15 3 4select 5 name, 6 total_mb, 7 free_mb, 8 round(free_mb / total_mb * 100, 2) as free_pct 9from v$asm_diskgroup 10where name = 'DATA'; 11
查询结果:
| 磁盘组 | 总空间 MB | 剩余空间 MB | 剩余比例 |
|---|---|---|---|
| DATA | 35,163,072 | 26,932,280 | 76.59% |
结论:+DATA 剩余空间约 25.69TB,空间充足,满足本次扩容条件。
六、判断是否可以扩大原数据文件
扩容前需要判断目标表空间的数据文件是否还可以继续扩大。
执行以下 SQL:
1set lines 260 pages 200 2col tablespace_name for a20 3col file_name for a90 4col autoextensible for a15 5 6select 7 tablespace_name, 8 file_id, 9 file_name, 10 round(bytes/1024/1024) as size_mb, 11 autoextensible, 12 round(maxbytes/1024/1024) as max_mb, 13 round(increment_by * (select value from v$parameter where name = 'db_block_size') / 1024 / 1024) as next_mb 14from dba_data_files 15where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL') 16order by tablespace_name, file_id; 17
这个 SQL 后续可以复用,只需要替换表空间名称即可。
例如只查一个表空间:
1where tablespace_name = 'DS_TXYX' 2
查询多个表空间:
1where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL') 2
判断原则如下:
| 判断条件 | 处理方式 |
|---|---|
| SIZE_MB < MAX_MB | 原数据文件未到上限,优先 resize 扩大原文件 |
| SIZE_MB = MAX_MB | 原数据文件已到上限,需要新增数据文件 |
| AUTOEXTENSIBLE = YES | 数据文件已开启自动扩展 |
| AUTOEXTENSIBLE = NO | 需要评估是否开启自动扩展或手工扩容 |
一句话总结:
能扩大原文件就优先 resize;原文件到上限了,再 add datafile。
七、具体扩容操作过程
1. DS_TXYX 表空间扩容
查询发现 DS_TXYX 数据文件状态如下:
| 表空间 | 当前大小 MB | 最大大小 MB | 自动扩展 |
|---|---|---|---|
| DS_TXYX | 10,752 | 32,767 | YES |
判断:
DS_TXYX 原数据文件还未达到最大值,可以直接扩大原数据文件,不需要新增数据文件。
执行扩容:
1alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_txyx.321.1230565079' 2resize 20G; 3
执行结果:
1Database altered. 2
扩容后验证:
| 表空间 | 总大小 MB | 已用 MB | 空闲 MB | 使用率 |
|---|---|---|---|---|
| DS_TXYX | 20,480 | 9,907 | 10,573 | 48% |
处理结果:
DS_TXYX 使用率由 92% 降至 48%。
2. DS_ZTFW 表空间扩容
查询发现 DS_ZTFW 存在多个数据文件,其中部分数据文件已达到单文件上限:
| 文件 | 当前大小 MB | 最大大小 MB | 判断 |
|---|---|---|---|
| file_id 128 | 32,767 | 32,767 | 已到上限 |
| file_id 129 | 32,767 | 32,767 | 已到上限 |
| file_id 131 | 15,360 | 32,767 | 仍可扩展 |
判断:
DS_ZTFW 已有两个数据文件达到 32,767MB 单文件上限,继续只依赖原文件扩展不够稳妥,因此采用新增数据文件方式。
第一次新增数据文件:
1alter tablespace DS_ZTFW 2add datafile '+DATA' 3size 20G 4autoextend on 5next 1G 6maxsize 32767M; 7
执行结果:
1Tablespace altered. 2
第二次新增数据文件:
1alter tablespace DS_ZTFW 2add datafile '+DATA' 3size 20G 4autoextend on 5next 1G 6maxsize 32767M; 7
执行结果:
1Tablespace altered. 2
本次为 DS_ZTFW 新增 2 个 20G 数据文件,合计新增约 40G。
扩容后验证:
| 表空间 | 总大小 MB | 已用 MB | 空闲 MB | 使用率 |
|---|---|---|---|---|
| DS_ZTFW | 121,854 | 76,773 | 45,081 | 63% |
处理结果:
DS_ZTFW 使用率由 95% 降至 63%。
3. DS_GGMK 表空间扩容
查询发现 DS_GGMK 数据文件状态如下:
| 表空间 | 当前大小 MB | 最大大小 MB | 自动扩展 |
|---|---|---|---|
| DS_GGMK | 16,384 | 32,767 | YES |
判断:
DS_GGMK 原数据文件未达到最大值,可以直接扩大原数据文件。
执行扩容:
1alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_ggmk.329.1230565067' 2resize 24G; 3
执行结果:
1Database altered. 2
扩容后验证:
| 表空间 | 总大小 MB | 已用 MB | 空闲 MB | 使用率 |
|---|---|---|---|---|
| DS_GGMK | 24,576 | 11,434 | 13,142 | 47% |
处理结果:
DS_GGMK 使用率由 70% 降至 47%。
4. DS_PXNL 表空间扩容
查询发现 DS_PXNL 数据文件状态如下:
| 表空间 | 当前大小 MB | 最大大小 MB | 自动扩展 |
|---|---|---|---|
| DS_PXNL | 12,288 | 32,767 | YES |
判断:
DS_PXNL 原数据文件未达到最大值,可以直接扩大原数据文件。
执行扩容:
1alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_pxnl.328.1230565061' 2resize 24G; 3
执行结果:
1Database altered. 2
扩容后验证:
| 表空间 | 总大小 MB | 已用 MB | 空闲 MB | 使用率 |
|---|---|---|---|---|
| DS_PXNL | 24,576 | 8,526 | 16,050 | 35% |
处理结果:
DS_PXNL 使用率由 69% 降至 35%。
八、扩容后整体结果
本次扩容完成后,重新查询表空间使用率,结果如下:
| 表空间 | 处理前使用率 | 处理方式 | 处理后使用率 |
|---|---|---|---|
| DS_ZTFW | 95% | 新增 2 个 20G 数据文件 | 63% |
| DS_TXYX | 92% | 原数据文件扩至 20G | 48% |
| DS_GGMK | 70% | 原数据文件扩至 24G | 47% |
| DS_PXNL | 69% | 原数据文件扩至 24G | 35% |
扩容后,相关业务表空间均已降至合理使用区间。
九、验证 SQL
扩容后使用以下 SQL 验证目标表空间使用率:
1select 2 df.tablespace_name, 3 round(df.total_mb, 0) as total_mb, 4 round(df.total_mb - fs.free_mb, 0) as used_mb, 5 round(fs.free_mb, 0) as free_mb, 6 round((df.total_mb - fs.free_mb) / df.total_mb * 100, 2) as pct_used 7from 8 (select tablespace_name, sum(bytes)/1024/1024 total_mb 9 from dba_data_files 10 where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL') 11 group by tablespace_name) df 12left join 13 (select tablespace_name, sum(bytes)/1024/1024 free_mb 14 from dba_free_space 15 where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL') 16 group by tablespace_name) fs 17on df.tablespace_name = fs.tablespace_name 18order by pct_used desc; 19
也可以再次查看数据文件情况:
1select 2 tablespace_name, 3 file_id, 4 file_name, 5 round(bytes/1024/1024) as size_mb, 6 autoextensible, 7 round(maxbytes/1024/1024) as max_mb 8from dba_data_files 9where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL') 10order by tablespace_name, file_id; 11
十、最终结论
2026 年 5 月 3 日 09:30,在 ODA 平台 YJXT PDB 上完成业务表空间在线扩容处理。
本次操作遵循以下处理逻辑:
- 先登录 ODA 主机,切换
oracle用户,并确认当前实例为erpcdb1。 - 使用
sqlplus / as sysdba登录 CDB。 - 通过
show pdbs确认YJXTPDB 为READ WRITE状态。 - 使用
alter session set container=yjxt进入YJXTPDB。 - 查询表空间使用率,定位高使用率表空间。
- 查询 ASM
+DATA剩余空间,确认具备扩容条件。 - 查询数据文件大小、最大值和自动扩展状态。
- 对未达到单文件上限的数据文件,优先使用
resize扩大原文件。 - 对已达到或接近单文件上限的表空间,采用新增数据文件方式。
- 扩容完成后再次验证表空间使用率,确认状态正常。
本次扩容后,DS_ZTFW、DS_TXYX、DS_GGMK、DS_PXNL 表空间使用率均已明显下降,当前状态正常。
《ODA运维实战:Oracle 19c YJXT PDB表空间在线扩容全过程_20260503》 是转载文章,点击查看原文。