如何移动表来达到减小数据文件大小的目的

来源:互联网 发布:淘宝店价值评估 编辑:程序博客网 时间:2024/05/23 01:13
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Author:Kamus
Mail:kamus@itpub.net
Date:2004-4

通过movetablespace来完成resizedatafile。
HWM的概念就不在此阐述了。

测试环境为10gfor,其它版本的一样。

我们先创建两个表空间,分别为t_tbs和t_tbs1,分别有一个数据文件,大小都是5M
再创建一个test_user用户,给这个用户上述两个表空间的无限限额,并且设置默认表空间是t_tbs。
[zhangleyi@aszhangleyi]$sqlplus/assysdba

SQL*Plus:Release10.1.0.2.0-ProductiononTueApr1321:01:252004

Copyright(c)1982,2004,Oracle. Allrightsreserved.


Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.1.0.2.0-Production
WiththePartitioning,OLAPandDataMiningoptions

SYSatorcl10>alterusertest_userdefaulttablespacet_tbs;

Useraltered.

SYSatorcl10>alterusertest_userquotaunlimitedont_tbs;

Useraltered.

SYSatorcl10>alterusertest_userquotaunlimitedont_tbs1;

Useraltered

用test_user登录,创建表
TEST_USERatorcl10>createtablet_objasselect*fromdba_objectswhererownum<10000;

Tablecreated.

TEST_USERatorcl10>insertintot_objselect*fromt_obj;

9999rowscreated.

TEST_USERatorcl10>/

19998rowscreated.

TEST_USERatorcl10>/
insertintot_objselect*fromt_obj
*
ERRORatline1:
ORA-01653:unabletoextendtableTEST_USER.T_OBJby128intablespaceT_TBS


TEST_USERatorcl10>commit;

Commitcomplete.

TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extentswhereowner='TEST_USER'andsegment_name='T_OBJ';

TotalBlocksTotalSize
----------------------
        512   4194304

好,上面我们创建了一个表,并且插入了很多数据,通过dba_extents视图我们可以看到总共用的block数和总共的大小。

下面我们用delete删除全部数据,并且插入新的9999条数据
TEST_USERatorcl10>deletefromt_obj;

39996rowsdeleted.

TEST_USERatorcl10>insertintot_objselect*fromdba_objectswhererownum<10000;

9999rowscreated.

TEST_USERatorcl10>commit;

Commitcomplete.

TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extents
 2 whereowner='TEST_USER'andsegment_name='T_OBJ';

TotalBlocksTotalSize
----------------------
        512   4194304

再次查看dba_extents视图,发现占用的空间并没有减少。

我们尝试resize这个数据文件,file#为6的是t_tbs表空间下面的数据文件
SYSatorcl10>alterdatabasedatafile6resize4M;
alterdatabasedatafile6resize4M
*
ERRORatline1:
ORA-03297:filecontainsuseddatabeyondrequestedRESIZEvalue


SYSatorcl10>alterdatabasedatafile6resize4500000;

Databasealtered.

我们发现想resize到4M不可以,但是resize到4500000就可以了,因为上面查看出来的TotalSize是4194304,这个值大于4M而小于4500000。

然后我们move这张表到t_tbs1表空间,这个表空间下面的数据文件file#是8

EST_USERatorcl10>altertablet_objmovetablespacet_tbs1;

Tablealtered.

TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extents
 2 whereowner='TEST_USER'andsegment_name='T_OBJ';1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>