Показать сообщение отдельно
Старый 10.08.2004, 19:03   #24  
Yaroslav Batozskiy is offline
Yaroslav Batozskiy
Участник
 
15 / 10 (1) +
Регистрация: 19.01.2002
Адрес: Moskow
Цитата:
Я, например, зарекся рыть в эту сторону после того как покопался в 2.5.
Именно из-за того, что есть поля, которые содержат ссылку на RecID, но не унаследованы от RecIdRef.
Скрипт находит такие поля, которые могут являться ссылами по recid. Делает это он довольно достоверно. В нашем скрипте можно еще и явно указать такие поля и, если известно, на что они должны ссылаться.
Цитата:
И надо ли делать эту дефрагментацию?
Надо, если реально исчерпали четырехмиллиардный диапазон уникальных записей и внутри диапазона нет досточно большой дырки, чтоб туда переставить счетчик (т.е. использованные recid более-менее равномерно размазаны по всему диапазону)
Цитата:
а теперь экспортируй компанию и импортируй обратно с удалением предыдущих значений
При экспорте-импорте как раз и потеряешь ссылки в полях, которые не наследуются от recid. Кроме того, как это делать с базой в 100ГБ ? Или даже в 10 ?
Цитата:
Я один раз запускал штатную процедуру на небольшой тестовой базе. Вроде работает.
Серьезные проблемы со ссылками. Со всеми вытекающими... (AX3SP1) Глубоко не копал, т.к. скорость её выполнения меня все равно не устраивает
Цитата:
Только лог транзакций на MS SQL у меня раздулся очень сильно.
Если хотите все обновления провести в одной транзакции--конечно раздуется. Можно каждое обновление проводить в своей транзакции--но при этом надо наготове иметь ленту, чтоб восстановить backup
Цитата:
а что происходит при достжении этого предела и какие последствия ?
Даже если cycle стоит 0, пойдет по кругу со второго запуска. Со всеми вытекающими...--"Запись уже существует" в случайные моменты с небольшой вероятностью
Цитата:
а потом вроде как будут заполняться дырки.
не будут.
Цитата:
Да - при достижении максимального значения RecId, он сбрасывается в минимально-возможное значение в табличке последовательностей
На самом деле, если посмотреть на битовую карту значений 2^31-1 и -2^31 можно увидеть, что он не сбрасывается, а система внутри оперирует числом как беззнаковым и просто прибавляет к нему единицу, в результате чего устанавливается старший бит, который для знаковых целых означает отрицательный полудиапазон--число становится минус два миллиарда и растет к нулю (абсолютное значение уменьшается до нуля)