当前位置:   article > 正文

【DBA笔记3】Oracle之表空间使用率满及空间不足解决方案(上)_oracle 表空间自动扩展还报空间不足

oracle 表空间自动扩展还报空间不足

目录

问题背景:

问题描述:

解决方案:

操作步骤:

一、查询对应表空间使用情况

二、修改对应表空间 


问题背景:

有项目上出现前台业务功能报错,怀疑是数据库GS表空间满

ORA-01653:unable to extend table GSP### by 7 in tablespace GS

问题描述:

错误的具体内容如下:
ORA-01653: unable to extend table GSP###  by 7 in tablespace GS
翻译:GSP###表在GS表空间不能扩展,应该是表空间不足导致。

原因:

一:表空间的自动扩展功能没有开;

二:表空间自动扩展开了,但是数据文件已自动扩展到上限,最大32G

三:服务器磁盘空间不够用了,数据文件所在的磁盘目录下没有空间了

解决方案:

先查看Oracle数据库表空间大小,然后看一下表空间下的所有的数据文件的自动扩展功能是否打开;若已经打开了看是不是达到了自动扩展的上限,若上限了需要增加数据文件,若没上限那么我们就需要扩大表空间。

操作步骤:

一、查询对应表空间使用情况

 查询表空间使用情况,该sql无需修改

  1. SELECT a.tablespace_name "表空间名",
  2. a.bytes / 1024 / 1024 "表空间大小(M)",
  3. (a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)",
  4. b.bytes / 1024 / 1024 "空闲空间(M)",
  5. round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
  6. FROM (SELECT tablespace_name, sum(bytes) bytes
  7. FROM dba_data_files
  8. GROUP BY tablespace_name) a,
  9. (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
  10. FROM dba_free_space
  11. GROUP BY tablespace_name) b
  12. WHERE a.tablespace_name = b.tablespace_name
  13. ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC

 发现GSP## 表空间使用比为99.99%(>90%),继续查看该表空间有几个数据文件,该sql需要改tablespace_name

  1. SELECT file_name,
  2. tablespace_name,
  3. bytes / 1024 / 1024 "bytes MB",
  4. maxbytes / 1024 / 1024 "maxbytes MB"
  5. FROM dba_data_files
  6. WHERE tablespace_name = '表空间名称';

 继续查询是否是自动扩展,改tablespace_name

  1. SELECT file_id, file_name, tablespace_name, autoextensible, increment_by
  2. FROM dba_data_files
  3. WHERE tablespace_name = '表空间名称'
  4. ORDER BY file_id desc;

 autoextensible"列对应的值是YES还是NO,若是NO,说明该表空间的自动扩展功能没有开,改成YES就可以了。

二、修改对应表空间 

 
之后有两种改法:一种是增大数据文件大小,一种是增加数据文件数量。

第一种方法:增大数据文件大小

首先找出该表空间对应的数据文件及全路径,该路径对应FILE_NAME字段。

SELECT * FROM dba_data_files t WHERE t.tablespace_name='表空间名称';

修改文件大小 

alter database datafile '全路径的数据文件名称' resize ***M;

第二种方法:增加数据文件数量 

首先要确认再增加一个数据文件,磁盘空间是否足够

 【用操作系统UNIX、Linux中的df -g命令(查看下可以使用的磁盘空间大小)】
新增一个数据文件,全路径的数据文件名称为该新增数据文件的全路径文件名称。大小为***M,自动扩展功能打开,且该数据文件的最大扩展值为30G。

  1. alter tablespace 表空间名称 add datafile '全路径的数据文件名称' size 25000M
  2. autoextend on maxsize 30G;

 验证已经增加的数据文件,现在应看到GS表空间下有新建的数据文件,且GS表空间使用占比降了下来了。

  1. SELECT file_name, file_id, tablespace_name
  2. FROM dba_data_files
  3. WHERE tablespace_name = '表空间名称'

到这里问题应该已经解决,再回头去验证前端功能就可以了。

PS:分享一些自己总结的关于表空间比较实用的几个sql,下节分享下通过job任务自动增加数据文件的方案

  1. --查看现所有表空间使用率(包含临时表空间)
  2. select * from (
  3. Select a.tablespace_name,
  4. (a.bytes- b.bytes) "表空间使用大小(BYTE)",
  5. a.bytes/(1024*1024*1024) "表空间大小(GB)",
  6. b.bytes/(1024*1024*1024) "表空间剩余大小(GB)",
  7. (a.bytes- b.bytes)/(1024*1024*1024) "表空间使用大小(GB)",
  8. to_char((1 - b.bytes/a.bytes)*100,'99.99999') || '%' "使用率"
  9. from (select tablespace_name,
  10. sum(bytes) bytes
  11. from dba_data_files
  12. group by tablespace_name) a,
  13. (select tablespace_name,
  14. sum(bytes) bytes
  15. from dba_free_space
  16. group by tablespace_name) b
  17. where a.tablespace_name = b.tablespace_name
  18. union all
  19. select c.tablespace_name,
  20. d.bytes_used "表空间使用大小(BYTE)",
  21. c.bytes/(1024*1024*1024) "表空间大小(GB)",
  22. (c.bytes-d.bytes_used)/(1024*1024*1024) "表空间剩余大小(GB)",
  23. d.bytes_used/(1024*1024*1024) "表空间使用大小(GB)",
  24. to_char(d.bytes_used*100/c.bytes,'99.99999') || '%' "使用率"
  25. from
  26. (select tablespace_name,sum(bytes) bytes
  27. from dba_temp_files group by tablespace_name) c,
  28. (select tablespace_name,sum(bytes_cached) bytes_used
  29. from v$temp_extent_pool group by tablespace_name) d
  30. where c.tablespace_name = d.tablespace_name
  31. )
  32. order by tablespace_name;
  33. --查询现所有表空间文件存放目录,file_name 就是文件存放路径
  34. select b.file_id,b.file_name 数据文件路径,
  35. b.tablespace_name 表空间名称,
  36. b.autoextensible,
  37. b.bytes / 1024 / 1024 大小M,
  38. (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M,
  39. substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) 利用率
  40. from dba_free_space a, dba_data_files b
  41. where a.file_id = b.file_id
  42. group by b.file_id,b.tablespace_name, b.file_name, b.bytes,b.autoextensible
  43. order by b.file_id;
  44. --单纯删除表空间
  45. drop tablespace 表空间名称;
  46. --删除表空间及内容(表空间名称要大写)
  47. drop tablespace "表空间名称" including contents;
  48. --完全删除(表空间 + 数据文件)
  49. drop tablespace "表空间名称" including contents and datafiles cascade constraints;
  50. --创建表空间
  51. create tablespace 表空间名称
  52. logging
  53. datafile '数据文件路径'
  54. size 25000m
  55. autoextend on
  56. next 100m maxsize 30000m
  57. extent management local;
  58. --更改表空间数据文件大小及设置自动扩展
  59. alter database datafile 原数据文件路径 autoextend on;
  60. alter database datafile 原数据文件路径 resize 1024M;
  61. --为表空间增加新的数据文件并设置自动扩展(表空间满32G后不能再自动扩展)
  62. alter tablespace '表空间名称' add datafile '新数据文件路径' size 1000m autoextend on next 100m;
  63. --查看当前数据库默认临时表空间:
  64. select * from database_properties
  65. where property_name='DEFAULT_TEMP_TABLESPACE';
  66. --获取当时创建某一表空间的语句
  67. SELECT dbms_metadata.get_ddl('TABLESPACE', '表空间名称') FROM dual;
  68. --为TEMP临时表空间增加新的数据文件并设置自动扩展
  69. alter tablespace TEMP add tempfile '/****' size 1000m autoextend on next 100m;


 


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/967418
推荐阅读
相关标签
  

闽ICP备14008679号