数据库缩小表空间一例

转载 2013年12月03日 22:49:09
案例环境:
今天启动应用程序,程序报错如下:
ExceptionMessage=ORA-01653: 表 HBXNB_CS.BZ29 无法通过 1024 (在表空间 USERS 中) 扩展
ORA-06512: 在 "HBXNB_CS.DBMS_CONTEXT", line 40
ORA-01653: 表 HBXNB_CS.BZ29 无法通过 1024 (在表空间 USERS 中) 扩展
ORA-06512: 在 "HBXNB_CS.DBMS_CONTEXT", line 146
ORA-06512: 在 line 1

解决过程:

1、表空间USERS无法自动扩展,说明磁盘不能分配新的空间,是遇到了操作系统最大文件大小的限制?还是磁盘没有空间了?
    当然磁盘没有空间是最常见的情况,快速查看操作系统磁盘空间使用情况。
SQL< !df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda1              31G   30G   42M 100% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm

2、OK,磁盘使用已100%,下面的问题就是释放磁盘表空间,先查看表空间的使用情况。
    通过继续查看各个表空间,发现很多用户都公用USERS表空间,导致USERS表空间一直处于自动增长状态,这会成为影响数据库性能的瓶颈。

    解决这个自动增长问题的最佳思路是,新建表空间,然后把各个用户分别move出去。但由于目前磁盘空间没有,并且exp/imp非常麻烦,采取了最不好的处理方式,收缩别的表空间大小,然后为USERS所用,把问题留到了日后。

3、下面是收缩表空间的处理方式:
SELECT a.file_id,
       a.file_name,
       a.filesize,
       b.freesize,
       (a.filesize - b.freesize) usedsize,
       c.hwmsize,
       c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,
       a.filesize - c.hwmsize canshrinksize
  FROM (SELECT file_id, file_name, round(bytes / 1024 / 1024) filesize FROM dba_data_files) a,
       (SELECT file_id, round(SUM(dfs.bytes) / 1024 / 1024) freesize FROM dba_free_space dfs GROUP BY file_id) b,
       (SELECT file_id, round(MAX(block_id) * 8 / 1024) HWMsize FROM dba_extents GROUP BY file_id) c
 WHERE a.file_id = b.file_id
   AND a.file_id = c.file_id
 ORDER BY unsedsize_belowhwm DESC;

5 /opt/oracle/oradata/orcl/HXPT.dbf       10000 5974 4026  6043  2017  3957
3 /opt/oracle/oradata/orcl/sysaux01.dbf  390    8      382    384   2       6
1 /opt/oracle/oradata/orcl/system01.dbf  540    9      531    531   0       9
2 /opt/oracle/oradata/orcl/undotbs01.dbf 1655  1628  27     889   862    766
4 /opt/oracle/oradata/orcl/users01.dbf    7511   3131  4380 7509  3129   2

结果说明:
File_id : 文件编号
File_name: 文件名称
File_size: 数据文件占用磁盘空间大小
Freesize:文件中被标记为free的空间大小
Usedsize: 使用的空间大小。
Hwmsize: 已经分配出去的空间大小,如果希望通过alter database datafile … resize integerM回收空间,将需要这个值作为参考,不能回收到这个值之下,否则会报错。
Freee_belowhwm_size: 在HWM(高水位标记线之下的空闲空间数),这个是理论上的可以回收的空间大小。
Curr_can_shrink: 这个是实际大小与HWM标记之间的差,就是还没有分配出去的空间大小。
Oracle数据库的体系结构包括物理存储结构和逻辑存储结构。由于它们是相分离的,所以在管理数据的物理存储结构时并不会影响对逻辑存储结构的存取


4、SQL< alter database datafile 5 resize 7000M;            
数据库已更改。

问题暂时解决。

总结:

DBA需要认真规划数据库,随便导入用户的结果会导致日后的大麻烦。

Oracle 如何将已经扩充的表空间缩小

在Oracle中,经常有这样的情况,由于误操作,使某个表空间过大。
  • llwinnner
  • llwinnner
  • 2014年08月18日 15:16
  • 6217

数据库缩小表空间

案例环境: 今天启动应用程序,程序报错如下: ExceptionMessage=ORA-01653: 表 HBXNB_CS.BZ29 无法通过 1024 (在表空间 USERS 中) 扩展 OR...
  • xyz846
  • xyz846
  • 2011年08月13日 19:06
  • 568

收缩undo表空间

通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。或者是在指定了自动扩展及其最大值而月底或年末的批量数据计...
  • robinson_0612
  • robinson_0612
  • 2013年10月27日 21:01
  • 4933

扩展或缩小undo表空间

***********************************************声明***************************************************...
  • huangyanlong
  • huangyanlong
  • 2014年10月09日 18:09
  • 4134

DB2如何调整表空间大小实例解析篇

DB2如何调整表空间大小实例解析篇刚刚接到客户那边打的电话,程序一直报错,所有的业务都做不了,拷贝了一份应用服务器(weblogic)的日志,日志里显示:WARN : 2009-06-18 16:24...
  • emilyzhang98
  • emilyzhang98
  • 2009年12月18日 15:07
  • 5468

如何缩小undo表空间的大小

一. 查出数据库当前的undo表空间和数据文件 SELECT a.name, b.name FROM v$tablespace a, v$datafile b WHERE a.name = (...
  • yfleng2002
  • yfleng2002
  • 2012年03月15日 11:16
  • 2763

oracle减小数据库表空间

数据库表空间占用过大,缩减表空间大小。 1、首先确认表空间,空闲空间比例比较大。 SELECT C.TABLESPACE_NAME,A.BYTES/1048576 MEGS_TOTAL,(A.BYTE...
  • okgoodyes
  • okgoodyes
  • 2015年09月27日 13:15
  • 1719

ORACLE MOVE表空间

move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效(LOB类型例外)。做表空间转移之前,被转移表的用户必须在目的表空间上有使用表空间的权限,否则会报错:ORA-01950: no ...
  • huaishu
  • huaishu
  • 2013年12月05日 17:39
  • 994

mysql5.7在线收缩undo表空间

mysql5.5 在mysql5.5和之前,innodb的undo log是存放在ibdata1(共享表空间)中,当开启事务后,事务所使用的undo log会存放在ibdata1中,即使这个事务被关...
  • jh993627471
  • jh993627471
  • 2018年01月15日 14:48
  • 16

system表空间用满解决办法

早上看到alert日志报说system表空间快满了(oracle版本是11gR2):   如果system表空间不是自动扩展,空间用满甚至会出现数据库无法登陆。使用任何用户登录均报出异常。    ...
  • qq_33232807
  • qq_33232807
  • 2016年06月23日 18:39
  • 1005
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库缩小表空间一例
举报原因:
原因补充:

(最多只允许输入30个字)