一、操作时间
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 用户:
su - oracle
确认当前 Oracle 实例:
echo $ORACLE_SID
结果显示:
erpcdb1
使用本地认证方式登录数据库:
sqlplus / as sysdba
登录后确认当前 CDB 下的 PDB 状态:
show pdbs;
查询结果显示:
CON_ID CON_NAME OPEN MODE
----- -------- ----------
2 PDB$SEED READ ONLY
3 YJXT READ WRITE
7 ECOLOGY READ WRITE
其中 YJXT PDB 为 READ WRITE 状态,可以进行表空间扩容操作。
切换到 YJXT PDB:
alter session set container=yjxt;
再次确认当前 PDB:
show pdbs;
结果显示当前会话已进入:
YJXT READ WRITE
至此,后续所有表空间查询和扩容操作均在 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 磁盘组剩余空间,避免盲目扩容。
执行:
set lines 200
col name for a15
select
name,
total_mb,
free_mb,
round(free_mb / total_mb * 100, 2) as free_pct
from v$asm_diskgroup
where name = 'DATA';
查询结果:
| 磁盘组 | 总空间 MB | 剩余空间 MB | 剩余比例 |
|---|---|---|---|
| DATA | 35,163,072 | 26,932,280 | 76.59% |
结论:+DATA 剩余空间约 25.69TB,空间充足,满足本次扩容条件。
六、判断是否可以扩大原数据文件
扩容前需要判断目标表空间的数据文件是否还可以继续扩大。
执行以下 SQL:
set lines 260 pages 200
col tablespace_name for a20
col file_name for a90
col autoextensible for a15
select
tablespace_name,
file_id,
file_name,
round(bytes/1024/1024) as size_mb,
autoextensible,
round(maxbytes/1024/1024) as max_mb,
round(increment_by * (select value from v$parameter where name = 'db_block_size') / 1024 / 1024) as next_mb
from dba_data_files
where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL')
order by tablespace_name, file_id;
这个 SQL 后续可以复用,只需要替换表空间名称即可。
例如只查一个表空间:
where tablespace_name = 'DS_TXYX'
查询多个表空间:
where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL')
判断原则如下:
| 判断条件 | 处理方式 |
|---|---|
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 原数据文件还未达到最大值,可以直接扩大原数据文件,不需要新增数据文件。
执行扩容:
alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_txyx.321.1230565079'
resize 20G;
执行结果:
Database altered.
扩容后验证:
| 表空间 | 总大小 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 单文件上限,继续只依赖原文件扩展不够稳妥,因此采用新增数据文件方式。
第一次新增数据文件:
alter tablespace DS_ZTFW
add datafile '+DATA'
size 20G
autoextend on
next 1G
maxsize 32767M;
执行结果:
Tablespace altered.
第二次新增数据文件:
alter tablespace DS_ZTFW
add datafile '+DATA'
size 20G
autoextend on
next 1G
maxsize 32767M;
执行结果:
Tablespace altered.
本次为 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 原数据文件未达到最大值,可以直接扩大原数据文件。
执行扩容:
alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_ggmk.329.1230565067'
resize 24G;
执行结果:
Database altered.
扩容后验证:
| 表空间 | 总大小 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 原数据文件未达到最大值,可以直接扩大原数据文件。
执行扩容:
alter database datafile '+DATA/ERPCDB/4F6774285AAC51A9E0630B0D010A2BD1/DATAFILE/ds_pxnl.328.1230565061'
resize 24G;
执行结果:
Database altered.
扩容后验证:
| 表空间 | 总大小 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 验证目标表空间使用率:
select
df.tablespace_name,
round(df.total_mb, 0) as total_mb,
round(df.total_mb - fs.free_mb, 0) as used_mb,
round(fs.free_mb, 0) as free_mb,
round((df.total_mb - fs.free_mb) / df.total_mb * 100, 2) as pct_used
from
(select tablespace_name, sum(bytes)/1024/1024 total_mb
from dba_data_files
where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL')
group by tablespace_name) df
left join
(select tablespace_name, sum(bytes)/1024/1024 free_mb
from dba_free_space
where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL')
group by tablespace_name) fs
on df.tablespace_name = fs.tablespace_name
order by pct_used desc;
也可以再次查看数据文件情况:
select
tablespace_name,
file_id,
file_name,
round(bytes/1024/1024) as size_mb,
autoextensible,
round(maxbytes/1024/1024) as max_mb
from dba_data_files
where tablespace_name in ('DS_ZTFW','DS_TXYX','DS_GGMK','DS_PXNL')
order by tablespace_name, file_id;
十、最终结论
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 表空间使用率均已明显下降,当前状态正常。