修改oracle資料庫檔案大小

2021-09-29 04:32:22 字數 1932 閱讀 4240

我們在136上的oracle資料庫進行壓力測試時,發現資料庫的資料檔案占用物理空間達到20多個g,但是在我們清掉各個表的資料後(truncate掉各個日誌表),發現資料庫實際資料占用的空間只有20多m,但物理檔案仍然20多g。

經查資料,這個是oracle的表和表空間的「高水位」問題造成的,解決方案如下:

前提知識:

oracle資料庫中的物理儲存空間是以塊(segment)為單位的

2. 修改資料庫表空間大小的語句:

alter database datafile 『d:\oradata\ecss20』 resize 206m ;

但是直接執行該語句的話會報如下錯誤:

failed to commit: ora-03297: 檔案包含在請求的 resize 值以外使用的資料

解決方案(以136上的ecss20表空間為例):

查詢oracle資料檔案及其編號。sql語句如下

select file#,name from v$datafile; www.2cto.com

查詢出資料庫的所有資料檔案,其中包含如下,正是達到20多g的資料檔案

file#  name
6  d:\oradata\ecss20
查詢該資料檔案的最大塊號。語句如下:

select max(block_id) from dba_extents where file_id=6;

查詢結果如下:

max(block_id)

534785
計算該錶空間目前實際占用的空間(不是物理檔案的大小)

顯示每個資料塊的大小。語句如下:

show parameter db_block_size;

結果為8192,就是8k。

然後計算所有資料塊占用的物理空間(拿計算器計算也一樣)

select 534785*8/1024 from dual;

結果為4178.00781m,就是4g多

然後我們知道目前用了4g多,我們就可以把資料檔案大小resize到4g多一點

alter database datafile 『d:\oradata\ecss20』 resize 4200m;

資料庫已更改。正常。

到此為止,實際資料檔案的大小就由20多g到4g多了。

繼續往下走,因為我們實際資料占用了幾十m,但資料檔案還有4g多,還是我們把之前的表truncate掉後才能得到的。現在查一下占用最大塊(segment 534785)的是什麼。語句如下:

select distinct owner, segment_name, segment_type,tablespace_name from dba_extents where file_id =6 and block_id=534785; www.2cto.com

查到的結果如下:

owner segment_name segment_type tablespace_name

ajita biztalkinginfo table ecss

說明目前占用最大塊的物件是表biztalkinginfo

把錶挪動一下,把錶從當前表空間轉移到了另外乙個表空間(要已經存在的),語句如下:

alter table biztalkinginfo move tablespace ecss_lucifer;

再次查詢物理檔案中的最大塊號(步驟2),本次查詢結果為534761,結果已經變小了,再查詢該塊的資料時biztalkinginfo的主鍵。

分析可知,在我們資料表已經插入大量資料後,才建表biztalkinginfo,然後該錶占用的塊就偏大。然後我們resize資料檔案時就不能小於該塊。最簡單的辦法是刪掉該錶相關的東西,然後重建即可。當然也有比較複雜的辦法可以辦到。

有乙個結論就是:建表一般要放在資料表初始化之前進行,最好不要再初始化了大量資料,尤其是日誌資料後再建表。

oracle檢視資料庫檔案大小

檢視資料庫檔案大小,最直接的方式是開啟對應的安裝目錄進行檢視,也可以通過資料庫的管理檢視進行檢視,如 資料檔案 select sum bytes 1024 1024 1024 gb from dba data files 日誌檔案 select sum bytes 1024 1024 mb from...

壓縮日誌及資料庫檔案大小

壓縮日誌及資料庫檔案大小 特別注意 請按步驟進行,未進行前面的步驟,請不要做後面的步驟 否則可能損壞你的資料庫.1.清空日誌 dump transaction 庫名 with no log 2.截斷事務日誌 backup log資料庫名 with no log 3.收縮資料庫檔案 如果不壓縮,資料庫...

壓縮日誌及資料庫檔案大小

壓縮日誌及資料庫檔案大小 特別注意 請按步驟進行,未進行前面的步驟,請不要做後面的步驟 否則可能損壞你的資料庫.1.清空日誌 dump transaction 庫名 with no log 2.截斷事務日誌 backup log 資料庫名 with no log 3.收縮資料庫檔案 如果不壓縮,資料...