首先介绍一下项目背景,这是一个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操作的,不难,很大的数据量,备份了将近七天左右,还原了三天左右。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。