RAC 环境下只需要在一个节点执行一次扩容就行不用两个节点都执行。适用场景Oracle RAC 双节点ASM 存储XX系统Smallfile Tablespace 架构0、扩容前先查当前表空间使用情况0.1 官方统一统计法DBA_TABLESPACE_USAGE_METRICS官方统一统计法DBA_TABLESPACE_USAGE_METRICS 1.1 方法一查所有表空间使用率 set lines 200 col tablespace_name for a20 col contents for a12 select m.tablespace_name, t.contents, round(m.used_space * t.block_size / 1024 / 1024 / 1024, 2) used_gb, round(m.tablespace_size * t.block_size / 1024 / 1024 / 1024, 2) size_gb, round(m.used_percent, 2) used_percent from dba_tablespace_usage_metrics m join dba_tablespaces t on m.tablespace_name t.tablespace_name order by used_percent desc; 1.2 方法二查所有表空间使用率 以下语句是表空间按最大可用容量口径算现在每一个用了多少、占比多少 set lines 200 pages 100 col tablespace_name for a30 col contents for a12 select m.tablespace_name, t.contents, round(m.used_space * t.block_size / 1024 / 1024, 2) used_mb, round(m.tablespace_size * t.block_size / 1024 / 1024, 2) tablespace_size_mb, round( case when m.tablespace_size 0 then 0 else m.used_space * 100 / m.tablespace_size end, 2 ) pct_used from dba_tablespace_usage_metrics m join dba_tablespaces t on m.tablespace_name t.tablespace_name order by pct_used desc; 查当前 PDB / 当前库已分配多少空间 set lines 200 select round(sum(bytes) / 1024 / 1024 / 1024, 2) as allocated_gb from dba_data_files;0.2 ODA厂家提供的查询语句CLEAR COLUMNS BREAKS COMPUTES SET ECHO OFF SET FEEDBACK ON SET HEADING ON SET LINESIZE 160 SET PAGESIZE 2000 SET TIMING OFF SET TRIMSPOOL ON SET VERIFY OFF CLEAR COLUMNS BREAKS COMPUTES COLUMN status FORMAT a9 HEADING Status COLUMN name FORMAT a30 HEADING TS. Name COLUMN type FORMAT a15 HEADING TS Type COLUMN extent_mgt FORMAT a10 HEADING Ext.Mgt. COLUMN segment_mgt FORMAT a10 HEADING Seg.Mgt. COLUMN ts_size FORMAT 999,999,999 HEADING TS.Size (MB) COLUMN used FORMAT 999,999,999 HEADING Used (MB) COLUMN free FORMAT 999,999,999 HEADING Free (MB) COLUMN pct_used FORMAT 999 HEADING Pct.Used COLUMN pct_free FORMAT 999 HEADING Pct.FREE BREAK ON report COMPUTE count OF type ON report COMPUTE sum OF ts_size ON report COMPUTE sum OF used ON report SELECT d.tablespace_name name , d.status status , d.contents type -- , d.extent_management extent_mgt , d.segment_space_management segment_mgt , NVL(a.bytes, 0)/1024/1024 ts_size , NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024 used , NVL(f.bytes, 0)/1024/1024 free , NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0) pct_used ,NVL(f.bytes/a.bytes*100,0) pct_free FROM sys.dba_tablespaces d , ( select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name ) a , ( select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name ) f WHERE d.tablespace_name a.tablespace_name() AND d.tablespace_name f.tablespace_name() AND NOT ( d.extent_management like LOCAL AND d.contents like TEMPORARY ) UNION ALL SELECT d.tablespace_name name , d.status status , d.contents type -- , d.extent_management extent_mgt , d.segment_space_management segment_mgt , NVL(a.bytes, 0)/1024/1024 ts_size , NVL(t.bytes, 0)/1024/1024 used , NVL(a.bytes - NVL(t.bytes,0), 0)/1024/1024 free , NVL(t.bytes / a.bytes * 100, 0) pct_used ,NVL((a.bytes - NVL(t.bytes,0))/a.bytes*100,0) pct_free FROM sys.dba_tablespaces d , ( select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name ) a , ( select tablespace_name, sum(bytes_cached) bytes from v$temp_extent_pool group by tablespace_name ) t WHERE d.tablespace_name a.tablespace_name() AND d.tablespace_name t.tablespace_name() AND d.extent_management like LOCAL AND d.contents like TEMPORARY ORDER BY 8 desc /一、扩容前先看“你还能扩多少”1. 查看 ASM DATA 盘库存总粮仓SELECT name, total_mb, free_mb, ROUND(free_mb/1024,2) free_gb FROM v$asm_diskgroup WHERE nameDATA;安全扩容规则指标要求ASM 剩余空间≥ 100GB 才允许扩单次扩容总量≤ 剩余空间的 20%Datafile 最大值不使用 UNLIMITED必须设置 MAXSIZE二、确定需要扩容的表空间SELECT tablespace_name, ROUND(used_percent,2) used_pct FROM dba_tablespace_usage_metrics WHERE used_percent 60;而且 ASM DATA 盘还剩将近800 GB的富余粮仓。扩容阈值建议Used%动作≥ 70%必须扩60–70%建议扩60%观察三、标准扩容模板通用版1️⃣ 系统级表空间SYSAUX ALTER TABLESPACE SYSAUX ADD DATAFILE DATA SIZE 5G AUTOEXTEND ON NEXT 512M MAXSIZE 32767M; 2️⃣ 业务表空间通用模板 ALTER TABLESPACE TABLESPACE_NAME ADD DATAFILE DATA SIZE 2G AUTOEXTEND ON NEXT 256M MAXSIZE 32767M; 例 ALTER TABLESPACE DS_GGMK ADD DATAFILE DATA SIZE 2G AUTOEXTEND ON NEXT 256M MAXSIZE 32767M; 3️⃣ USERS 表空间 ALTER TABLESPACE USERS ADD DATAFILE DATA SIZE 1G AUTOEXTEND ON NEXT 256M MAXSIZE 32767M; 4️⃣ TEMP 表空间 ALTER TABLESPACE TEMP ADD TEMPFILE DATA SIZE 20G AUTOEXTEND ON NEXT 1G MAXSIZE 32767M; 只有 BIGFILE 临时表空间的单个 tempfile 才能远超 32G你现在这个 YJXT 的 TEMP 是 smallfile 临时表空间单个 tempfile 基本就是 32G 左右上限。 ALTER TABLESPACE TEMP ADD TEMPFILE DATA SIZE 30G AUTOEXTEND ON NEXT 1G MAXSIZE 200G;3.1 已经创建出来的 datafile怎么调整大小如果 datafile 已经加了不能再改SIZE这条语句本身要用resize。先查文件名set lines 220 col file_name for a100 select file_id, tablespace_name, file_name, round(bytes/1024/1024/1024,2) size_gb, autoextensible, round(maxbytes/1024/1024/1024,2) max_gb from dba_data_files where tablespace_name 具体的表空间名 order by file_id;然后调整当前物理大小alter database datafile DATA/实际文件路径 resize 10G;或者直接扩到 32767Malter database datafile DATA/实际文件路径 resize 32767M;注意不能缩小到已使用空间以下否则会报错。四、扩容后验证SELECT tablespace_name, ROUND(used_percent,2) used_pct FROM dba_tablespace_usage_metrics ORDER BY used_percent DESC;表空间使用率SYSAUX13%DS_GGMK4%DS_TXYX2.6%DS_ZTFW2.2%DS_SCYF1.8%SYSTEM1.5%USERS0.6%目标 所有业务表空间回落到 70%表空间之前现在评价SYSAUX73%52%彻底脱离风险带DS_GGMK69%45%从悬崖边被你拉回来DS_TXYX60%35%直接进安全深水区USERS68%19%躺平级安全TEMP100%52%爆炸隐患已解除五、RAC 特别说明重点扩容只需在任意一个节点执行一次ASM 为共享存储两节点立即生效扩容过程不会锁表不影响业务如果你在两个节点都扩一次反而会多加两块 datafile搞成重复扩容。 两个 RAC 节点看到的是同一块 DATA 磁盘组 表空间 / datafile 是存放在 ASM 里的“共享文件” 你在任意一个节点新增 datafile ASM 会立刻把这块新空间同步给整个集群 另一个节点“秒级可见”无需任何额外操作你在哪扩结果yjxt1 节点扩yjxt2 自动生效yjxt2 节点扩yjxt1 自动生效扩一次全 RAC 生效