gpt4 book ai didi

sql - 如何可靠地列出和删除 Oracle 中的所有空间索引?

转载 作者:太空狗 更新时间:2023-10-30 01:51:45 25 4
gpt4 key购买 nike

在我的开源数据库迁移项目中Flyway ,我有一个功能可以清除当前数据库架构中的所有对象,而不会删除架构本身。

典型的实现方式如下:

  • 列出所有对象
  • 为这些对象生成删除语句

Oracle Spatial Indexes 一直让我很伤心。

我如何可靠地枚举它们以生成 DROP INDEX xyz 语句?

注意:这必须适用于 XE、10g 和 11g。 MDSYS 架构中的所有引用都必须消失。

我目前的解决方案是这样的:

在 XE 上:

  • 从 mdsys.user_sdo_geom_metadata 中删除
  • 从 mdsys.sdo_index_metadata_table 中删除 sdo_index_owner = USER
  • SELECT object_type, object_name FROM user_objects WHERE object_type = 'TABLE'
  • DROP *table_name* CASCADE CONSTRAINTS PURGE/* 对所有表 */

在 Oracle 10g 上:

  • 从 mdsys.user_sdo_geom_metadata 中删除
  • SELECT object_type, object_name FROM user_objects WHERE object_type = 'TABLE' and object_name not like 'MDRT_%$'
  • DROP *table_name* CASCADE CONSTRAINTS PURGE/* 对所有表 */

10g 似乎级联删除了 MDSYS.sdo_index_metadata_table 中的元数据和空间索引表(MDRT_1234$ 等)的删除。

XE 没有。

10g 和 XE 都没有级联删除 MDSYS.user_sdo_geom_metadata 中的元数据

最佳答案

我通过使用

枚举所有 SPATIAL 索引来解决它
select INDEX_NAME from USER_SDO_INDEX_INFO

并使用 INDEX_NAME 生成类似 DROP 的语句

DROP INDEX my_index

关于sql - 如何可靠地列出和删除 Oracle 中的所有空间索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com