Oracle ROWID在表中是唯一的。我不明白存储在同一个集群中的两个不同表的两行如何具有相同的rowid,因为ROWID格式的最后三个字符表示数据库块中的行号?
我知道聚集表中的行保留在同一个数据库块中,但由于 ROWID 包括行号,不应该区分数据库块中的两行吗?
很简单。因为聚集表的“友好”行一起存储在块中,这意味着您可以拥有相同的 rowid。
在下图中(来自frontiernet),第一个部门行的行号为 1,第一个 emp 行的行号为 1。这是第一次出现。
在此之后,我们有 emp 2, emp 3... 毕竟这个部门中的所有 emp,如果有足够的空间,你有第 2 行的部门,但他的 rowid 遇到了前一个部门的 emp 2。
等等。
发生这种情况是因为 rowid 中的行号与其表和当前块相关。
通常,rowid 值唯一标识数据库中的一行。但是,在同一个簇中一起存储的不同表中的行可以具有相同的 rowid。
结帐:http: //download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns008.htm