久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle Partition怎么使用

194次閱讀
沒有評論

共計 6730 個字符,預計需要花費 17 分鐘才能閱讀完成。

本篇內容主要講解“Oracle Partition 怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Oracle Partition 怎么使用”吧!

Oracle 分區索引類型
Local Index
   A.Local Prefixed Index
    可以理解為分區索引的第一個索引字段是分區表的 Partition key
   B.Local Non-Prefixed Index
    可以理解為分區索引的第一個索引字段不是分區表的 Partition key 
Global Prefixed Index
   A.range 類型分區
   B.hash 類型分區
    注意:這兩種 Global 索引分區類型與基表的分區類型沒有關系。我們可以在非分區表上創建該索引  
Global Non-Prefixed Index(目前 Oracle 還不支持)
創建該索引時會提示 ORA-14038: GLOBAL partitioned index must be prefixed

注意:Local Index 索引分區和基表分區是一一對應的
  Global Index 索引分區和基表分區是相互獨立,不存在索引分區和表分區之間的一一對應關系
  比如基表有 5 個分區,索引有 2 個分區

如何確定分區索引是 Global/Local,PREFIXED/NON-PREFIXED

SQL  select index_name,table_name,locality,alignment from dba_part_indexes where owner= OHSDBA 
INDEX_NAME TABLE_NAME LOCALITY ALIGNMENT
------------------------ ------------ ---------- --------------
IDX_GLOBAL_PREFIXED OHS_PART GLOBAL PREFIXED
IDX_LOCAL_NON_PREFIXED OHS_PART LOCAL NON_PREFIXED

如何選取分區索引類型

When deciding what kind of partitioned index to use, you should consider the following guidelines in this order:

If the table partitioning column is a subset of the index keys, then  use a local index. If this is the case, then you are finished. If this  is not the case, then continue to guideline 2.
If the index is unique and does not include the partitioning key  columns, then use a global index. If this is the case, then you are  finished. Otherwise, continue to guideline 3.
If your priority is manageability, then consider a local index. If  this is the case, then you are finished. If this is not the case,  continue to guideline 4.
If the application is an OLTP type and users need quick response  times, then use a global index. If the application is a DSS type and  users are more interested in throughput, then use a local index.

For more information about partitioned indexes and how to decide which type to use, refer to Using Partitioning in a Data Warehouse Environment and Using Partitioning in an Online Transaction Processing Environment.

以下的維護操作,易導致索引分區 UNUSABLE
   1. IMPORT PARTITION or conventional path SQL*Loader.
   2. Direct-path SQL*Loader 沒有成功完成 (local index partitions and global indexes)
   3. 維護操作類似 ALTER TABLE MOVE PARTITION. 
   4. 維護操作類似 ALTER TABLE TRUNCATE PARTITION. 
   5. 維護操作類似 ALTER TABLE SPLIT PARTITION. 
   6. 維護操作類似 ALTER INDEX SPLIT PARTITION. 
   7. 對 Hash 分區類型的表增加分區(分區中數據會變化)
   
如何避免索引 UNUSABLE
為了防止分區維護的操作造成 Index 不可用,我們可以使用帶 update global indexes 的語句,以下的操作支持 UPDATE GLOBAL INDEXES:
   1. ADD PARTITION|SUBPARTITION (hash only)
   2. COALESCE PARTITION|SUBPARTITION
   3. DROP PARTITION
   4. EXCHANGE PARTITION|SUBPARTITIO
   5. MERGE PARTITION
   6. MOVE PARTITION|SUBPARTITION
   7. SPLIT PARTITION
   8. TRUNCATE PARTITION|SUBPARTITION

Update Global Indexes 和 Update Indexes 的區別
Update Global Indexes 只維護全局索引,Update Indexes 會同時維護全局和本地索引。Update Global Indexes 可以理解為是 Update Indexes 的子集。假定當前有一個表,在其上面創建了 local 和 global partitioned index,我們把其中一個非空的分區做 spilt/merge,如果只使用 Update Global Indexes,那么 Local Index 會被標記成 UNUSABLE。如果使用 Update Indexes,則兩者都有效。Oracle 9.2 中可以使用 update global indexes,10g 之后可以使用 update global indexes / update indexes

測試可用腳本

create table ohs_part
(id number,
 pdate date)
partition by range(pdate)
(partition ohs_201701 values less than (to_date( 2017-02-01 , yyyy-mm-dd)),
 partition ohs_201702 values less than (to_date( 2017-03-01 , yyyy-mm-dd)),
 partition ohs_201703 values less than (to_date( 2017-04-01 , yyyy-mm-dd)),
 partition ohs_201704 values less than (to_date( 2017-05-01 , yyyy-mm-dd)),
 partition ohs_max values less than (maxvalue))
insert into ohs_part select 1, sysdate from dual;
insert into ohs_part select 2, sysdate from dual;
insert into ohs_part select 3, sysdate - 15 from dual;
insert into ohs_part select 4, sysdate - 15 from dual;
insert into ohs_part select 5, sysdate + 30 from dual;
insert into ohs_part select 6, sysdate + 30 from dual;
insert into ohs_part select 7, sysdate + 60 from dual;
insert into ohs_part select 8, sysdate + 60 from dual;
commit;
create index idx_local on ohs_part(pdate) local;
create index idx_normal on ohs_part(id);
create index idx_global on ohs_part(pdate,id) global;
SQL  create index idx_local on ohs_part(pdate) local; Index created.
SQL  create index idx_normal on ohs_part(id);
Index created.
SQL  create index idx_global on ohs_part(pdate,id) global;
Index created.
SQL  col index_name for a30
SQL  select index_name,partitioned,status from user_indexes where table_name= OHS_PART 
INDEX_NAME PARTITION STATUS
------------------------------ --------- ------------------------
IDX_GLOBAL NO VALID
IDX_NORMAL NO VALID
IDX_LOCAL YES N/A
SQL  select index_name,status from user_ind_partitions where index_name= IDX_LOCAL 
INDEX_NAME STATUS
------------------------------ ------------------------
IDX_LOCAL USABLE
IDX_LOCAL USABLE
IDX_LOCAL USABLE
IDX_LOCAL USABLE
IDX_LOCAL USABLE
SQL  col table_name for a20
SQL  select index_name,table_name,locality,alignment from dba_part_indexes where owner= OHSDBA 
INDEX_NAME TABLE_NAME LOCALITY ALIGNMENT
-------------------- -------------------- ------------------ --------------------
IDX_LOCAL OHS_PART LOCAL PREFIXED
SQL  create index idx_local_non_prefixed on ohs_part(id,pdate) local;
Index created.
SQL  select index_name,table_name,locality,alignment from dba_part_indexes where owner= OHSDBA 
INDEX_NAME TABLE_NAME LOCALITY ALIGNMENT
------------------------------ -------------------- ------------------ --------------------
IDX_LOCAL OHS_PART LOCAL PREFIXED
IDX_LOCAL_NON_PREFIXED OHS_PART LOCAL NON_PREFIXED
drop index idx_local;
CREATE INDEX idx_global_prefixed ON ohs_part(pdate)
GLOBAL PARTITION BY RANGE(pdate)
(partition ohs_ind_201701 values less than (to_date( 2017-02-01 , yyyy-mm-dd)),
 partition ohs_ind_201702 values less than (to_date( 2017-03-01 , yyyy-mm-dd)),
 partition ohs_ind_201703 values less than (to_date( 2017-04-01 , yyyy-mm-dd)),
 partition ohs_ind_201704 values less than (to_date( 2017-05-01 , yyyy-mm-dd)),
 partition ohs_ind__max values less than (maxvalue))
SQL  drop index idx_local;
Index dropped.
SQL  col index_name for a30
SQL  select index_name,table_name,locality,alignment from dba_part_indexes where owner= OHSDBA 
INDEX_NAME TABLE_NAME LOCALITY ALIGNMENT
------------------------------ -------------------- ------------------ --------------------
IDX_LOCAL_NON_PREFIXED OHS_PART LOCAL NON_PREFIXED
SQL  CREATE INDEX idx_global_prefixed ON ohs_part(pdate)
 2 GLOBAL PARTITION BY RANGE(pdate)
 3 (partition ohs_ind_201701 values less than (to_date( 2017-02-01 , yyyy-mm-dd)),
 4 partition ohs_ind_201702 values less than (to_date( 2017-03-01 , yyyy-mm-dd)),
 5 partition ohs_ind_201703 values less than (to_date( 2017-04-01 , yyyy-mm-dd)),
 6 partition ohs_ind_201704 values less than (to_date( 2017-05-01 , yyyy-mm-dd)),
 7 partition ohs_ind__max values less than (maxvalue))
 8 /
Index created.
SQL  select index_name,table_name,locality,alignment from dba_part_indexes where owner= OHSDBA 
INDEX_NAME TABLE_NAME LOCALITY ALIGNMENT
------------------------------ -------------------- ------------------ --------------------
IDX_GLOBAL_PREFIXED OHS_PART GLOBAL PREFIXED
IDX_LOCAL_NON_PREFIXED OHS_PART LOCAL NON_PREFIXED
SQL

到此,相信大家對“Oracle Partition 怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計6730字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 普定县| 阿拉善左旗| 阿合奇县| 五寨县| 崇左市| 吉水县| 兴安盟| 灵宝市| 诸暨市| 南宫市| 台南县| 且末县| 开平市| 淳安县| 伊宁县| 通辽市| 萝北县| 平塘县| 安宁市| 资兴市| 岚皋县| 禄丰县| 黄平县| 西平县| 洞头县| 黔江区| 寻甸| 黄大仙区| 余江县| 化隆| 宁远县| 盐亭县| 英吉沙县| 江安县| 庆元县| 闵行区| 临安市| 边坝县| 莲花县| 嫩江县| 吕梁市|