oracle 如果data_object_id不唯一,如何从ROWID确定表空间?

4nkexdtk  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(114)

如果data_object_id在数据库中不是唯一的,就像Tanel Poder demonstrated一样(尽管是从2008年开始的),那么Oracle如何从ROWID中唯一地确定relative_fno,以便利用ROWIDrelative_fno
例如,一个分区位于不同表空间的分区表的全局索引将需要全局索引中的扩展ROWID来唯一标识索引条目所引用的行的索引号。
我正在使用Oracle Enterprise Edition 19c,但我怀疑答案只需要Oracle 8+。

wydwbb8l

wydwbb8l1#

Poder的文章演示了ROWID在 * 数据库 * 中的复制,而不是在 * 表 * 中的复制。当使用ROWID时,无论是从索引还是显式地在WHERE子句中,Oracle都知道它来自哪个表。这将data_object_id的可能引用缩小到只有一个可能的分区/段,这意味着只有一个可能的分区/段。
Poder给出的一个潜在问题的例子是一个不切实际的场景,程序使用ROWID作为一种跨表的全局标识符,其唯一性依赖于用户代码,这是任何人都不应该做的。(不仅尝试跨实体使用全局标识符是没有意义的,而且ROWID永远不应该被获取它的游标的生命周期之外的代码使用,更不用说作为一个永久标识符了。它是不稳定的,如果由于更新分区键列或分区被拆分、合并或交换而导致行移动,或者如果DBA或调度管理脚本执行任何移动/重组/压缩工作,它就会发生变化。)因此,这是一个自Oracle 8引入以来可能没有人或几乎没有人会遇到的“问题”。

相关问题