
oracle数据库中,删除了大量数据后,表空间的大小怎么没变大
4个回答
展开全部
你是说表空间当前的占用大小吧,数据量增加占用就越大,删除了数据占用就变小。但是总的表空间是不变的,单表空间占用过大或不够时可以清理或者扩充。
展开全部
删除数据为什么表空间的大小要变大?表空间大小不是事先定义好的么?如果你增加数据他可以自动扩大, 但是删除数据能扩大么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用下面的语句查询去,表空间可以设置为自动增大,但是从来没听说过自动缩小。只不过你删除了大量的数据库后,表空间的空闲空间会增大。
相当于磁盘一样,磁盘就1T,你删除了900G的AV,你的磁盘实际也还是1T,只不过,你可以再放900G的新AV进去。
SELECTUPPER(F.TABLESPACE_NAME) "表空间名",
TOT_GROOTTE_MB "表空间大小(MB)",
TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB* 100,2),'990.99') || '%' "使用比",
TOTAL_BYTES "空闲空间(M)",
MAX_BYTES "最大块(MB)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1;
相当于磁盘一样,磁盘就1T,你删除了900G的AV,你的磁盘实际也还是1T,只不过,你可以再放900G的新AV进去。
SELECTUPPER(F.TABLESPACE_NAME) "表空间名",
TOT_GROOTTE_MB "表空间大小(MB)",
TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB* 100,2),'990.99') || '%' "使用比",
TOTAL_BYTES "空闲空间(M)",
MAX_BYTES "最大块(MB)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1;
追问
就是它的空闲空间没有增大,是什么原因,
追答
那你查看各对象占用情况啊,下列语句可以查询到·····
Select Segment_Name "段名",Segment_Type "段类型",TableSpace_Name "表空间",Sum(bytes)/1024/1024 "空间占用(MB)" From User_Extents
Group By Segment_Type,Segment_Name,TableSpace_Name order by Sum(bytes)/1024/1024 desc
提交回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据是存放在数据文件中的,不是直接写在物理硬盘上,数据文件是无法自动缩小的,分配了多大就是多大,用下面的sql可以查出表空间的具体使用情况,删了大量数据后应该有一个或几个表空间出现大量空闲。
SELECT T.TABLESPACE_NAME,
TO_CHAR(NVL(T.USER_BYTES / 1024 / 1024, 0), '99,999,990.900') "Size (M)",
TO_CHAR(NVL(T.BYTES / 1024 / 1024, 0), '99,999,990.900') "Used (M)"
FROM DBA_DATA_FILES T
如果想要释放的话就把空间利用率不高的表空间备份一下,然后干掉重建成合适的size,再重新导入,dump方式有这种针对表空间的操作。这种需求比较鬼畜,很麻烦,干掉表空间的时候还要注意off line什么的,我也没玩过,只能说祝你好运吧。
SELECT T.TABLESPACE_NAME,
TO_CHAR(NVL(T.USER_BYTES / 1024 / 1024, 0), '99,999,990.900') "Size (M)",
TO_CHAR(NVL(T.BYTES / 1024 / 1024, 0), '99,999,990.900') "Used (M)"
FROM DBA_DATA_FILES T
如果想要释放的话就把空间利用率不高的表空间备份一下,然后干掉重建成合适的size,再重新导入,dump方式有这种针对表空间的操作。这种需求比较鬼畜,很麻烦,干掉表空间的时候还要注意off line什么的,我也没玩过,只能说祝你好运吧。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询