ODA运维实战:Oracle 19c YJXT PDB表空间在线扩容全过程_20260503

一、操作时间

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_GGMKDS_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 上完成业务表空间在线扩容处理。

本次操作遵循以下处理逻辑:

  1. 先登录 ODA 主机,切换 oracle 用户,并确认当前实例为 erpcdb1

  2. 使用 sqlplus / as sysdba 登录 CDB。

  3. 通过 show pdbs 确认 YJXT PDB 为 READ WRITE 状态。

  4. 使用 alter session set container=yjxt 进入 YJXT PDB。

  5. 查询表空间使用率,定位高使用率表空间。

  6. 查询 ASM +DATA 剩余空间,确认具备扩容条件。

  7. 查询数据文件大小、最大值和自动扩展状态。

  8. 对未达到单文件上限的数据文件,优先使用 resize 扩大原文件。

  9. 对已达到或接近单文件上限的表空间,采用新增数据文件方式。

  10. 扩容完成后再次验证表空间使用率,确认状态正常。

本次扩容后,DS_ZTFWDS_TXYXDS_GGMKDS_PXNL 表空间使用率均已明显下降,当前状态正常。

相关推荐
郝学胜-神的一滴1 小时前
跨平台动态库与头文件:从原理到命名的深度解析
linux·c++·程序人生·unix·cmake
BENA ceic1 小时前
Spring 的三种注入方式?
java·数据库·spring
2401_895521341 小时前
MySQL中的count函数
数据库·mysql
雪碧聊技术1 小时前
IO流-07:缓冲流
数据库
.小小陈.1 小时前
MySQL 入门到实战:从基础概念到核心存储引擎
数据库·mysql
IT邦德2 小时前
Oracle 26ai 首发季度补丁 23.26.2.0.0 来了!单机版升级
数据库·oracle
yyuuuzz2 小时前
aws 基础认知与实践注意点
运维·服务器·网络·云计算·github·aws
yoyo_zzm2 小时前
Laravel10.x新特性全解析
数据库·mysql·架构
Rust语言中文社区2 小时前
【Rust日报】2026-05-02 Temper - 用 Rust 编写的 Minecraft 服务器项目发布 0.1.0 版
运维·服务器·开发语言·后端·rust