資料庫縮小表空間一例

2021-06-19 12:41:02 字數 2490 閱讀 1599

案例環境:

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

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...

資料庫操作優化一例

資料庫公升級,需要對幾個表進行一些資料轉換,具體是這樣 針對每乙個 item,從 orders 表裡查出 shop id,並把此 id 賦值給 items 和 skus 中的 shop id。下面是最初實現的 其中 largerresultprocessor 是乙個基類,負責遍歷泛型引數 t 所指向...

ASP連線ACCESS資料庫一例

dim conn,rs set conn server.createobject adodb.connection set rs server.createobject adodb.recordset sub endconnection conn.close set conn nothing end...