在INDEX 處於UNABLE 狀態下插入資料
在環境上把一個INDEX 處於unusable狀態:
這是一個9IR2的環境
SQL> create table test as select * from dba_objects;
Table created.
SQL> insert into test select * from dba_objects;
34084 rows created.
SQL> create index i_test_1 on test(object_id);
Index created.
SQL> alter index i_test_1 unusable;
Index altered.
這時對TABLE 進行 dml操作時,如果dml語句沒有對test.object_id 自動進行操作時,語句可以正常操作。
但如果包括了test.object_id 欄位,sql會報錯:
SQL> update test set OBJECT_ID = 2000;
update test set OBJECT_ID = 2000
*
ERROR at line 1:
ORA-01502: index 'SYS.I_TEST_1' or partition of such index is in unusable state
SQL> insert into test select * from dba_objects;
insert into test select * from dba_objects
*
ERROR at line 1:
ORA-01502: index 'SYS.I_TEST_1' or partition of such index is in unusable state
SQL> insert /*+ append */ into test select * from dba_objects;
2
SQL> insert /*+ append */ into test select * from dba_objects;
insert /*+ append */ into test select * from dba_objects
*
ERROR at line 1:
ORA-26028: index SYS.I_TEST_1 initially in unusable state
可以看到在9I下,如果對含有UNUSABLES INDEX 欄位的table進行dml操作,ORACLE是不允許的。
要解決這個問題,那需要在當前session中更改SKIP_UNUSABLE_INDEXES 為true。
執行的指令碼:
SQL> alter session set SKIP_UNUSABLE_INDEXES =true;
Session altered.
SQL> insert /*+ append */ into test select * from dba_objects;
34085 rows created.
SQL> select status from user_indexes where index_name='I_TEST_1';
STATUS
------------------------
UNUSABLE
SQL> alter index I_TEST_1 rebuild;
Index altered.
SQL> select status from user_indexes where index_name='I_TEST_1';
STATUS
------------------------
VALID
在10g下, oracle可以忽略DML 語句中含有unusable index的欄位。原因是skip_unusable_indexes 引數從9I的會話級別的
上升到INSTANCE級別的。
而且預設值為TRUE.
SQL> select * from v$version where rownum < 2;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
SQL> show parameter skip
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
skip_unusable_indexes boolean TRUE
SQL> create table test as select * from dba_objects;
Table created.
SQL> insert into test select * from dba_objects;
50008 rows created.
SQL> create index i_test_1 on test(object_id);
Index created.
SQL> alter index i_test_1 unusable;
Index altered.
SQL> insert /*+ append */ into test select * from dba_objects;
50009 rows created.
SQL> select status from user_indexes where index_name='I_TEST_1';
STATUS
--------
UNUSABLE
SQL> alter index I_TEST_1 rebuild;
Index altered.
SQL> select status from user_indexes where index_name='I_TEST_1';
STATUS
--------
VALID
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/40239/viewspace-573313/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SESSION處於KILLED狀態下如何找出對應的程式Session
- CRM下載物件一直處於Wait狀態的原因物件AI
- 3.4.2 將資料庫置於 Quiesced 狀態資料庫UI
- SQLServer資料庫處於恢復掛起狀態的解決辦法SQLServer資料庫
- Jtti:SQLServer資料庫處於恢復掛起狀態的解決辦法JttiSQLServer資料庫
- JavaScript狀態資料JavaScript
- sqlsever處理資料庫的恢復掛起狀態SQL資料庫
- 在 Laravel 的資料庫模型中使用狀態模式Laravel資料庫模型模式
- 理解資料狀態管理
- Mysql在資料插入後立即獲取插入的IdMySql
- hive 動態分割槽插入資料表Hive
- mybatis插入資料、批量插入資料MyBatis
- Firedac 在資料表中插入BLOB資料的方法
- KVM虛擬機器處於暫停狀態怎麼處理虛擬機
- 【YashanDB資料庫】yasboot查詢資料庫狀態時顯示資料庫狀態為off資料庫boot
- MogDB備機處於standby need-repair(WAL)狀態AI
- Hbase 之 某Region長期處於 RIT 狀態 ( 空洞 )
- linux結束處於Tl狀態的程序,釋放記憶體資源Linux記憶體
- 益普索:全球80%的女性處於隔離狀態
- openguass 資料庫狀態查詢資料庫
- Flutter資料&狀態管理之[- InheritedWidget -]Flutter
- 介面異常狀態統一處理方案在 Firefox 下無效的原因和解決方案Firefox
- Elasticsearch叢集狀態健康值處於red狀態問題分析與解決(圖文詳解)Elasticsearch
- CCAI 2020 | 塗威威:AI發展、監管處於動態博弈狀態AI
- 新 IT 挑戰下,資料正處於危險之中
- ITU:2021年全球29億人仍處於離線狀態
- WCS:全球僅23%陸地處於近乎自然的荒野狀態
- 關於iOS 狀態列、導航欄的幾處筆記iOS筆記
- Oracle DG資料庫狀態轉換Oracle資料庫
- Vue同構(三): 狀態與資料Vue
- win10中word怎麼切換改寫狀態_win10怎樣切換插入狀態和改寫狀態Win10
- [譯] 5 分鐘讓 Drawer 在狀態列下可見
- Elasticsearch上建立的index是yellow健康狀態的解決方案ElasticsearchIndex
- Kubernetes怎麼處理一直在Terminating狀態的namespacenamespace
- 12、MySQL Case-show processlist 狀態一直處於Sending to clientMySqlclient
- WebRTC ICE 狀態與提名處理Web
- NetApp使有狀態應用程式更易於在Kubernetes中完成APP
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle
- Salesforce 大資料量處理篇(二)IndexSalesforce大資料Index