資料庫縮小表空間

2021-05-27 10:20:38 字數 2488 閱讀 9699

案例環境:

今天啟動應用程式,程式報錯如下:

exceptionmessage=ora-01653: 表 hbxnb_cs.bz29 無法通過 1024 (在表空間 users 中) 擴充套件

ora-06512: 在 "hbxnb_cs.dbms_context", line 40

ora-01653: 表 hbxnb_cs.bz29 無法通過 1024 (在表空間 users 中) 擴充套件

ora-06512: 在 "hbxnb_cs.dbms_context", line 146

ora-06512: 在 line 1

解決過程:

1、表空間users無法自動擴充套件,說明磁碟不能分配新的空間,是遇到了作業系統最大檔案大小的限制?還是磁碟沒有空間了?

當然磁碟沒有空間是最常見的情況,快速檢視作業系統磁碟空間使用情況。

sql> !df -h

檔案系統              容量  已用 可用 已用% 掛載點

/dev/sda1              31g   30g   42m 100% /

tmpfs                 1.9g     0  1.9g   0% /dev/shm

2、ok,磁碟使用已100%,下面的問題就是釋放磁碟表空間,先檢視表空間的使用情況。

解決這個自動增長問題的最佳思路是,新建表空間,然後把各個使用者分別move出去。但由於目前磁碟空間沒有,並且exp/imp非常麻煩,採取了最不好的處理方式,收縮別的表空間大小,然後為users所用,把問題留到了日後。

3、下面是收縮表空間的處理方式:

select a.file_id,

a.file_name,

a.filesize,

b.freesize,

(a.filesize - b.freesize) usedsize,

c.hwmsize,

c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,

a.filesize - c.hwmsize canshrinksize

from (select file_id, file_name, round(bytes / 1024 / 1024) filesize from dba_data_files) a,

(select file_id, round(sum(dfs.bytes) / 1024 / 1024) freesize from dba_free_space dfs group by file_id) b,

(select file_id, round(max(block_id) * 8 / 1024) hwmsize from dba_extents group by file_id) c

where a.file_id = b.file_id

and a.file_id = c.file_id

order by unsedsize_belowhwm desc;

5 /opt/oracle/oradata/orcl/hxpt.dbf       10000 5974 4026  6043  2017  3957

3 /opt/oracle/oradata/orcl/sysaux01.dbf  390    8      382    384   2       6

1 /opt/oracle/oradata/orcl/system01.dbf  540    9      531    531   0       9

2 /opt/oracle/oradata/orcl/undotbs01.dbf 1655  1628  27     889   862    766

4 /opt/oracle/oradata/orcl/users01.dbf    7511   3131  4380 7509  3129   2

結果說明:

file_id : 檔案編號

file_name: 檔名稱

file_size: 資料檔案占用磁碟空間大小

freesize:檔案中被標記為free的空間大小

usedsize: 使用的空間大小。

hwmsize: 已經分配出去的空間大小,如果希望通過alter database datafile … resize integerm**空間,將需要這個值作為參考,不能**到這個值之下,否則會報錯。

freee_belowhwm_size: 在hwm(高水位標記線之下的空閒空間數),這個是理論上的可以**的空間大小。

curr_can_shrink: 這個是實際大小與hwm標記之間的差,就是還沒有分配出去的空間大小。

oracle資料庫的體系結構包括物理儲存結構和邏輯儲存結構。由於它們是相分離的,所以在管理資料的物理儲存結構時並不會影響對邏輯儲存結構的訪問

4、sql> alter database datafile 5 resize 7000m;          

資料庫已更改。

問題暫時解決。

總結:dba需要認真規劃資料庫,隨便匯入使用者的結果會導致日後的**煩

資料庫縮小表空間一例

案例環境 今天啟動應用程式,程式報錯如下 exceptionmessage ora 01653 表 hbxnb cs.bz29 無法通過 1024 在表空間 users 中 擴充套件 ora 06512 在 hbxnb cs.dbms context line 40 ora 01653 表 hbxn...

oracle縮小表空間

資料庫用久了難免會出現沒有 的空間,如果空間太大可使用以下方法進行 查詢用個表所占用的空間 sql view plain copy select tablespace name,100 sum max sum alloc nvl sum free,0 sum max as capa per,sum ...

undo表空間縮小

最近執行乙個資料量比較大的儲存過程,造成undo表空間達到16g左右,但是直接採用resize的方式又無法縮小其大 小,因此經網上搜尋,採用了undo表空間重建的方式來縮小去空間大小,具體步驟如下 1 建立備用undo表空間 create undo tablespace newundotbs dat...