oracle如何收缩表,oracle表空间收缩

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

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

成都创新互联专注于通化县企业网站建设,响应式网站开发,购物商城网站建设。通化县网站建设公司,为通化县等地区提供建站服务。全流程按需求定制设计,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

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

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

解决方案

执行

alter table jk_test move

alter table jk_test move storage(initial 64k)

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 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:

alter database datafile 'filename' resize 8g

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

另补充一些PURGE知识

Purge操作:

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

2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象。

4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限

5). Drop table table_name purge:  删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。

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

1、

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

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

2、

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

3、删除原来的表空间

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

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

oracle怎么收缩数据文

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

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

MAX(BLOCK_ID)

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

136

--计算目前最大块的段所占用的空间(该数据库的block大小是8192)

show parameter db_block_size ;

NAME                         TYPE     VALUE

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

db_block_size                    integer     8192

SELECT 136*8192/1024/1024  "MAX(M)" FROM dual;

MAX(M)

----------

1.0625

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

set line 200

col file_name for a50

select

tablespace_name, file_id, file_name,round(bytes/(1024*1024),0)

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

TABLESPACE_NAME          FILE_ID    FILE_NAME                                                       total_space(M)

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

TEST                                      6             /u01/oradata/source/test01.dbf                   100

4

--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:

ORA-03214: File Size specified is smaller than minimum required

SQL ALTER DATABASE DATAFILE '/u01/oradata/source/zfl01.dbf' RESIZE 2M;

Database altered.

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

给您提供建议如下:

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

(2)如果表空间的数据存满了,可以考虑建多个表空间文件。

(3)从业务的角度考虑,是否可以考虑将部分数据进行剥离,存放在历史库。

(4)从业务角度进行分析,该表空间中最大的几张表中的数据都是必须、有用的吗?是否可以将部分无用数据备份后执行清理操作。

(5)如果是undo表空间,可以执行undo表空间收缩操作。

(6)如果是temp表空间,可以将原表空间文件drop掉后重建表空间文件。

oracle 如何收缩表

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

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

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

例如:

alter table your_table move tablespace yourtablespace;


网站题目:oracle如何收缩表,oracle表空间收缩
本文URL:http://myzitong.com/article/hecsep.html