首页 > Linux操作系统 > Linux操作系统 > 不能建立降序索引的问题的解决
这两天把数据库从9204升级到9208,一路顺利。
今天发现一个奇怪的问题:
SQL> create index IDX_ITEM_UPDATE_DATE on ITEM (ITEM_CATEGORY, ITEM_TYPE, ITEM_SEQ_NUMBER, UPDATE_DATE DESC, ITEM_ID DESC);
Index created
但发现建立出来的索引忽略了desc这个关键字
SQL> select TABLE_NAME,COLUMN_NAME, COLUMN_POSITION,DESCEND from user_ind_columns where index_name='IDX_ITEM_UPDATE_DATE';
TABLE_NAME COLUMN_NAME COLUMN_POSITION DESCEND
------------------------------ -------------------- --------------- -------
ITEM ITEM_TYPE 2 ASC
ITEM ITEM_SEQ_NUMBER 3 ASC
ITEM UPDATE_DATE 4 ASC
ITEM ITEM_ID 5 ASC
ITEM ITEM_CATEGORY 1 ASC
SQL> select dbms_metadata.get_ddl('INDEX','IDX_ITEM_UPDATE_DATE') ddl from dual;
DDL
------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE INDEX "TEST_TAG_GROUP"."IDX_ITEM_UPDATE_DATE" ON "TEST_TAG_GROUP"."ITEM" ("ITEM_CATEGORY", "ITEM_TYPE", "ITEM_SEQ_NUMBER", "UPDATE_DATE", "ITEM_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "TEST3"
我的环境是9208+linux as 4
从9204升级到9208,中间没有修改过任何参数,在原来的9204版本是可以建立降序索引的。
我在另外一台同样环境(9208+linux as 4)的db就没有问题
首先怀疑的是compatible参数问题,但在数据库compatible=9.2.0.0。
多方查找资料无果,还是把注意力返回到参数上。先对比两个库参数的异同:
SQL> SELECT NAME,VALUE FROM v$parameter MINUS SELECT NAME,VALUE FROM ;
NAME VALUE
---------------------------------------------------------------- ------------------------------------------
_ignore_desc_in_index TRUE
aq_tm_processes 1
background_dump_dest /opt/oracle/admin/sc2test/bdump
control_files /opt/oracle/oradata/sc2test/control01.ctl,
core_dump_dest /opt/oracle/admin/sc2test/cdump
db_cache_size 838860800
db_keep_cache_size 0
db_name sc2test
dml_locks 1232
enqueue_resources 1452
global_names FALSE
instance_name sc2test
java_pool_size 16777216
log_buffer 524288
max_rollback_segments 61
mts_service sc2test
open_cursors 300
pga_aggregate_target 314572800
processes 250
service_names sc2test
NAME VALUE
---------------------------------------------------------------- -------------------------------------------
session_cached_cursors 0
sessions 280
sga_max_size 1074861452
shadow_core_dump partial
shared_pool_reserved_size 8388608
shared_pool_size 167772160
timed_statistics FALSE
transactions 308
undo_tablespace UNDOTBS1
user_dump_dest /opt/oracle/admin/sc2test/udump
30 rows selected
SQL>
发现一个可疑参数:_ignore_desc_in_index,用来忽略索引中的desc关键字。
这个参数是几个月前为了fix一个bug修改的。
把它修改后重建索引。
SQL> alter system set "_ignore_desc_in_index"=false;
System altered.
SQL> drop index IDX_ITEM_UPDATE_DATE;
Index dropped
SQL> create index IDX_ITEM_UPDATE_DATE on ITEM (ITEM_CATEGORY, ITEM_TYPE, ITEM_SEQ_NUMBER, UPDATE_DATE DESC, ITEM_ID DESC) compute statistics;
Index created
SQL> select TABLE_NAME,COLUMN_NAME, COLUMN_POSITION,DESCEND from user_ind_columns where index_name='IDX_ITEM_UPDATE_DATE';
TABLE_NAME COLUMN_NAME COLUMN_POSITION DESCEND
------------------------------ -------------------- --------------- -------
ITEM ITEM_TYPE 2 ASC
ITEM ITEM_SEQ_NUMBER 3 ASC
ITEM SYS_NC00040$ 4 DESC
ITEM SYS_NC00041$ 5 DESC
ITEM ITEM_CATEGORY 1 ASC
如我们所愿,降序索引已经建立。
那么原来的降序索引为什么能够建立呢?我猜测可能原因是:
1、_ignore_desc_in_index在9204中无用,但在9208中修正了,它才真正起作用(这可能是一个BUG)
2、索引是在修改_ignore_desc_in_index前建立的(时间太长,忘记了)
不管怎么样,隐含参数还是不动为妙!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63766/,如需转载,请注明出处,否则将追究法律责任。