【问题标题】:Same ROWID in Oracle Clustered TablesOracle 聚簇表中的相同 ROWID
【发布时间】:2011-09-20 23:08:24
【问题描述】:

Oracle ROWID 是said 在表中是唯一的。我不明白存储在同一个集群中的两个不同表的两行如何具有相同的rowid,因为ROWID format的最后三个字符表示数据库块中的行号?

我知道聚簇表中的行保存在同一个数据库块中,但由于 ROWID 包含行号,不应该区分数据库块中的两行吗?

【问题讨论】:

    标签: oracle rowid


    【解决方案1】:

    很简单。因为聚簇表的“友好”行一起存储在块中,这意味着您可以拥有相同的 rowid。

    在下图中(来自frontiernet),第一个部门行的行号为 1,第一个 emp 行的行号为 1。这是第一次出现。

    在此之后,我们有 emp 2, emp 3... 在此部门中的所有 emp 之后,如果有足够的空间,则您有第二行用于部门,但在上一个部门中遇到了 emp 2 的 rowid。

    等等。

    发生这种情况是因为 rowid 中的行号与其表和当前块相关。

    【讨论】:

    • 好的。如果我理解正确,您的意思是因为 dept 和 emp 列值存储在同一个“行块”中,它们最终都会具有相同的行 ID?聚类将 EMP_Table 嵌套在 DEPT_Table 中,DEPT_Table 的主键也是 Cluster Key。
    • 你很接近。问题是行号是什么意思(rowid的最后三个字符)。如果它表示这个块中表x的第n行,我的解释是有效的。
    • 我不明白你说“你很亲密”的原因。 emp 和 dept 表的行不是由聚集键(即 dept_no)存储的,因此它们最终具有相同的行 ID 吗?知道集群的不同表部分中的两行如何具有相同的 rowid 是发布上述问题的主要原因。
    • 是的,它是正确的,但是对于一行部门,您有很多行 emp。因此,只有少数具有相同的 rowid,而不是全部 :) 对吗?
    • 是的,听起来不错:)。最好得到 Oracle DBA 的确认。
    【解决方案2】:

    通常,rowid 值唯一标识数据库中的一行。但是,在同一个簇中存储在一起的不同表中的行可以具有相同的 rowid。

    结帐:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

    【讨论】:

    • 这就是问题所在。 ROWID中的行号可以不区分这些行吗?
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多