Oracle shrink table收縮表使用情境,oracleshrink

來源:互聯網
上載者:User

Oracle shrink table收縮表使用情境,oracleshrink

     現場有一個外網的環境資料表空間嚴重不足,客戶不想擴容,要清理一部分資料,都是大欄位的blob. 資料表空間是1T,已經使用0.99T,刪除2015年之前的blob後,通過附件的基礎資訊表查出還有200G的資料,不過資料表空間並沒有釋放(高水位線),這個時候有幾種方式處理:

1. 建立一張表,把剩下的資料匯入,不可行,沒有這麼大的空間了.

2. 用資料泵或用exp匯出大欄位,刪除表後,然後匯入.

3. 用shrink table.

     最終選擇用第三種方案,以下是實驗,blob的實驗也測試過,可以收縮,如何插入blob,參考http://blog.csdn.net/stevendbaguo/article/details/28636369 在此不再贅述.

select * from v$version;
BANNER
-------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


create user TEST_DB
  identified by TEST_DB
  default tablespace testdb_tbs
  temporary tablespace TEMP;
grant connect to TEST_DB;
grant dba to TEST_DB;
grant resource to TEST_DB;
grant select any dictionary to TEST_DB;

create tablespace testdb_tbs datafile '/home/oracle/app/oradata/orcl/testdb_tbs.dbf' size 100m autoextend off;
create table test as select * from dba_objects;
insert into test select  * from dba_objects;--執行多次,直到資料表空間使用率為90%以上

SELECT Upper(F.TABLESPACE_NAME)         "資料表空間名",
       D.TOT_GROOTTE_MB                 "資料表空間大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
       F.TOTAL_BYTES                    "空閑空間(M)",       
       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
       || '%'                           "使用比"
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
        having DD.TABLESPACE_NAME='TESTDB_TBS'
        GROUP  BY DD.TABLESPACE_NAME) D
WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME;
資料表空間名      資料表空間大小(M) 已使用空間(M) 空閑空間(M) 使用比
------------- ------------- ------------- ----------- -----------
TESTDB_TBS              100            97           3   97.00%

select count(1) from test;
  COUNT(1)
----------
    802835
    
delete from test where rownum <=2835;
commit;
    
select count(1) from test;
 COUNT(1)
---------
   800000

--重新查詢資料表空間,TESTDB_TBS空間沒有釋放

alter table test shrink space cascade;
alter table test shrink space cascade
*
第 1 行出現錯誤:
ORA-10636: ROW MOVEMENT is not enabled


alter table test enable row movement ;
表已更改。

alter table test shrink space cascade;--連同索引一起收縮
表已更改。

SELECT Upper(F.TABLESPACE_NAME)         "資料表空間名",
       D.TOT_GROOTTE_MB                 "資料表空間大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
       F.TOTAL_BYTES                    "空閑空間(M)",       
       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
       || '%'                           "使用比"
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
        having DD.TABLESPACE_NAME='TESTDB_TBS'
        GROUP  BY DD.TABLESPACE_NAME) D
WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME;
資料表空間名     資料表空間大小(M) 已使用空間(M) 空閑空間(M) 使用比
------------ ------------- ------------- ----------- ----------------
TESTDB_TBS             100         90.94        9.06   90.94%

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.