首先介绍一下项目背景,这是一个java的后端平台,运行在win2008server平台上,主要存图片和视频的,占空间比较大,Oracle数据库(你懂的,崩溃的节奏)。
一张图片表主要用于存储blob类型的图片数据,硬盘中共也就800G,发现单个表空间数据文件增长到30G左右,硬盘就剩下30G左右的空间,马上就要爆表了,领导很是着急,催的特别急,无奈我是一脸懵逼,也没有详细的记录文档,每张表都不知道干嘛的。
最后通过请教当年写项目的大佬,得到方案,备份一年的数据,truncate表,直接删除表空间,然后重新建立表空间,下面记录了一些当时的用的sql语句。

查看各个表空间大小
        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操作的,不难,很大的数据量,备份了将近七天左右,还原了三天左右。