Oracle表中的最大分區數

來源:互聯網
上載者:User

表中可以允許的最大分區數是多少,以前並沒有太在意過。如果不查文檔,有沒有快速的方法來得到結果呢。

當時手工是11.2的環境,於是首先想到了INTERVAL分區,這樣只需要建立一個INTERVAL為1的分區表,並不停的插入資料,Oracle會自動擴充分區,只到分區上限Oracle會報錯。

但是發現這種方法不但耗時很長,而且存在bug,Oracle頻繁通過遞迴調用來建立分區,很快就會導致系統記憶體耗盡,6G的記憶體幾乎都被共用池佔用,系統出現ORA-4031錯誤。而這時僅僅建立了不到10000個分區。

而利用RANGE分區,可以輕鬆的ADD PARTITION到20000,也不會造成錯誤。

那麼除了RANGE分區是不是就沒有其他更好的方法呢,其實利用HASH分區可以更快的獲得這個問題的答案。

如果使用11.2的新特性,根本不需要真正執行建立:

SQL> SELECT * FROM V$VERSION;

BANNER

--------------------------------------------------------------------------------

Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> CREATE TABLE T_PART_HASH

&2  (ID NUMBER)

&3  SEGMENT CREATION DEFERRED

&4  PARTITION BY HASH (ID)

&5  PARTITIONS 1048576;

PARTITIONS 1048576

*

第5行出現錯誤:

ORA-14299:分區/子分區的總數超過了最大限制

SQL> CREATE TABLE T_PART_HASH

&2  (ID NUMBER)

&3  SEGMENT CREATION DEFERRED

&4  PARTITION BY HASH (ID)

&5  PARTITIONS 1048575;

CREATE TABLE T_PART_HASH

*

第1行出現錯誤:

ORA-14223:此表不支援延遲建立段

根據錯誤資訊的不同,就可以確定,Oracle所支援的最大分區數就是1048575,也就是POWER(2, 20) – 1。

當然如果是其他版本,也可以得到相似的結果,區別在於由於不指定SEGMENT CREATION DEFERRED,那麼對於後面那個建立分區表的語句,會開始執行。

而這個執行時間如果不是由於資源不足而報錯的話,那麼可能至少需要幾天的時間,因此確認命令可以執行後,應儘快中止會話。另外不要在任何正式環境執行上面的SQL。

本欄目更多精彩內容:http://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.