网站首页 > 文章中心 > 其它

oracle如何收缩表

作者:小编 更新时间:2023-09-04 15:33:19 浏览量:176人看过

oracle数据库表空间占用太大,如何在不删除表的情况下缩小占用空间

alter table 表名 move和alter table 表名 shrink space都可以用来进行段收缩,降低高水位HWM,

也都可以用来消除行链接(Row Chaining)和行迁移(Row Migration),估计效果不明显,看你的数据库用途是干什么的(如果是数据仓库肯定是不明显的).

Oracle 删除表中记录 如何释放表及表空间大小

解决方案

执行

alter?table?jk_test?move

alter?table?jk_test?deallocate?unused

alter?table?jk_test?shrink?space.

注意:因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),所以执行 move 就需要重建索引.

找到表对应的索引

select?index_name,table_name,tablespace_name,index_type,status?from?dba_indexes?where?table_owner='SCOTT'

根据status 的值,重建无效的就行了.sql='alter index '||index_name||' rebuild'; 使用存储过程执行,稍微安慰.

还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!

另外说明:truncate table jk_test 会执行的更快,而且其所占的空间也会释放,应该是truncate 语句执行后是不会进入oracle回收站(recylebin)的缘故.如果drop 一个表加上purge 也不会进回收站(在此里面的数据可以通过flashback找回).

不管是delete还是truncate 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:

重定义数据文件的大小(不能小于该数据文件已用空间的大小).

另补充一些PURGE知识

Purge操作:

①.). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

第二段:如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩.不过如果是移动到其他的表空间,需要重建其索引.

SQL?alter?table?t_obj?move?tablespace?t_tbs1;?---移动表到其它表空间

也可以直接使用exp和imp来进行

SQLalter?owner.index_name?rebuild;??--重建索引

oracle清理数据后,如何缩小表空间,减小表空间文件大小?

很大可能是原来表是压缩过的,再导进去就没有压缩了,要重新压缩下

oracle怎么收缩数据文

--找出目前TEST表空间最大的block_id

SELECT MAX(block_id)FROM dba_extentsWHERE tablespace_name = 'TEST';

MAX(BLOCK_ID)

-------------?

show parameter db_block_size ;

NAME???? ? TYPE? VALUE

------------------------------------ ----------- ------------------------------

MAX(M)

----------

--查看表空间物理文件的名称及大小

select

"total_space(M)"from dba_data_fileswhere tablespace_name ='TEST' ;

TABLESPACE_NAME ? ? ? ? ?FILE_ID ? ?FILE_NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? total_space(M)

------------------------------ ---------- -------------------------------------------------- --------------

--resize表空间

SQL ALTER DATABASE DATAFILE '/u01/oradata/source/test01.dbf' RESIZE 1M;

ALTER DATABASE DATAFILE '/u01/oradata/source/test01.dbf' RESIZE 1M*ERROR at line 1:

Database altered.

oracle表空间太大,有哪些优化办法?

给您提供建议如下:

(1)如果表空间的数据没存满,可以考虑执行表空间收缩操作.

oracle 如何收缩表

删除数据不能缩小表空间,只是可再利用的多了.

要实际缩小,让操作系统可以利用,需要先把表move tablespace

也可以在原来的tablespace上move一遍,再缩小tablespace就可以了.

例如:

alter table your_table move tablespace yourtablespace;

以上就是土嘎嘎小编为大家整理的oracle如何收缩表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章