如果我从一个Oracle导出然后再导入到另一个Oracle,rowid将保持不变

时间:2019-03-04 12:58:36

标签: oracle

我有一个oracle表,我从oracle服务器导出数据,然后将数据导入另一个oracle服务器。

我的问题是:对于表中的每一行,在导入到另一个oracle中后,rowid会保持不变吗?

我猜答案是否定的,但我不知道如何生成rowid。

1 个答案:

答案 0 :(得分:3)

否,行ID几乎肯定会更改。即使在同一数据库中,from the docs

  

例如,如果使用“导入和导出”实用程序删除并重新插入一行,则其行ID可能会更改。

行ID代表该行在表空间中数据块内,数据块内的位置。 (该文档对此进行了更多说明。)即使目标数据库具有相同的表空间和数据文件,导入也将尽可能有效地将数据加载到文件和块中,并且不会尝试保留旧的行ID。无论如何都不知道,因为它们不属于导出数据。即使可以尝试,这也将涉及将每一行写入磁盘上的特定位置,这会大大降低速度,并且目标DB中的现有数据可能已经在使用相同的行ID。

ROWID是一个伪列,不是实际行的一部分,因此将其包含在导出的数据中将毫无意义。

  

尽管您可以在查询的SELECT和WHERE子句中使用ROWID伪列,但这些伪列值实际上并未存储在数据库中。

它甚至不一定是唯一的。

此外,您实际上不应该直接使用它,除非可能在单个查询/语句(here is one use)或过程中使用,因为如果Oracle决定需要重组,它们甚至可以在现有数据库中更改。东西。这就是为什么文档还说:

  

您不应将ROWID用作表的主键。