oracle分區(qū)索引的失效和重建代碼示例
上一篇文章中我們了解了oracle普通表轉(zhuǎn)化為分區(qū)表的方法的相關(guān)內(nèi)容,接下來(lái)的這篇文章,我們將探討oracle分區(qū)索引的失效和重建問(wèn)題,提供了相關(guān)代碼示例供大家參考,具體如下。
--創(chuàng)建測(cè)試表 SQL> create table t as select object_id,object_name from dba_objects;
表已創(chuàng)建。
SQL> select min(object_id),max(object_id) from t;
MIN(OBJECT_ID) MAX(OBJECT_ID)
-------------- --------------
2 76083
SQL> create table t_part(object_id int,object_name varchar2(1000)) partition by range(object_id)
2 (
3 partition p1 values less than (10000),
4 partition p2 values less than (20000),
5 partition p3 values less than (30000),
6 partition p4 values less than (40000),
7 partition pm values less than (maxvalue));
表已創(chuàng)建。
SQL> insert into t_part select * from t;
已創(chuàng)建72663行。
SQL> commit; --創(chuàng)建本地分區(qū)索引 SQL> create index idx_part_local on t_part(object_name) local;
索引已創(chuàng)建。
創(chuàng)建全局非分區(qū)索引
SQL> create index idx_part_global on t_part(object_id) global;
索引已創(chuàng)建。
刪除其中一個(gè)分區(qū)
SQL> alter table t_part drop partition p1;
表已更改。
全局非分區(qū)索引失效,本地分區(qū)索引沒(méi)有失效
SQL> select status,index_name from user_indexes s where index_name='IDX_PART_GLOBAL'; STATUS INDEX_NAME -------- ------------------------------ UNUSABLE IDX_PART_GLOBAL SQL> select status,index_name from user_ind_partitions s where index_name='IDX_PART_LOCAL'; STATUS INDEX_NAME -------- ------------------------------ USABLE IDX_PART_LOCAL USABLE IDX_PART_LOCAL USABLE IDX_PART_LOCAL USABLE IDX_PART_LOCAL --重建失效索引 SQL> alter index idx_part_global rebuild;
索引已更改。
在刪除表分區(qū)的時(shí)候,可以通過(guò)以下命令進(jìn)行索引重建
alter table t_part drop partition p2 update indexes;
創(chuàng)建全局分區(qū)索引
SQL> drop index idx_part_global;
索引已刪除。
SQL> CREATE INDEX idx_part_global_full ON t_part (object_id) 2 GLOBAL PARTITION BY RANGE (object_id) 3 (PARTITION p1 VALUES LESS THAN (10000), 4 PARTITION p2 VALUES LESS THAN (30000), 5 PARTITION p3 VALUES LESS THAN (MAXVALUE));
索引已創(chuàng)建。
--刪除其中一個(gè)分區(qū) SQL> alter table t_part drop partition p3;
表已更改。
--全局分區(qū)索引失效 SQL> select status,index_name from user_ind_partitions s where index_name='IDX_PART_GLOBAL_FULL'; STATUS INDEX_NAME -------- ------------------------------ UNUSABLE IDX_PART_GLOBAL_FULL UNUSABLE IDX_PART_GLOBAL_FULL UNUSABLE IDX_PART_GLOBAL_FULL SQL> select /*+index(t IDX_PART_LOCAL)*/ * from t_part t where object_name = '/7f6c264c_IIOPAddress'; OBJECT_ID OBJECT_NAME ---------- ----------------------------------- 35031 /7f6c264c_IIOPAddress 35030 /7f6c264c_IIOPAddress SQL> select /*+index(t IDX_PART_GLOBAL_FULL)*/ * from t_part t where object_id > 35000;
select /*+index(t IDX_PART_GLOBAL_FULL)*/ * from t_part t where object_id > 35000
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01502: 索引 'SCOTT.IDX_PART_GLOBAL_FULL' 或這類(lèi)索引的分區(qū)處于不可用狀態(tài)
當(dāng)需要對(duì)分區(qū)表進(jìn)行下面操作時(shí),都會(huì)導(dǎo)致全局索引的失效。
ADD (HASH) COALESCE (HASH) DROP EXCHANGE MERGE MOVE SPLIT TRUNCATE
之后需要對(duì)失效索引進(jìn)行重建,也可以在刪除分區(qū)表的時(shí)候指定 UPDATE INDEXES 直接進(jìn)行索引的重建。
總結(jié)
以上就是本文關(guān)于oracle分區(qū)索引的失效和重建代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:oracle 數(shù)據(jù)庫(kù)啟動(dòng)階段分析、oracle 虛擬專(zhuān)用數(shù)據(jù)庫(kù)詳細(xì)介紹等,有什么問(wèn)題可以直接留言,小編會(huì)及時(shí)回復(fù)大家的。感謝朋友們對(duì)本站的支持!
相關(guān)文章
如何將Oracle的一個(gè)大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(kù)(圖文教程)
這篇文章主要介紹了如何將Oracle的一個(gè)大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(kù)(圖文教程),本文圖文并茂給大家介紹的非常詳細(xì),需要的的朋友參考下吧2017-05-05
在oracle 數(shù)據(jù)庫(kù)中查看一個(gè)sql語(yǔ)句的執(zhí)行時(shí)間和SP2-0027錯(cuò)誤
oracle 數(shù)據(jù)庫(kù)中查看一個(gè)sql語(yǔ)句的執(zhí)行時(shí)間和SP2-0027錯(cuò)誤的解決方法2009-10-10
Oracle啟動(dòng)報(bào)錯(cuò)ora-00119和ora-00132的解決方法
本文給大家分享WINDOWS環(huán)境下,查看Oracle的各項(xiàng)服務(wù)都正常,但是SQL窗口啟動(dòng)ORACLE報(bào)錯(cuò)ora-00119和ora-00132的解決方法,感興趣的朋友跟隨小編一起看看吧2023-09-09
SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比
在項(xiàng)目中用到了Oracle中 Instr 這個(gè)函數(shù),順便仔細(xì)的再次學(xué)習(xí)了一下這個(gè)知識(shí),使用 Instr 函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符2013-10-10
Oracle使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn)的實(shí)例代碼
dbLink是簡(jiǎn)稱(chēng),全稱(chēng)是databaselink,database link是定義一個(gè)數(shù)據(jù)庫(kù)到另一個(gè)數(shù)據(jù)庫(kù)的路徑的對(duì)象,database link允許你查詢遠(yuǎn)程表及執(zhí)行遠(yuǎn)程程序,本文給大家介紹了Oracle如何使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn),需要的朋友可以參考下2024-03-03
Oracle用戶密碼過(guò)期報(bào)錯(cuò)的解決辦法
Oracle數(shù)據(jù)庫(kù) 11g默認(rèn)密碼過(guò)期時(shí)間為180天過(guò)期,針對(duì)密碼過(guò)期企業(yè)一般是采用修改密碼的方式,個(gè)人電腦上則可以將密碼過(guò)期時(shí)間修改為永久,本文給大家介紹了Oracle用戶密碼過(guò)期報(bào)錯(cuò)的解決辦法,需要的朋友可以參考下2024-03-03
Linux一鍵部署oracle安裝環(huán)境腳本(推薦)
這篇文章主要介紹了Linux一鍵部署oracle安裝環(huán)境腳本,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Oracle表空間時(shí)間點(diǎn)恢復(fù)的方法
Oracle表空間是數(shù)據(jù)庫(kù)管理系統(tǒng)中用于存儲(chǔ)數(shù)據(jù)、索引和其他對(duì)象的基本存儲(chǔ)單元,它是Oracle Database結(jié)構(gòu)的核心組成部分,將物理磁盤(pán)空間組織成邏輯上獨(dú)立的區(qū)域,本文給大家介紹了Oracle表空間時(shí)間點(diǎn)恢復(fù)的方法,需要的朋友可以參考下2024-10-10

