Будет ли rowid оставаться неизменным, если я экспортирую из одного оракула, а затем импортирую в другой оракул - PullRequest
0 голосов
/ 04 марта 2019

У меня есть таблица оракула, и я экспортирую данные с моего сервера оракула, а затем импортирую данные на другой сервер оракула. ​​

Мой вопрос: для каждой строки таблицы будет храниться rowidбез изменений после импорта в другого оракула?

Я думаю, что ответ НЕТ, но я понятия не имею, как генерируется rowid.

1 Ответ

0 голосов
/ 04 марта 2019

Нет, идентификаторы строк почти наверняка изменятся.Даже в пределах одной базы данных из документов :

Если вы, например, удалите и заново вставите строку с помощью утилит «Импорт и экспорт», то ее идентификатор строки может измениться.

Идентификатор строки представляет местоположение строки в блоке, в файле данных, в табличном пространстве.(Эта документация объясняет это более подробно.) Даже если целевая база данных имеет те же табличные пространства и файлы данных, импорт будет загружать данные в файлы и блоки настолько эффективно, насколько это возможно, и не будет пытаться сохранить старые идентификаторы строк - которые онв любом случае не будет знать, так как они не являются частью экспортируемых данных.Даже если бы он мог попытаться, это потребовало бы записи каждой строки в определенное место на диске, что могло бы немного замедлить процесс, и существующие данные в целевой БД могли уже использовать тот же идентификатор строки.

ROWID является псевдостолбцом, не являющимся частью фактической строки, и было бы бессмысленно включать его в экспортируемые данные.

Хотя вы можете использовать псевдостолбец ROWID в предложениях SELECT и WHEREзапроса, эти значения псевдостолбцов фактически не хранятся в базе данных.

Это даже не обязательно уникально.

Кроме того, вы не должны использовать его напрямую,за исключением, возможно, одного запроса / оператора ( здесь используется только один ) или процедуры, поскольку они могут измениться даже в существующей базе данных, если Oracle решит, что нужно что-то реорганизовать.Отчасти поэтому в документации также говорится:

Не следует использовать ROWID в качестве первичного ключа таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...