现在的位置: 首页 > 综合 > 正文

ArcSDE9.3升级到ArcSDE9.3.1索引无效的解决方法

2013年05月31日 ⁄ 综合 ⁄ 共 2983字 ⁄ 字号 评论关闭

当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×××××××××××××

查看一下ArcSDE9.3环境下,存储要素类索引状态(以某个要素类为例,VALID)

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

【上篇】
【下篇】

抱歉!评论已关闭.