当ArcSDE版本由9.3升级到9.3.1,原来的ArcSDE9.3存储有相关的要素类,使用sdesetup -o upgrade升级Geodatabase,发现相关的索引无效。这个问在ArcSDE9.3升级ArcSDE9.3.1有这种现象出现。
原来的ArcSDE9.3版本的状态
C:\Documents and Settings\Administrator>sdesetup -o list -d oracle10g -p sde ESRI ArcSDE Server Setup Utility Mon Feb 20 16:21:14 2012 ---------------------------------------------------------------- SDE Server at Rev: 9.3.0. for Oracle10g Build 508 Thu Apr 17 12:23:18 2008 GDB Rev: 2.3.0. ArcSDE authorization key: arcsdeserver,93,ecp.arcgis.all,none,WEJDM×××××××××××××
C:\Documents and Settings\Administrator>sqlplus sde/sde@orcl SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 2月 20 16:21:26 2012 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> set line 2000 SQL> set long 2000 SQL> select index_name,index_type,domidx_status,domidx_opstatus from user_indexe s where table_name='DLTB'; INDEX_NAME INDEX_TYPE DOMIDX_STATU DOMIDX ------------------------------ --------------------------- ------------ ------ SYS_IL0000055653C00016$ LOB R43_SDE_ROWID_UK NORMAL A5_IX1 DOMAIN VALID VALID然后,我们将ArcSDE9.3升级到ArcSDE9.3.1
我们查看一下版本状态
C:\Documents and Settings\Administrator>sdesetup -o list -d oracle10g -p sde ESRI ArcSDE Server Setup Utility Mon Feb 20 17:12:57 2012 ---------------------------------------------------------------- SDE Server at Rev: 9.3.1. for Oracle10g Build 1632 Thu Feb 26 12:05:37 2009 GDB Rev: 2.3.0. ArcSDE authorization key: arcsdeserver,93,ecp.arcgis.all,none,WEJDM××××××××××××那么我们继续查看某个要素类索引对象的状态
C:\Documents and Settings\Administrator>sqlplus sde/sde@orcl SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 2月 20 17:13:06 2012 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> set line 2000 SQL> set long 2000 SQL> select index_name,index_type,domidx_status,domidx_opstatus from user_indexe s where table_name='DLTB'; INDEX_NAME INDEX_TYPE DOMIDX_STATU DOMIDX ------------------------------ --------------------------- ------------ ------ SYS_IL0000055653C00016$ LOB R43_SDE_ROWID_UK NORMAL A5_IX1 DOMAIN IDXTYP_INVLD VALID我们对两者对比可以看到A5_IX1空间索引对象的状态有VALID到IDXTYP_INVLD
两者有什么区别呢?
DOMIDX_STATUS String 反映域索引的状态。 NULL:指定的索引不是域索引。 VALID:索引是有效的域索引。 IDXTYP_INVLD:此域索引的索引类型无效。 DOMIDX_OPSTATUS String 反映在域索引上执行的操作的状态:NULL:指定的索引不是域索引。 VALID:执行操作而未发生错误。 FAILED:操作发生错误并失败。根据这种现象,我们在升级ArcSDE版本时特别是ArcSDE9.3到ArcSDE9.3.1,我们就需要对已经存在在数据库里面的要素类的索引对象进行相关操作。
1:要么删除索引,重新创建
2:要么Rebuild
我们可以使用如下存储过程批量操作
SQL> BEGIN 2 FOR index_cur IN (SELECT index_name FROM user_indexes WHERE ityp_name = ' ST_SPATIAL_INDEX' AND domidx_status <> 'VALID') LOOP 3 EXECUTE IMMEDIATE 'ALTER INDEX '||index_cur.index_name||' REBUILD'; 4 END LOOP; 5 END; 6 / PL/SQL 过程已成功完成。执行完毕后,我们再次查看相关对象的状态
SQL> select index_name,index_type,domidx_status,domidx_opstatus from user_indexe s where table_name='DLTB'; INDEX_NAME INDEX_TYPE DOMIDX_STATU DOMIDX ------------------------------ --------------------------- ------------ ------ SYS_IL0000055653C00016$ LOB R43_SDE_ROWID_UK NORMAL A5_IX1 DOMAIN VALID VALID