中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中分區表中表空間屬性

發布時間:2020-06-14 10:22:39 來源:網絡 閱讀:1575 作者:hbxztc 欄目:關系型數據庫

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

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

創建測試分區表:

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  );

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

下面分別從user_tables、user_tab_partitions視圖中查看對應的表空間

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

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

Oracle中分區表中表空間屬性

從上圖中可以看出表T其實也是有表空間屬性的,就是在建表時指定的USERS表空間。而分區P3繼承了這一屬性。那為什么說是分區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的分區如果沒有明確指定表空間時都會使用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

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

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

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的表空間屬性后,新加的分區P5創建在EXAMPLE表空間中。

下面再來看local分區索引對應的表空間。先在表上創建一個分區索引。

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

Index created.

下面看看local分區索引對應的表空間的屬性:

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分區索引上沒有表空間信息,而每個索引分區對應的表空間名與相應的分區所在的表空間一致。我們同樣使用dbms_metadata包來查看索引的建表語句:

Oracle中分區表中表空間屬性從上圖可以看到索引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分區索引默認與相關聯的表分區在同一個表空間,上面的查詢也可以驗證這一結論。那可以把local分區索引所在的表空間與表分區所在的表空間分開來么?答案是肯定可以的。在創建本地索引進指定表空間參數即可:

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

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

創建一個新的分區,看對應的分區索引是否還是在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

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

下面來看如何修改新分區索引創建的對應的表空間:

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

從上面的結果可以看出,新加分區對應的分區索引的表空間變為了新指定的USERS。修改成功。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆化县| 无锡市| 乐东| 本溪| 那坡县| 宁海县| 凤城市| 正宁县| 济宁市| 长治市| 富顺县| 广宗县| 武汉市| 玛沁县| 廊坊市| 阜阳市| 定陶县| 高州市| 田东县| 邛崃市| 岑溪市| 桐柏县| 苗栗市| 麻栗坡县| 留坝县| 三台县| 芦溪县| 山西省| 台中县| 新丰县| 山阴县| 温宿县| 卫辉市| 石景山区| 琼结县| 宝丰县| 边坝县| 法库县| 蒲城县| 隆化县| 丹阳市|