轉貼:收縮oracle資料表空間時ora-03297錯誤的解決

來源:互聯網
上載者:User

以下內容轉自:http://blog.chinaunix.net/u/22151/showart.php?id=145362。 如果原作者有什麼異議,本人願意刪除。

在實際使用中我們經常會遇到oracle某個資料表空間佔用了大量的空間而其中的資料量卻只佔用了少量空間,此時我們可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令來收縮資料表空間,但在收縮的過程中會遇到ora-03297錯誤,表示在所定義的空間之後有資料存在,不能收縮,此時的解決辦法有:

1. 先估算該資料表空間內各個資料檔案的空間使用方式:

SQL>select file#,name from v$datafile;

SQL>select max(block_id) from dba_extents where file_id=11;

MAX(BLOCK_ID)
-------------
13657

SQL>show parameter db_block_size

NAME TYPE VALUE
----------------------------- ------- ----------- db_block_size integer 8192
SQL>select 13657*8/1024 from dual;

13657*8/1024
-----------
106.695313

這說明該檔案中最大使用塊位於106M與107M之間,

SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M;
alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 107M;

Database altered.

2.如果某些表佔用了資料檔案的最後一些塊,則需要先將該表匯出或移動到其他的資料表空間中,然後刪除表,再進行收縮。不過如果是移動到其他的資料表空間,需要重建其索引。

SQL> alter table t_obj move tablespace t_tbs1;

具體情況可以參考:http://www.cnoug.org/viewthread.php?tid=15284

另外主意:alter tablespace xxx coalesce只能把相鄰的空餘資料區塊連成一些比較大的空塊,但是不會移動當前的資料區塊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.