【问题标题】:Get all the index information for a given schema -- db2获取给定模式的所有索引信息 -- db2
【发布时间】:2013-10-15 19:51:28
【问题描述】:

我正在编写一个 JDBC 程序来获取一些数据库元数据信息,作为其中的一部分,我想查询给定模式中的所有索引。 我查看了一些 JDBC API 并从 DatabaseMetaData 接口,可以使用像 getTables 这样的方法来获取给定模式的所有表。我试图找到类似的东西(或使用某些 API 的组合编写)来获取模式上的所有索引、视图等信息。有没有办法得到它?例如,对于索引,有一个方法 - getIndexInfo 但对于模式中的每个表,我都需要调用此方法。我的数据库是 db2。

【问题讨论】:

  • 使用JDBC提供的接口:没有。如果您不想遍历所有表并为每个表调用getIndexInfo,您可能需要直接查询 DB2 的信息模式。

标签: java jdbc db2


【解决方案1】:

从 Syscat 架构获取数据不正确。在 ZOS 环境中 Syscat 可能存在也可能不存在,因为在安装时您可以选择不安装 Syscat 模式。所以最好使用 Sysibm 模式。

【讨论】:

    【解决方案2】:

    我在尝试了一些方法后做了以下事情 1. 围绕 JDBC 调用编写了一个包装器以简化我的工作。 2. 查询syscat schema like

    select tabname from syscat.TABLES where tabschema = ?
    
    1. 编写了一些 java 实用程序来比较 2 模式返回的 2 组结果,并进行了一些手动比较。

    如果我找到更好的解决方案,将发布它。非常感谢所有的帮助。

    【讨论】:

      【解决方案3】:

      我会使用DB2 Catalog Views 来获取信息。

      例如,如果您想要一个表的所有索引,您可以使用这样的查询(我假设您在这里使用的是 Linux/Unix/Windows 上的 DB2):

      SELECT *
      FROM SYSCAT.INDEXES
      WHERE tabname   = @tablename 
        AND tabschema = @schema
      ORDER BY indname
      

      【讨论】:

      • 不建议您使用 SYSIBM 视图,因为它们通常会在 DB2 版本之间发生变化。记录在案的目录视图位于 SYSCAT 模式中(您的链接指向该模式)——它们保证更加稳定和向后兼容。
      • 糟糕。猜猜那是我习惯于查询 DB2 for z/OS(甚至没有 SYSCAT 模式)目录视图。 :)我将其更改为使用 SYSCAT 视图。
      • 谢谢.. Syscat 正在工作.. 让我尝试使用 Syscat 提供的不同产品进行更多工作..
      • 我可以使用 syscat 取得一些进展。但是,在新模式中查询 syscat.tabauth 时,我收到一条错误消息,提示我的 id 无权访问此表。如何比较 2 模式中授予不同用户的授权?
      猜你喜欢
      • 2012-06-12
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多