表空間的初始大小分配

今天進行表空間創建的時候,由於參考生產庫的表空間使用是100G。此處我就用64G來作爲初始表空間。

結果,拋出如下錯誤:


SQL> create tablespace IDX_ARC
  2    datafile  '/oradata2/alpha180/IDX_ARC001.DBF'
  3  size 65536M extent management local
  4  segment space management auto;

create tablespace IDX_ARC
  datafile  '/oradata2/alpha180/IDX_ARC001.DBF'
size 65536M extent management local
segment space management auto

ORA-01144: File size (8388608 blocks) exceeds maximum of 4194303 blocks


AIX 64位的平臺

下面是oracle err messages:

ORA-01144: File size (string blocks) exceeds maximum of string blocks
Cause: Specified file size is larger than maximum allowable size value.

Action: Specify a smaller size.

開始以爲是操作系統的限制導致的,但是查了一下,沒看到相關的限制(都已經-1了)

具體原因是什麼呢?(如下爲轉載)

這要從Oracle的僞列rowid說起,話說.....

先看看關於rowid一段文章就明白了:(關於什麼是rowid請baidu)

rowid在磁盤上需要10 個字節(byte)的存儲空間 並使用18 個字符來顯示它包含下列組件:數據對象編號,相關文件編號,塊編號,行編號

rowid在磁盤上需要10 個字節(byte)的存儲空間並使用18 個字符來顯示它包含下列組件:

數據對象編號:每個數據對象如表或索引在創建時都分配有此編號,並且此編號在數據庫中是唯一的;
相關文件編號:此編號對於一個表空間中的每個文件是唯一的;
塊編號:
標識塊頭中行目錄位置的位置;
行編號:
表示包含此行的塊在文件中的位置;

在內部數據對象編號需要32位(bit),相關文件編號需要10位(bit),塊編號需要22位(bit) , 位行編號需要16位,加起來總共是80位或10 個字節,ROWID 使用以64爲基數的編碼方案來顯示該方案將6個位置用於數據對象,編號3個位置用於相關文件編號,6個位置用於塊編號,3個位置用於行編號以64爲基數的 編碼方案使用字符A-Z a-z 0-9 + 和/共64 個字符,如下例所示:
AAAB/R AAB AAAGmS AAA

由於block是22位(bit),

22bit就是一個22位二進制數,換算成十進制就是 2的22次方-1=4194303 也就是說,一個datafile最多容納這麼多個blocks


2K數據庫的數據文件的size最大隻能是8G
而依此類推8K數據塊的一個數據文件的最大size只能是32G。

 

再次執行,把表空間的初始值調爲30G。ok,正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章