【发布时间】:2014-05-20 09:58:32
【问题描述】:
我正在使用 OCI 在 C/C++ 中以自定义 Table/Column/Constraint/Index 数据结构实例化 Oracle Schema 数据模型的客户端表示。为此,我选择:
- all_tables
- all_tab_cmets
- all_col_cmets
- all_cons_columns
- all_constraints
- 等等...
然后我使用 OCI 来描述所有表,以获取有关列类型的精确信息。这是可行的,但我们的 CI 测试场在此模式数据模型自省代码中经常失败,因为另一个测试正在并行运行,并在这一系列查询和 describe 中间创建/删除表我正在拨打的电话。
因此,我的问题是我如何原子地内省这个架构,以便另一个会话不会同时改变我正在内省的那个架构?
在选择和描述周围使用只读可序列化事务就足够了吗? IE。 MVCC 是否适用于 Oracle 的数据字典?此类系统词典出现SnapShot too Old 错误的可能性有多大?
如果不可能实现完整的原子性,我可以采取哪些步骤来最大程度地减少获得不一致/陈旧信息的可能性?
我在想可能是左连接以减少查询数量,和/或将 OCIDescribeAny() 调用替换为连接到其他表的其他字典访问,以便在单个查询中获取所有表/列信息?
对于这个并发问题,我不胜感激。谢谢,--DD
【问题讨论】:
标签: oracle oracle-call-interface