oracle怎么收缩数据文

oracle怎么收缩数据文,第1张

--找出目前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.

在日常的工作和学习中 很多人在对数据库中的数据做了archive后 数据量会出现减少的情况 在这种前提下 原来定义的数据文件假如不进行收缩就会浪费很多的空间 在下文中 我们将详细介绍一种解决此问题的方法

首先 停止listener 避免在rebuild时有dml *** 作

◆ 利用Toad的tools >rebuild multiple objects对欲收缩的表空间所涉及的表及索引进行rebuild (就是alter table table_name move tablespace 命令)

例子

Alter table SICS_HISTORY COD_AMOUNT move TABLESPACE TBSP Parallel (Degree  ) Alter Table SICS_HISTORY COD_AMOUNT noparallelAlter index SICS_HISTORY IX _COD_AMOUNT rebuild TABLESPACE TBSP Parallel (Degree  ) Nologging onlineAlter index SICS_HISTORY IX _COD_AMOUNT noparallel

选择项中 我们可以选择rebuild associated indexes with tables 这样 在产生脚本时可以同时对index做rebuild (注意 table如果move了表空间必须对index做rebuild)

◆ Rebuild结束后 对数据文件的实际大小做评估

( )找出表空间所涉及的所有数据文件

sql>select * from dba_data_files》可以获得file_id

( )找到最大的block_id

SQL>select max(block_id)*db_block_size/ / from dba_extents where file_id=

◆ 收缩数据文件的空间

lishixinzhi/Article/program/Oracle/201311/18261


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11715051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存