高可用 & 容灾13 分钟阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 上周给客户巡检的时候,发现有一套 Oracle RAC 11GR2 数据库的 ASM 磁盘使用率 99.9% 了,来不及扩容了,需
2025年3月17日阅读—点赞—收藏—
oraclerac
在知识库中专注阅读,并随时返回相关工具与课程
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 上周给客户巡检的时候,发现有一套 Oracle RAC 11GR2 数据库的 ASM 磁盘使用率 99.9% 了,来不及扩容了,需
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。

本章目标:掌握本章核心知识点 前置要求:完成前序章节学习 预计时长:60 分钟
上周给客户巡检的时候,发现有一套 Oracle RAC 11GR2 数据库的 ASM 磁盘使用率 99.9% 了,来不及扩容了,需要紧急处理,遇到这种情况你会怎么做?

可以看到目前 DATA 磁盘组可使用的空间仅剩 196M,好在还有一个 DATA1 磁盘组可用空间比较充足。好在还有一个 DATA1 磁盘组,大概想到了如下紧急在线处理的思路(数据库无法停机),:
本文记录一下处理步骤,分享给大家一起学习。
首先需要查看一下 DATA 磁盘组中是否存在临时表空间和在线重做日志文件,这里分享一个可以查看 ASM 磁盘组使用情况的脚本 asmdu.sh:
1cat<<-\EOF>asmdu.sh2#!/bin/bash3#4# du of each subdirectory in a directory for ASM5#6D=$17 8if [[ -z $D ]]9then10 echo "Please provide a directory !"11 exit 112fi13 14(for DIR in `asmcmd ls ${D}`15 do16 echo ${DIR} `asmcmd du ${D}/${DIR} | tail -1`17 done) | awk -v D="$D" ' BEGIN { printf("\n\t\t%40s\n\n", D " subdirectories size") ;18 printf("%25s%16s%16s\n", "Subdir", "Used MB", "Mirror MB") ;19 printf("%25s%16s%16s\n", "------", "-------", "---------") ;}20 {21 printf("%25s%16s%16s\n", $1, $2, $3) ;22 use += $2 ;23 mir += $3 ;24 }25 END { printf("\n\n%25s%16s%16s\n", "------", "-------", "---------");26 printf("%25s%16s%16s\n\n", "Total", use, mir) ;} '27EOF28chmod +x asmdu.sh快速查看了一下 DATA 磁盘组的使用情况:
1[grid@luciferdb1 ~]$ ./asmdu.sh +DATA/MESDB23 +DATA/MESDB subdirectories size45 Subdir Used MB Mirror MB6 ------ ------- ---------7....8 ONLINELOG/ 15390 153909 TEMPFILE/ 7904 790410....可以看到临时表空间和在线重做日志存放在 DATA 磁盘组中,那就可以按照之前的思路开始操作。
为了防止空间再次减少,需要第一时间将数据文件和临时文件的自动扩展关闭:
1-- 脚本一键获取关闭自动扩展的命令2SQL> set line222 pages10003select 'alter database datafile ''' || file_name || ''' autoextend off;' from dba_data_files where AUTOEXTENSIBLE='YES' and file_name like '+DATA/%'4union5select 'alter database tempfile ''' || file_name || ''' autoextend off;' from dba_temp_files where AUTOEXTENSIBLE='YES' and file_name like '+DATA/%';使用以上输出的结果即可一键关闭已开启自动扩展的数据文件和临时文件。
重建临时表空间可以在线执行:
1-- 查看当前默认临时表空间(如果有临时表空间组,需要针对组进行删除)2SQL> select * from dba_tablespace_groups;34SQL> col PROPERTY_NAME for a305col PROPERTY_VALUE for a206SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';78PROPERTY_NAME PROPERTY_VALUE9------------------------------ --------------------10DEFAULT_TEMP_TABLESPACE MESTEMP1112-- 记录原始表空间文件13SQL> col file_name for a10014select file_name from dba_temp_files where tablespace_name in ('MESTEMP');1516FILE_NAME17----------------------------------------------------------------------------------------------------18+DATA/mesdb/tempfile/mestemp.4603.95959466519+DATA/mesdb/tempfile/mestemp.2634.94181843920+DATA/mesdb/tempfile/mestemp.4606.9600557832122SQL> select name from v$tempfile;2324NAME25------------------------------------------------------------26+DATA/mesdb/tempfile/temp.271.87918897527+DATA/mesdb/tempfile/mestemp.4603.95959466528+DATA/mesdb/tempfile/temp.2328.94155043329+DATA/mesdb/tempfile/mestemp.2634.94181843930+DATA/mesdb/tempfile/mestemp.4606.96005578331+DATA/mesdb/tempfile/temp.4320.104098341532+DATA/mesdb/tempfile/temp.4433.10409836473334-- 创建临时的临时表空间 tempdata35create temporary tablespace tempdata tempfile '+DATA1' size 1G autoextend on;36alter tablespace tempdata add tempfile '+DATA1' size 1g autoextend on;3738-- 切换默认临时表空间为临时的临时表空间39alter database default temporary tablespace tempdata;4041-- 删除原始临时表空间 MESTEMP42drop tablespace MESTEMP including contents and datafiles cascade constraints;4344-- kill 掉占用原始临时表空间的会话45select 'alter system kill session ''' || a.sid || ',' || a.serial# || ''' immediate;'46 from v$session a, v$sort_usage srt47 where a.saddr = srt.session_addr48 and srt.tablespace = 'MESTEMP'49 order by srt.tablespace, srt.segfile#, srt.segblk#, srt.blocks;5051-- 重建原始临时表空间 MESTEMP52create temporary tablespace MESTEMP tempfile '+DATA1' size 1G autoextend on;5354-- 新增临时表空间 MESTEMP 数据文件(根据原始临时表空间文件数量来新增)55alter tablespace MESTEMP add tempfile '+DATA1' size 1g autoextend on;56alter tablespace MESTEMP add tempfile '+DATA1' size 1g autoextend on;57alter tablespace MESTEMP add tempfile '+DATA1' size 1g autoextend on;5859-- 切换默认临时表空间为原始临时表空间 MESTEMP60alter database default temporary tablespace MESTEMP;6162--删除临时表空间63drop tablespace tempdata including contents and datafiles cascade constraints;6465-- 检查默认临时表空间以及文件路径66SQL> col PROPERTY_NAME for a3067col PROPERTY_VALUE for a2068SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';6970PROPERTY_NAME PROPERTY_VALUE71------------------------------ --------------------72DEFAULT_TEMP_TABLESPACE MESTEMP7374-- 再次查看临时表空间文件是否成功切换到 DATA1 磁盘组下75SQL> col file_name for a10076select file_name from dba_temp_files where tablespace_name in ('MESTEMP');7778FILE_NAME79----------------------------------------------------------------------------------------------------80+DATA1/mesdb/tempfile/mestemp.2678.119564664781+DATA1/mesdb/tempfile/mestemp.2622.119564670382+DATA1/mesdb/tempfile/mestemp.2576.119564670583+DATA1/mesdb/tempfile/mestemp.2717.1195646707可以看到临时表空间文件路径已经切换。
在线重做日志文件在线重建也比较简单:
1-- 查看在线日志2SQL> set line2222 pages10003select * from v$log;45 GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME6---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------7 1 1 424169 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-258 2 1 424168 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-259 3 2 418545 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2510 4 2 418543 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2511 5 1 424170 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2512 6 1 424171 52428800 512 2 NO CURRENT 4.5454E+10 13-MAR-25 2.8147E+1413 7 2 418544 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2514 8 2 418546 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2515 9 1 424167 52428800 512 2 YES ACTIVE 4.5454E+10 13-MAR-25 4.5454E+10 13-MAR-2516 10 2 418547 52428800 512 2 NO CURRENT 4.5454E+10 13-MAR-25 2.8147E+14171810 rows selected.1920-- 新增临时在线日志21SQL> alter database add logfile thread 1 22group 100 size 1G,23group 101 size 1G;2425alter database add logfile thread 2 26group 200 size 1G,27group 201 size 1G;2829-- 切换日志30alter system archive log current;31alter system checkpoint;3233-- 删掉错误路径的日志文件(确保日志状态为 INACTIVE)34SQL> alter database drop logfile group 1;35alter database drop logfile group 2;36alter database drop logfile group 3;37alter database drop logfile group 4;38alter database drop logfile group 5;39alter database drop logfile group 6;40alter database drop logfile group 7;41alter database drop logfile group 8;42alter database drop logfile group 9;43alter database drop logfile group 10;4445-- 重新添加在线日志(刚删除的)46SQL> alter database add logfile thread 1 47group 1 size 1G,48group 2 size 1G,49group 3 size 1G,50group 4 size 1G,51group 5 size 1G;5253alter database add logfile thread 2 54group 6 size 1G,55group 7 size 1G,56group 8 size 1G,57group 9 size 1G,58group 10 size 1G;5960-- 删除临时在线日志(确保日志状态为 INACTIVE)61SQL> alter database drop logfile group 200;62alter database drop logfile group 201;63alter database drop logfile group 100;64alter database drop logfile group 101;6566-- 再次查看在线日志67SQL> col member for a10068select * from v$log;6970 GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME71---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------72 1 1 424173 1073741824 512 2 NO CURRENT 4.5454E+10 13-MAR-25 2.8147E+1473 2 1 0 1073741824 512 2 YES UNUSED 0 074 3 1 0 1073741824 512 2 YES UNUSED 0 075 4 1 0 1073741824 512 2 YES UNUSED 0 076 5 1 0 1073741824 512 2 YES UNUSED 0 077 6 2 418549 1073741824 512 2 NO CURRENT 4.5454E+10 13-MAR-25 2.8147E+1478 7 2 0 1073741824 512 2 YES UNUSED 0 079 8 2 0 1073741824 512 2 YES UNUSED 0 080 9 2 0 1073741824 512 2 YES UNUSED 0 081 10 2 0 1073741824 512 2 YES UNUSED 0 0828310 rows selected.可以看到在线日志的路径已经切换到新的目录。经过以上处理之后,再次查看 DATA 磁盘组的使用情况:

可以看到 DATA 磁盘组的可用空间为 94G 左右,问题已经解决。
其实回溯一下这个问题,为什么磁盘组使用到剩余可用 196M 时在巡检时被发现呢?


数据库问题还是要重视起来!好了,本次分享就到这了~
