首先介绍一下项目背景,这是一个java的后端平台,运行在win2008server平台上,主要存图片和视频的,占空间比较大,Oracle数据库(你懂的,崩溃的节奏)。
一张图片表主要用于存储blob类型的图片数据,硬盘中共也就800G,发现单个表空间数据文件增加到30G左右,硬盘就剩下30G左右的空间,立刻就要爆表了,领导非常着急,催的特别急,无奈我是一脸懵逼,也没有详细的记录文档,每张表都不知道干吗的。
最后经过请教当年写项目的大佬,获得方案,备份一年的数据,truncate表,直接删除表空间,而后从新创建表空间,下面记录了一些当时的用的sql语句。 java
查看各个表空间大小 select a.tablespace_name, round(a.total_size) "total_size(MB)", round(a.total_size)-round(b.free_size,3) "used_size(MB)", round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate from ( select tablespace_name, sum(bytes)/1024/1024 total_size from dba_data_files group by tablespace_name ) a, ( select tablespace_name, sum(bytes)/1024/1024 free_size from dba_free_space group by tablespace_name ) b where a.tablespace_name = b.tablespace_name(+); 查看表空间 select tablespace_name,file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name select file_name,autoextensible,increment_by from dba_data_files where tablespace_name='表空间名称' 清空数据 有可能表空间仍没有释放,能够使用以下语句: truncate table pecprocesspic alter table pecprocesspic deallocate UNUSED KEEP 0; 删除表空间,删除无任何数据对象的表空间 drop tablespace wz_img 删除有任何数据对象的表空间(操做需谨慎,必须备份好数据!) drop tablespace wz_img including contents and datafiles; 建立表空间 create tablespace 表空间名称 datafile 'D:\app\Administrator\oradata\orcl\表空间文件名称.ora' size 512m autoextend on next 256m maxsize unlimited; 添加表空间文件 alter tablespace 表空间文件 add datafile 'D:\app\Administrator\oradata\orcl\表空间文件名称.ora' size 512m autoextend on next 256m maxsize unlimited; 这是一些重要的sql语句,其余的备份还原就不写了,都是经过pl/sql操做的,不难,很大的数据量,备份了将近七天左右,还原了三天左右。