移动表空间后重建索引

549
16
跳到解决方案
09-26-2022 02:15
yockee"id=
通过
偶然的因素

你好,

我使用的是Oracle 19c和ArcGIS企业10.9

最近我把一些特征类移动到另一个表空间。我观察索引使用查询:

SELECT table_name, index_name, index_type, status, NUM_ROWS
FROM DBA_INDEXES WHERE STATUS='不可用' AND owner =' SDE'

Normal和Domain索引变为“不可用”。我知道我可以用ArcGIS Pro重建索引,但我认为这很烦人,因为我有1000个特征类。我更喜欢使用phyton脚本或查询/ plsql。这里有人能帮我或者至少给我指个方向吗?

此外,我尝试删除属性Index。但是这个按钮是灰色的。为什么?我可以重建空间索引。请看下图:

yockee_0 - 1664194438691. - png"li-image-url=

我如何删除,然后重建属性索引再次与相同的名称(或与不同的名称,它的罚款)?



谢谢

标签(4)
0荣誉
16日回复
yockee"id=
通过
偶然的因素

我仍然无法将空间索引存储移动到新的位置。

我是这样做的:

-删除索引:删除索引sde。A280_IX1力量;

-运行查询:"创建索引sde。A280_IX1REBUILD PARAMETERS('st_grids=1,3,0 st_srid=32748 tablespace=NEWTBS');

—运行:重建索引A280_IX1成功。但是这并没有将表空间位置更改为一个新位置

—运行:重建表空间——错误:ORA-29871:无效的alter选项的域索引

—运行:ALTER INDEX表空间——ORA-02243:无效的ALTER INDEX或ALTER MATERIALIZED VIEW选项

—运行:重建表空间NEWTBS;——ORA-02243:无效的ALTER INDEX或ALTER MATERIALIZED VIEW选项

当我问"SELECT * FROM dba_indexes WHERE rownum < 5 AND table_name = 'STREET'”,表空间= NULL而且状态=有效

我错过了什么?有什么合法的方法来正确地做这件事吗?

谢谢。

0荣誉
yockee"id=
通过
偶然的因素

更新:原来默认的表空间名称总是NULL。有趣!

我是这样做的:

—观察原来的表空间:SELECT * FROM user_indexes where index_name = 'A346_IX1'——表空间名= NULL
- Drop it: Drop INDEX A346_IX1 FORCE;--成功
—重新创建:CREATE INDEX SDE。A280_IX1
街(形状)
索引类型为sde.st_spatial_index
PARAMETERS('st_grid =1,3,0 st_srid=32748表空间NEWTBS');--成功
-再次观察:SELECT * FROM user_indexes where index_name = 'A346_IX1'————the tablespacename = NULL
两次观测的结果完全相同。

问题1:
但是为什么默认表空间总是NULL?那么所有的空间索引都存储在哪里呢?

此外,我在这里读到一篇文章:https://support.esri.com/en/technical-article/000009505.它表示空间索引的名称遵循以下模式:S_IDX$。如果我这样做,那么我的特征类有空间索引名:S1244_idx$。

因此,现在我得到了2个空间索引:A346_IX1 vs S1244_idx$。

问题2:哪个是正确的空间索引?

然后修改表空间的位置:ALTER TABLE "S1244_IDX$" MOVE tablespace NEWTBS;---成功

检查是否有效:SELECT tablespace_name
从user_indexes
WHERE index_name = 'S1244_IDX$';——tablespace为NULL。

注:我发现A346_IX1与查询:
SELECT table_name, index_name, column_name
从dba_ind_columns
table_owner =“钻”
AND table_name
(街)
order BY table_name, column_position;

0荣誉
MarceloMarques"id=
亚博搜索yabovip28点com

如果你有一个特征类注册为传统版本,那么你的特征类有基表,添加表和删除表,一个空间索引将被添加到a表和B表,因此你有2个空间索引。Oracle将表空间名称显示为null,因为index_type是一个域索引,但是如果你检查索引所在的表空间大小,你会注意到索引在正确的表空间中。我希望这能说明问题。

Marcelo Marques首席产品工程师Esri |
OCP - Oracle认证专业|
0荣誉
yockee"id=
通过
偶然的因素

我读在这里.上面写着:使用ST_Geometry存储和空间索引创建的特性类在Oracle数据库中创建了一个额外的表。空间索引表名为S_IDX$,其中是表的几何索引值。可以通过查询SDE获取。ST_GEOMETRY_COLUMNS表。空间索引表被创建为Oracle Indexed Organized table (IOT)。ST_Geometry属性上的空间索引显示为通过企业管理器查看时,A_IX1的值表示LAYERS表中存储的LAYER_ID值。

根据那篇文章,所以我在想那些两个索引实际上是一样的.我错了吗?

但我认为,A_IX和S$_IX是两个不同的实体。

索引“A_IX”可以在“dba_ind_columns,而“S$_IX”可以在“user_indexes

A_IX不能直接移动.它必须被丢弃,然后重新创建。但是tablespace_name仍然显示为NULL。

S$_IX可以直接移动MOVE表空间NEWTBS1

我应该移动两个A_IX and S$_IX ?

而且,特性类没有作为版本注册。

我只是很困惑,还在学习完全理解它。请原谅我。

0荣誉
MarceloMarques"id=
亚博搜索yabovip28点com

@yockee

问题:根据那篇文章,所以我在想那些两个索引实际上是一样的.我错了吗?但我认为,A_IX和S$_IX是两个不同的实体。

答:它们是两个不同的索引。

问题:我应该移动两个A_IX and S$_IX ?

答:是的

例子:

marcelomarques_0 - 1670609180316. - png"li-image-url=

marcelomarques_6 - 1670609970384. - png"li-image-url=

marcelomarques_4 - 1670609764481. - png"li-image-url=

marcelomarques_5 - 1670609874767. - png"li-image-url=

--------------------------------------------------------------------------------------------------------
——重建索引
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
——表街道
--------------------------------------------------------------------------------------------------------
重建表空间gis_bindex——index_type =域
/*
错误报告-
ORA-29871:域索引的无效alter选项
29871.00000 - "域索引的无效修改选项"
*原因:用户指定了修改域索引的无效选项。
操作:使用有效的选项重新发出alter语句。
* /
生成索引SQL DDL,然后删除索引,并尝试在另一个表空间上重新创建索引!!

删除索引" gis "." a241_ix1 ";
——指数“GIS”。"A241_IX1" dropped.

创建索引“gis”。"A241_IX1" ON "GIS"."STREETS" ("SHAPE")
Indextype是“sde”。"ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS=6000:0:0 ST_SRID=300003')
表空间“GIS_BINDEX”;
/*
错误报告-
ORA-29850:创建域索引的无效选项
29850.00000 - "创建域索引的无效选项"
*原因:用户指定了一个无效的选项,如ASC, DESC, SORT或a
平行子句,分割子句或者物理属性条款
*操作:选择一个用于创建域索引的有效子句。
* /

删除索引" gis "." a241_ix1 ";
——添加表空间作为参数
创建索引“gis”。"A241_IX1" ON "GIS"."STREETS" ("SHAPE")
Indextype是“sde”。"ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS=6000:0:0 ST_SRID=300003表空间= GIS_BINDEX”);
/*
错误报告-
ORA-29855:在执行ODCIINDEXCREATE例程时发生错误
ORA-02216:期望表空间名称
ORA-06512:在“SYS.”DBMS_SQL",第1199行
ORA-06512:在“SDE。ST_DOMAIN_METHODS”,第1425行
29855.00000 - "在执行ODCIINDEXCREATE例程时发生错误"
*原因:Failed to successfully execute the ODCIIndexCreate例程。
*操作:检查例程编码是否正确。
* /

删除索引" gis "." a241_ix1 ";
——添加表空间作为参数
创建索引“gis”。"A241_IX1" ON "GIS"."STREETS" ("SHAPE")
Indextype是“sde”。"ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS=6000:0:0 ST_SRID=300003表空间GIS_BINDEX”);
——指数“GIS”。"A241_IX1" created. --Works!!! but do not think it uses the tablespace parameter !!!

删除索引" gis "." a241_ix1 ";
创建索引“gis”。"A241_IX1" ON "GIS"."STREETS" ("SHAPE")
Indextype是“sde”。"ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS=6000:0:0 ST_SRID=300003');
——指数“GIS”。"A241_IX1" created.

结论:不能移动域索引!!

——构建域索引
https://docs.oracle.com/en/database/oracle/oracle-database/19/addci/building-domain-indexes.html GUI……

--------------------------------------------------------------------------------------------------------
重新构建表空间gis_bindex——index_type =正常
——索引R290_SDE_ROWID_UK改变。

--------------------------------------------------------------------------------------------------------
——表A290
--------------------------------------------------------------------------------------------------------
重新构建表空间——index_type =正常
索引A290_PK改变。

重新构建表空间gis_aindex——index_type =域
结论:不能移动域索引!!详情见上面的例子!!

重新构建表空间gis_aindex——index_type =正常
——索引A290_STATEID_IX1被修改。

——表D290
重新构建表空间——index_type =正常
索引D290_PK改变。

重新构建表空间——index_type =正常
——索引D290_IDX1被修改。

——表S349_IDX $
重建表空间gis_sindex——index_type =物联网
/*
错误报告-
ORA-28650: IOT主索引无法重建
28650.00000 -“无法重建IOT上的主索引”
*原因:试图在IOT-TOP上发布alter index rebuild
*操作:使用Alter table MOVE重新组织表(IOT)
* /
move表空间gis_sindex parallel 4
——表S349_IDX$被修改。

重建表空间gis_sindex——index_type =正常
-索引S349$_IX2改变


我希望这能说明问题。

Marcelo Marques首席产品工程师Esri |
OCP - Oracle认证专业|
yockee"id=
通过
偶然的因素

非常感谢。这就澄清了…: slightly_smiling_face:"title=

0荣誉
MarceloMarques"id=
亚博搜索yabovip28点com

不客气!

Marcelo Marques首席产品工程师Esri |
OCP - Oracle认证专业|
0荣誉