Измените столбец автоинкремента на столбец глобального автоинкремента

Наша компания использует Sybase, и мы планируем установить систему Mobilink (система репликации данных). Поэтому нам нужно перейти от использования столбцов с автоинкрементом к глобальным столбцам с автоинкрементом.

Мой вопрос в том, какие шаги мне нужно предпринять, чтобы это работало должным образом. Уже есть тысячи строк данных, в которых используется обычный автоинкремент по умолчанию.

Я думаю, мне нужно создать новый столбец со значением по умолчанию для глобального автоинкремента, заполнить его данными (номер (*)), переключить на него ПК, отбросить старые FK, отбросить старый столбец, переименовать новый столбец в старый, затем повторно примените FK.

Есть ли здесь более простой способ выполнить то, что мне нужно?

Благодарность!


person numone    schedule 08.12.2010    source источник


Ответы (2)


Обычно это способ сделать это. Но есть некоторые конкретные заявления, которые вызывают у меня беспокойство. Также последовательность. Я не уверен в вашем опыте, термины, которые вы используете, могут быть точными, а могут и нет.

Для каждой таблицы ...

... переключить на него ПК

А как насчет значений FK в дочерних таблицах? Или вы имеете в виду, что вы их тоже измените?

... отбросьте старые FK

Хорошо, это ограничение.

... отбросьте старый столбец, переименуйте новый столбец в старый, затем повторно примените FK.

Что именно вы имеете в виду? Добавить ограничение FK обратно? Это не изменит существующие данные, а будет применяться ко всем добавленным новым строкам.

Надеюсь, вы понимаете, что я имею в виду под подозрительной последовательностью ваших задач. Перед тем, как отбросить old_PK_column в родительский, вам необходимо:

  1. Добавьте отброшенные ограничения FK в каждую дочернюю таблицу.

  2. Для каждой дочерней таблицы: ОБНОВИТЬ все значения FK до new_PK_column.

  3. Затем отбросьте old_PK_column.

person PerformanceDBA    schedule 13.12.2010
comment
ваши комментарии в конце (1,2,3) - это то, что я говорил в другой терминологии. Благодарность! поставит галочку :) - person numone; 13.12.2010
comment
@numone. Спасибо! Любые дополнительные вопросы, пожалуйста, отправьте. - person PerformanceDBA; 15.12.2010

вы просто меняете способ генерации значений PK, поэтому достаточно:

ALTER TABLE <table>
  modify <column> default global autoincrement (1000000); 

использовать размер раздела 1,000,0000

Также убедитесь, что вы установили глобальный идентификатор базы данных в каждой базе данных, например:

SET OPTION PUBLIC.global_database_id = 10;

Итак, следующий ПК, который будет сгенерирован, будет 10 000 001.

person Koen Willocx    schedule 07.12.2011