Oracle中分區(qū)表中表空間屬性-創(chuàng)新互聯(lián)

Oracle中的分區(qū)表是Oracle中的一個很好的特性,可以把大表劃分成多個小表,從而提高對于該大表的SQL執(zhí)行效率,而各個分區(qū)對應(yīng)用又是透明的。

創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。10余年品質(zhì),值得信賴!

分區(qū)表中的每個分區(qū)有獨立的存儲特性,包括表空間、PCT_FREE等。那分區(qū)表中的各分區(qū)表空間之間有什么關(guān)系?新建的分區(qū)會創(chuàng)建在哪個表空間中呢?對應(yīng)的local分區(qū)索引又會使用哪個表空間呢?下面使用一個例子來解釋上面的這些問題。

創(chuàng)建測試分區(qū)表:

zx@TEST>create table t (id number,name varchar2(10))   2  tablespace users   3  partition by range(id)   4  (   5  partition p1 values less than (10) tablespace example,   6  partition p2 values less than (20) tablespace system,   7  partition p3 values less than (30)   8  );

上面創(chuàng)建了一個range分區(qū)表T,對表T指定了表空間為users,分區(qū)p1表空間為example,分區(qū)p2表空間為system,分區(qū)p3表空間沒有指定。

下面分別從user_tables、user_tab_partitions視圖中查看對應(yīng)的表空間

zx@TEST>col tablespace_name for a30 zx@TEST>col partition_name for a30 zx@TEST>select tablespace_name,partitioned from user_tables where table_name='T'; TABLESPACE_NAME         PARTITION ------------------------------ ---------        YES zx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T'; PARTITION_NAME        TABLESPACE_NAME ------------------------------ ------------------------------ P1        EXAMPLE P2        SYSTEM P3        USERS

從上面的查詢可以看出,分區(qū)表T在user_tables視圖中沒有記錄表空間名的信息,分區(qū)P1和P2對應(yīng)的分區(qū)與建表語句中指定的一致,分區(qū)P3對應(yīng)的分區(qū)與表T指定的表空間一致為USERS。難道表T就沒有表空間屬性么?我們使用dbms_metadata.get_ddl查看表T的語句:

Oracle中分區(qū)表中表空間屬性

從上圖中可以看出表T其實也是有表空間屬性的,就是在建表時指定的USERS表空間。而分區(qū)P3繼承了這一屬性。那為什么說是分區(qū)P3繼承了這一屬性呢,我們查詢下面的視圖:

zx@TEST>col table_name for a30 zx@TEST>select table_name,def_tablespace_name from user_part_tables; TABLE_NAME        DEF_TABLESPACE_NAME ------------------------------ --------------------------------- T        USERS

官方文檔對列def_tablespace_name的解釋是Default tablespace to be used when adding a partition。從上面的查詢可以知道,表T的分區(qū)如果沒有明確指定表空間時都會使用USERS表空間。事實是這樣么,下面給表T添加一個表空間:

zx@TEST>alter table t add partition p4 values less than (40); Table altered. zx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T'; PARTITION_NAME        TABLESPACE_NAME ------------------------------ ------------------------------ P1        EXAMPLE P2        SYSTEM P3        USERS P4        USERS

從上面可以看到,新添加的分區(qū)P4對應(yīng)的表空間是USERS,證實了前面的觀點。

如果當前的表空間已經(jīng)無法擴展,想把新加的分區(qū)創(chuàng)建到其他表空間中,而在加表空間時不指定表空間信息,可以實現(xiàn)么?答案是肯定可以。

zx@TEST>alter table t modify default attributes tablespace example; Table altered. zx@TEST>select table_name,def_tablespace_name from user_part_tables; TABLE_NAME        DEF_TABLESPACE_NAME ------------------------------ ------------------------------------------------------------------------------------------ T        EXAMPLE zx@TEST>alter table t add partition p5 values less than (50); Table altered. zx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T'; PARTITION_NAME        TABLESPACE_NAME ------------------------------ ------------------------------ P1        EXAMPLE P2        SYSTEM P3        USERS P4        USERS P5        EXAMPLE

從上面可以看到在修改了表T的表空間屬性后,新加的分區(qū)P5創(chuàng)建在EXAMPLE表空間中。

下面再來看local分區(qū)索引對應(yīng)的表空間。先在表上創(chuàng)建一個分區(qū)索引。

zx@TEST>create index idx_t on t(id) local; Index created.

下面看看local分區(qū)索引對應(yīng)的表空間的屬性:

zx@TEST>select tablespace_name,partitioned from user_indexes where index_name='IDX_T'; TABLESPACE_NAME         PARTITION ------------------------------ ---------        YES zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T'; PARTITION_NAME        PARTITION_POSITION TABLESPACE_NAME ------------------------------ ------------------ ------------------------------ P1 1 EXAMPLE P2 2 SYSTEM P3 3 USERS P4 4 USERS P5 5 EXAMPLE

從上面的查詢可以看出,local分區(qū)索引上沒有表空間信息,而每個索引分區(qū)對應(yīng)的表空間名與相應(yīng)的分區(qū)所在的表空間一致。我們同樣使用dbms_metadata包來查看索引的建表語句:

Oracle中分區(qū)表中表空間屬性從上圖可以看到索引IDX_T確實沒有表空間屬性。我們再來查看user_part_index來驗證一下是否是真的呢:

zx@TEST>col index_name for a30 zx@TEST>col def_tablespace_name for a30 zx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T'; INDEX_NAME        DEF_TABLESPACE_NAME ------------------------------ ------------------------------ IDX_T

從上面的查詢中可以看到索引IDX_T也沒有默認的表空間存儲選項,而在官方文檔中看到:New partitions or subpartitions added to the local index will be created in the same tablespace(s) as the corresponding partitions or subpartitions of the underlying table。說明local分區(qū)索引默認與相關(guān)聯(lián)的表分區(qū)在同一個表空間,上面的查詢也可以驗證這一結(jié)論。那可以把local分區(qū)索引所在的表空間與表分區(qū)所在的表空間分開來么?答案是肯定可以的。在創(chuàng)建本地索引進指定表空間參數(shù)即可:

zx@TEST>drop index idx_t; Index dropped. zx@TEST>create index idx_t on t(id) local tablespace sysaux; Index created. zx@TEST>select tablespace_name,partitioned from user_indexes where index_name='IDX_T'; TABLESPACE_NAME         PARTITION ------------------------------ ---------        YES         zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T'; PARTITION_NAME        PARTITION_POSITION TABLESPACE_NAME ------------------------------ ------------------ ------------------------------ P1 1 SYSAUX P2 2 SYSAUX P3 3 SYSAUX P4 4 SYSAUX P5 5 SYSAUX zx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T'; INDEX_NAME        DEF_TABLESPACE_NAME ------------------------------ ------------------------------ IDX_T        SYSAUX

從上面的查詢中可以看到所有的分區(qū)索引的表空間都為SYSAUX。

創(chuàng)建一個新的分區(qū),看對應(yīng)的分區(qū)索引是否還是在SYSAUX表空間:

zx@TEST>alter table t add partition p6 values less than (60); Table altered. zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T'; PARTITION_NAME        PARTITION_POSITION TABLESPACE_NAME ------------------------------ ------------------ ------------------------------ P1 1 SYSAUX P2 2 SYSAUX P3 3 SYSAUX P4 4 SYSAUX P5 5 SYSAUX P6 6 SYSAUX

從上面可以看出新的分區(qū)索引所在的表空間仍是SYSAUX。

下面來看如何修改新分區(qū)索引創(chuàng)建的對應(yīng)的表空間:

zx@TEST>alter index idx_t modify default attributes tablespace users; Index altered. zx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T'; INDEX_NAME        DEF_TABLESPACE_NAME ------------------------------ ------------------------------ IDX_T        USERS zx@TEST>alter table t add partition p7 values less than (70); Table altered. zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T'; PARTITION_NAME        PARTITION_POSITION TABLESPACE_NAME ------------------------------ ------------------ ------------------------------ P1 1 SYSAUX P2 2 SYSAUX P3 3 SYSAUX P4 4 SYSAUX P5 5 SYSAUX P6 6 SYSAUX P7 7 USERS

從上面的結(jié)果可以看出,新加分區(qū)對應(yīng)的分區(qū)索引的表空間變?yōu)榱诵轮付ǖ腢SERS。修改成功。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標題:Oracle中分區(qū)表中表空間屬性-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article46/djjoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、面包屑導航網(wǎng)站設(shè)計、移動網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司