【解决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表空间满的问题,尽量不重建表空间,节省时间和空间,效率最高。


数据运维技术 » 【解决Oracle表空间满的良方】(oracle表空间满)