溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫表、索引、表空間的回收方法是什么

發(fā)布時間:2022-01-17 17:00:40 來源:億速云 閱讀:336 作者:iii 欄目:數(shù)據(jù)庫

本篇內(nèi)容介紹了“數(shù)據(jù)庫表、索引、表空間的回收方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

說明:數(shù)據(jù)庫運(yùn)行一段時間后,需要對數(shù)據(jù)庫進(jìn)行歸檔的操作;

數(shù)據(jù)庫歸檔完成后,需要對表和索引進(jìn)行收縮才能真正的提高整個系統(tǒng)的運(yùn)行效率。

如果需要對數(shù)據(jù)庫的表空間進(jìn)行回收,還需要對數(shù)據(jù)文件進(jìn)行rsize的操作;

詳細(xì)操作步驟:

一、表和索引的收縮

1、查看需要進(jìn)行收縮的對象(查看某個表空間下面,可回收空間超過100M的表)

腳本:

SELECT  NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9 pinggu, BLOCKS*8/1024shiji,(BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9) MB,TABLE_NAME

FROM  dba_tables

WHERE  tablespace_name='<tablespace_name>'  AND

BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100 AND rownum<11  order by mb desc;

2、進(jìn)行表的收縮

1)打開表的行遷移

腳本: alter table <table_name> enable row movement ;

2)進(jìn)行表的收縮

腳本:alter table <table_name> shrink space compcat;

3)進(jìn)行高水位線的回收

alter table  <table_name> shrink space;

3、進(jìn)行索引的回收(REBUILD和SHRINK都可以實(shí)現(xiàn)這個目的)

1)重建索引的腳本:

ALTER INDEX <INDEX_name>

REBUILD

NOCOMPRESS

NOPARALLEL

TABLESPACE <tablespace_name>

STORAGE (

         INITIAL     1M

         NEXT        1M

         PCTINCREASE 0

        )

ONLINE;

2)進(jìn)行索引的收縮:

alter index   <INDEX_name> shrink space;

4、運(yùn)行重新編譯腳本utlrp.sql,(因為開啟行遷移后,可能有些對象會失效)

cd $ORACLE_HOME

@/rdbms/admin/utlrp.sql

二、表空間的回收

表空間的回收歸根到底是數(shù)據(jù)文件大小的回收;

1、表空間回收大小的腳本和查看

select a.file#,a.name,a.bytes/1024/1024 CurrentMB,

       ceil(HWM * a.block_size)/1024/1024 ResizeTo,

       (a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,

       'alter database datafile '''||a.name||''' resize '||

       ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD

from v$datafile a,

     (select file_id,max(block_id+blocks-1) HWM

       from dba_extents where file_id in

              (select b.file#  From v$tablespace a ,v$datafile b

                where a.ts#=b.ts# and a.name='<tablespace_name>')

       group by file_id) b

where a.file# = b.file_id(+)

and (a.bytes - HWM *block_size)>0

order by 5

2、某些數(shù)據(jù)文件的使用率很小,但是進(jìn)行數(shù)據(jù)文件的Resize時候卻回收不了多少空間,可以通過以下語句查看相應(yīng)

文件的段分配情況

select  * from dba_extents where  tablespace_name='<tablespace_name> ' AND FILE_ID='<FILE_ID>' ORDER BY BLOCK_ID DESC;

說明:數(shù)據(jù)文件的可以resize的大小是由最大的BLOCK_ID所決定的,因此可以通過上面的shrink或者move命令進(jìn)行操作;

3、進(jìn)行數(shù)據(jù)文件的RESIZE操作

ALTER DATABASE DATAFILE '/oracle/ID1/112_64/dbs/oradataccdata.dbf'(數(shù)據(jù)文件的位置)

RESIZE 10000M。

“數(shù)據(jù)庫表、索引、表空間的回收方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI