今天進行表空間創建的時候,由於參考生產庫的表空間使用是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:
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,正常。