【解决Oracle表空间满的良方】(oracle表空间满)
Oracle表空间满,一个相对比较老牌的数据库,常见的的解决方案是重建表空间,加大表空间大小,但是以下是一些小技巧,可以在不重建表空间情况下,解决Oracle表空间满的问题。
一、索引空间复用
Oracle使用在一个表中只能使用一个索引空间,但是可以将多个表放在一个索引空间中,做到多张表共同利用一个索引空间。具体如下SQL:
SQL>create tablespace xx INV_TBS DATAFILE
initial 2m; –创建一个2M的表空间
SQL>Create Table A
(id number)
Tablespace INV_TBS; — 将表A创建到INV_TBS表空间中去
SQL>Create Index A_IND
ON A (id)
Tablespace INV_TBS;–将索引A的索引也创建到INV_TBS表空间中去
SQL>Create Table B
(name Varchar2(50))
Tablespace INV_TBS;–将B表也创建到 INV_TBS表空间中去
SQL>Create Index B_IND
ON B(name)
Tablespace INV_TBS;–索引B也创建到 INV_TBS表空间中去
二、数据文件分割
如果按照存储数据文件多了,可以考虑将数据文件分割,即将每一个数据文件分割成多个物理磁盘,并且在操作系统层面将这多个物理磁盘追加成一个大的逻辑磁盘。如果已有的数据文件多了,可以使用Oracle 11G和Oracle 12C中提供的Alter 指令,分割数据文件,具体实现如下:
SQL>Alter database datafile ‘/oracle/datafile1.dbf’ resize 2000M;- 将datafile1.dbf这个数据文件增加到2000M
SQL>Alter tablespace ss_data1 add datafile ‘/oracle/datafile2.dbf’ size 2000M autoextend on; —-增加datafile2.dbf
三、清理重建
如果对某个表空间有大量的空间,可以尝试重新优化下,比如清理掉老旧的索引,减少非必要的字段,将一些冗余数据删除,压缩冗余表空间,这样可以释放掉一些空间,释放掉表空间的无效字段,空间会变得比较干净,同时也会释放掉一定的空间,下面的SQL是实现的方式:
SQL> alter table user delete column activity; — 删除字段
SQL> Drop index Index_name; — 删除索引
SQL> analyze user validate structure; –结构验证,分析表结构
以上就是最常用的解决Oracle表空间满的良方,通过这一系列的操作,就可以解决Oracle表空间满的问题,尽量不重建表空间,节省时间和空间,效率最高。