如何可靠地列出和删除Oracle中的所有空间索引?
-
13-10-2019 - |
题
在我的开源数据库迁移项目中 飞速, ,我的功能可以清洁当前数据库架构中的所有对象,而无需删除模式本身。
典型的实施作用如下:
- 列出所有对象
- 生成这些对象的下降语句
甲骨文空间索引 不过,一直给我带来很多悲伤。
我怎样才能 可靠地枚举 它们是为了产生Drop Index XYZ语句?
注意:这必须对 XE,10G和11G. 。 MDSYS模式中的所有参考都必须消失。
我目前的解决方案看起来像这样:
在XE上:
- 从mdsys.user_sdo_geom_metadata删除
- 从mdsys.sdo_index_metadata_table删除sdo_index_owner =用户
- 从user_objects中选择object_type,object_name其中object_type ='table'
- drop * table_name *所有表的级联约束 / * * /
在Oracle 10G上:
- 从mdsys.user_sdo_geom_metadata删除
- 从user_objects中选择object_type,object_name其中object_type ='table'和object_name不喜欢'mdrt _%$'
- drop * table_name *所有表的级联约束 / * * /
10G似乎在mdsys.sdo_index_metadata_table和删除空间索引表(MDRT_1234 $等)中撤离了元数据。
XE没有。
10G和XE都不会在mdsys.user_sdo_geom_metadata中撤离元数据
解决方案
我通过使用使用所有空间索引来解决它
select INDEX_NAME from USER_SDO_INDEX_INFO
并使用index_name生成诸如
DROP INDEX my_index
其他提示
在10克,尝试 xxx_sdo_index_yyy 视图或或者寻找具有类型的对象 SPATIAL_INDEX
. 。您可以先丢弃这些,然后丢弃桌子。我不知道这些是否存在于XE上。
不隶属于 StackOverflow