关于Oracle架构数据模型的完整信息是否可以自动选择?

关于Oracle架构数据模型的完整信息是否可以自动选择?,oracle,oracle-call-interface,Oracle,Oracle Call Interface,我正在使用OCI在C/C++中实例化定制表/列/约束/索引数据结构中的Oracle模式数据模型的客户端表示。为此,我从以下方面进行选择: 所有的桌子 所有标签注释 所有的意见 所有列 所有约束条件 等等 然后我使用OCI来描述所有的表,以获得关于列类型的精确信息。这是可行的,但是我们的CI测试农场经常在这个模式数据内省代码中失败,因为另一个测试并行运行,在这个查询的中间创建/删除表并描述我所做的调用。 因此,我的问题是,我如何从原子的角度对这个模式进行反思,以使另一个会话不会同时改变我正在构

我正在使用OCI在C/C++中实例化定制表/列/约束/索引数据结构中的Oracle模式数据模型的客户端表示。为此,我从以下方面进行选择:

  • 所有的桌子
  • 所有标签注释
  • 所有的意见
  • 所有列
  • 所有约束条件
  • 等等
然后我使用OCI来描述所有的表,以获得关于列类型的精确信息。这是可行的,但是我们的CI测试农场经常在这个模式数据内省代码中失败,因为另一个测试并行运行,在这个查询的中间创建/删除表并描述我所做的调用。 因此,我的问题是,我如何从原子的角度对这个模式进行反思,以使另一个会话不会同时改变我正在构建的模式

在selects和DESCRIPES周围使用只读可序列化事务就足够了吗?即MVCC是否适用于Oracle的数据字典?在这样的系统字典中,快照太旧错误的可能性有多大

如果无法实现完整的原子性,我是否可以采取措施最大限度地减少获取不一致/陈旧信息的可能性

我在想,是否可以使用左连接来减少查询的数量,或者使用连接到其他表的其他字典访问来替换OCISCRIBEANY()调用,以便在单个查询中获取所有表/列信息


我非常感谢专家对这个并发问题的意见。谢谢,--DD

一个典型的读写冲突。从我的头顶上,我看到了两种方式:

  • 在“内省”和“另一个测试”中使用包
  • 重写您的回顾查询,以便它返回您所需要的一件大事。有多种方法可以做到这一点:
  • 使用和类似
  • 使用listag并获取一个大字符串或clob
  • 只需使用一组联合就可以得到一个结果集,因为它保证是一致的
  • 希望有帮助