2010-03-02 28 views
11

我需要確定這是一個表空間設置在創建時的MAXSIZE MAXSIZE(Oracle 10g中)如何確定現有的表空間

我敢肯定,我失去了一些東西很明顯,但信息ISN」 t立即在DBA_TABLESPACES的信息中顯現。

回答

10

在11g中此查詢會給你答案的屬性,但我注意到你在10g和唉the useful column is missing

select tablespace_name, max_size 
from dba_tablespaces 
/

在10g中,你將不得不

select tablespace_name 
     , initial_extent + (next_extent * (max_extents-1)) as calc_max_size 
from dba_tablespaces 
/

請記住,這是默認最大尺寸。在實踐中,您將受到分配給表空間的數據文件大小的限制,這可能遠小於理論上的最大值。

編輯

@保羅的評論是恰當的。我想正確的答案是說表空間的最大尺寸是一個毫無意義的,實際上幾乎是虛構的概念。表空間的大小實際上是由其數據文件決定的,其最大可能大小取決於可分配的最大數據文件數。 SQL Reference對此有話說:

  • 一個bigfile表空間只包含一個數據文件或tempfile,它可以包含大約40億(232)塊。單個數據文件或臨時文件的最大大小對於具有32K塊的表空間爲128太字節(TB),對於具有8K塊的表空間爲32TB。
  • 小文件表空間是一個傳統的Oracle表空間,它可以包含1022個數據文件或臨時文件,每個文件可以包含多達約400萬個([22]的冪)塊。

因此,也許這是一個比較有用的查詢......

select tablespace_name 
     , count(*) as no_of_data_files 
     , sum(maxblocks) as max_size 
from dba_data_files 
group by tablespace_name 
/

...與它僅適用於當前指定的數據文件的警告。

編輯2

最大範圍適用於數據文件不表空間。這就是爲什麼在documentation for the filespec clause而不是在CREATE TABLESPACE下討論MAXSIZE關鍵字的原因。

+0

似乎不適合我。首先是next_extent爲null,所以剛剛做了initial_extent * max_extents,但是max_extents總是顯示爲MAXINT(2147483645)(並且表空間不是用MAXSIZE unlimited創建的) – 2010-03-02 15:31:57

+0

我不想將當前空間分配給它。我需要創建時使用MAXSIZE指定的大小。我不認爲這是毫無意義的 - 大概Oracle會拒絕將表空間擴展到MAXSIZE之外。 – 2010-03-02 17:28:29

+1

@Paul - Oracle將拒絕將表空間擴展到其當前分配的數據文件的範圍之外(因爲autoextend處於關閉狀態,或文件系統已滿,或者已擊中爲數據文件指定的MAXSIZE)。 – APC 2010-03-02 17:51:25

0

MAXSIZE是DBA_DATA_FILES

+0

這不是DBA_DATA_FILES在Oracle 10g中的屬性,只要我可以告訴(有一個maxbytes),並且將不會是最大尺寸的數據文件,而不是表空間? – 2010-03-02 15:34:30

+0

@Paul - 查看我修改後的回覆。基本上羅伯特是正確的:tablsepace大小是數據文件大小的產物。 – APC 2010-03-02 16:58:31

+0

對不起,我不清楚。該屬性稱爲maxbytes。當您查看oracle的ER圖:表空間由一個或多個數據文件組成時,數據文件具有maxbytes屬性。因此,表空間的最大大小是該表空間中數據文件的最大字節數的總和。 – 2010-03-03 09:29:23

0

從dba_data_files中選擇tablespace_name,maxbytes/1024/1024 MAX_SIZE;

0
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name; 
4

這一切都取決於數據文件是否可自動擴展。

所以,如果你DBA_DATA_FILES得到正確的信息:

  • 如果自動擴展設置爲YES,那麼你需要MAXBYTES的總和。

  • 如果AUTOEXTENSIBLE設置爲NO,則需要BYTES的總和。

DBA_TABLESPACES中的MAX_SIZE與表空間本身的最大大小無關。據Oracle documenation

「段的默認最大尺寸」所以正確的查詢是:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE 
from DBA_DATA_FILES 
group by TABLESPACE_NAME; 

這已經11g上測試,但它也應該從事的10克。它以字節爲單位給出每個表空間的最大大小。

同樣的問題也發生在TEMP表空間:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE 
from DBA_TEMP_FILES 
group by TABLESPACE_NAME; 
相關問題