37181f5b015481216b2144cbc98e1a88.png

d7792f984c34f9c5338a70de7bbdf695.png

可以看到有两张表的insert受到了影响,都是在USERS表空间里。用以下SQL查看表空间使用情况:

SELECT a.tablespace_name "表空间名",a.bytes / 1024 / 1024 "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024"已使用空间(M)",

b.bytes/ 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"FROM (SELECT tablespace_name, sum(bytes) bytesFROM dba_data_files GROUP BYtablespace_name) a,

(SELECT tablespace_name, sum(bytes) bytes, max(bytes) largestFROMdba_free_spaceGROUP BYtablespace_name

) bWHERE a.tablespace_name =b.tablespace_nameORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

ef12e45714ceb3bf77367ded74e9bf90.png

可以看到USERS表空间已经使用了99.99%!马上就100%,再也没有地方存储数据了!正式环境啊!情况危急!

2)解决办法

--获取数据文件dbf路径

select tablespace_name, file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;

d28202b1921e489e24c260cc0dbe0f17.png

以下两种方案都需要获取/home目录下实际物理大小,我登录到linux数据库服务器后,使用du -sh命令查看了/home目录大小为250GB。

第一种解决方案:

可以看到USERS表空间总共有3个dbf(此时我已经增加了04.dbf),复制其中一个dbf路径 /home/oracle/oradata/users01.dbf,覆盖下面的datafile参数:

--新增加一个dbf文件,指定该dbf文件大小为32GB左右,并使其每次自动扩展1GB,并且没有最大限制

alter tablespace users add datafile ‘/home/oracle/oradata/users04.dbf‘ size 32760m autoextend on next1024m maxsize unlimited;--segment space management auto extent management local; 据说可以连接上一句一起执行(把上一句分号去掉即可),没执行,不知道执行效果,谨慎期间,慎用。

第二种解决方案:

--把原有的dbf数据文件大小调整(扩大)

alter database datafile ‘/home/oracle/oradata/users01.dbf‘ resize 61440M; --没试过,不知道效果

我用的是第一种解决方案,第二种没试过,不知道效果如何。

3)解决后效果

我用的第一种解决方案,增加了04.dbf,再次使用SQL查看表空间使用情况:

SELECT a.tablespace_name "表空间名",a.bytes / 1024 / 1024 "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024"已使用空间(M)",

b.bytes/ 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"FROM (SELECT tablespace_name, sum(bytes) bytesFROM dba_data_files GROUP BYtablespace_name) a,

(SELECT tablespace_name, sum(bytes) bytes, max(bytes) largestFROMdba_free_spaceGROUP BYtablespace_name

) bWHERE a.tablespace_name =b.tablespace_nameORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

9934658fdcd5de7c4699ec9813431f72.png

使用比已经从99.99%降低到69.42%,说明效果明显,方案可用。

再去查看/home,使用du -sh命令查看了/home目录大小为282GB。原来增加一个dbf文件会使得/home目录实际也增加32GB大小。

4)注意事项及所有用到的SQL

在上面的第一种解决方案里,32760m 约等于 32GB,根据最大块来算的,块计算SQL:

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB -F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),‘990.99‘) || ‘%‘"使用比",

F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"FROM (SELECTTABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROMSYS.DBA_FREE_SPACEGROUP BYTABLESPACE_NAME) F,

(SELECTDD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MBFROMSYS.DBA_DATA_FILES DDGROUP BYDD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME =F.TABLESPACE_NAMEORDER BY 1;

其它SQL语句完整贴上来如下:

---查询数据文件以及数据文件大小

select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order bytablespace_name;select username, default_tablespace, temporary_tablespace from dba_users;

--获取数据文件路径

select tablespace_name, file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order bytablespace_name;--让数据文件自动扩展

alter tablespace users add datafile ‘/home/oracle/oradata/users04.dbf‘ size 32760m autoextend on next1024m maxsize unlimited;--segment space management auto extent management local; 据说可以连接上一句一起执行(把上一句分号去掉即可),没执行,不知道执行效果,谨慎期间,慎用。--把数据文件大小调整

alter database datafile ‘/home/oracle/oradata/users01.dbf‘ resize 61440M; --没试过,不知道效果

oracle数据库报错ora-01653表空间扩展失败解决方案

标签:说明   获取   表空间   code   rom   扩展   截图   span   地方

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/zhuwenjoyce/p/7489794.html

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐