修改索引只调用索引名提示索引不存在
问题现象
创建分区表索引HR_staffS_p1_index1,不指定索引分区的名字。
1
|
CREATE INDEX HR_staffS_p1_index1 ON HR.staffS_p1 (staff_ID) LOCAL; |
创建分区索引HR_staffS_p1_index2,并指定索引分区的名字。
1 2 3 4 5 6 |
CREATE INDEX HR_staffS_p1_index2 ON HR.staffS_p1 (staff_ID) LOCAL ( PARTITION staff_ID1_index, PARTITION staff_ID2_index TABLESPACE example3, PARTITION staff_ID3_index TABLESPACE example4 ) TABLESPACE example; |
修改索引分区staff_ID1_index的表空间为example1:
调用“ALTER INDEX HR_staffS_p1_index2 MOVE PARTITION staff_ID2_index TABLESPACE example1;”提示索引不存在。
原因分析
重新创建索引CREATE INDEX HR_staffS_p1_index2 MOVE PARTITION staff_ID2_index TABLESPACE example1,提示索引已存在,然后执行以下SQL命令或者gsql客户端元命令\d+ HR.staffS_p1 查询索引时发现索引已存在。
1
|
SELECT * FROM DBA_INDEXES WHERE index_name = HR.staffS_p1 ; |
推测是当前模式是public模式,而不是hr模式,导致检索不到该索引。
使用“ALTER INDEX hr.HR_staffS_p1_index2 MOVE PARTITION staff_ID2_index TABLESPACE example1;”验证推测,发现调用成功。
接着调用ALTER SESSION SET CURRENT_SCHEMA TO hr;再次调用“ALTER INDEX HR_staffS_p1_index2 MOVE PARTITION staff_ID2_index TABLESPACE example1;”发现设置成功。
解决办法
在操作表、索引、视图时加上schema引用,格式:schema.table。