Имя: Пароль:
1C
 
Реструктуризация таблицы с большим количеством документов
0 Zigzug
 
13.11.08
21:30
Имеется база на 1с8, sql-трехзвенка, релиз 13. Релиз, на всякий случай уточню, менять совсем не вариант. В базе есть документ, на данный момент документов этого вида порядка 4 миллионов.

Понадобилось добавить этому документу реквизит. При добавлении прямо в лоб впечатались очень досадные грабли. При попытке сохранения в БД измененной конфигурации, 1С начинает что-то нудно и долго считать. Процесс аппликейшна во время этой черной мессы мило пухнет, распухая для критичных (для 8.0, со слов самой 1С) полутора гигов. После чего вся эта красота валится с предсмертным криком "Размер выборки превысил...". К этому моменту успевает обработаться 2.9 миллиона документов, что, разумеется, не радует. Резать базу - тоже, как ни печально, не вариант.

Проведен эксперимент. Сделана копия таблицы, содержащей реквизиты документа, truncate исходную таблицу, реструктуризация на пустой, затем восстановление данных в получившуюся таблицу из копии. В результате получен журнал документов с реквизитами шапки, но угроблены табличные части. То есть, эта зараза при реструктуризации, что-то там еще имеет наглось считать в связанных таблицах.

Вопросы:
- достаточно ли будет провести аналогичную описанной процедуру с таблицами ТЧ, чтобы получить на выходе исходные, но уже реструктуризированные документы
- если нет - какие еще таблицы в БД (типы объектов) могут быть связаны с процессом изменения таблицы документа. Профайлер пытать не хочется, он в случае 1с-а слишком много лишнего знает
- Назначение в таблицах timestamp поля _Version. То есть, умом я понимаю, что оно в данном случае не существенно, но шут его знает, что на него завязано в 1С-овской реализации.
- Профессионалам - может, существует какой-нибудь другой, простой и приятный выход из моей ситуации

Заранее спасибо
1 H A D G E H O G s
 
13.11.08
21:39
(0) Щас глянем, что там ресткуктуризируется...
P.S. Реально новые реквизиты в рег. сведений выносить?
2 Zigzug
 
13.11.08
21:44
Относительно. По этому реквизиту предполагаются частые и массовые грязные выборки. Учитывая, что оно все в комплексе и так еле шевелится, дополнительных джойнов хотелось бы избежать.
3 H A D G E H O G s
 
13.11.08
21:46
(2) Почему еле шевелится?
4 Zigzug
 
13.11.08
21:53
(3) Потому что общий размер базы перевалил за 320 гигов при 480 средневзятых активных пользователях. И потому что во всей базе используется, по сути, три вида документов и два бухгалтерских регистра. Но это моя местечковая лирика, все-таки хотелось бы услышать, как проблему то решить ))
5 H A D G E H O G s
 
13.11.08
22:00
(0) Первичный анализ показал - надо экспортировать и табличные части
6 ptiz
 
13.11.08
22:16
А если пойти таким путем:
сделать базу из пустого cf, добавить реквизит, добавить колонку (с получившимся именем) в таблицу рабочей базы, заменить в рабочей таблицу config и configsave.
7 Zigzug
 
13.11.08
22:23
(6) Точно не вариант - при создании новой базы все идентификаторы таблиц/полей слетают в нирану, то бишь - задуманное 1С-ом. Они у них, видите ли, генерятся онлайн. Расхождения, по крайней мере в моем случае, превышают все мыслимые - укокошусь исправлять ))
8 H A D G E H O G s
 
13.11.08
22:29
(7) Нифига не слетает
9 H A D G E H O G s
 
13.11.08
22:30
(8) Стучись в аську
10 H A D G E H O G s
 
13.11.08
22:30
Даже движения остаются
11 H A D G E H O G s
 
13.11.08
22:30
Только ТЧ удаляются
12 H A D G E H O G s
 
13.11.08
22:31
1С 8.1.10.50
13 ptiz
 
13.11.08
22:38
(7) Сделать копию базы средством SQL, сделать truncate этой большой таблицы, добавить реквизит. Тогда ничего не слетит.
14 ptiz
 
13.11.08
22:42
(13) Кроме config и configsave понадобится еще params (может и DBSchema ? тут точно не знаю, но на копии попробовал всё это скопировать - прокатило)
15 H A D G E H O G s
 
13.11.08
22:54
Короче:
Экспорт таблицы документа и таблиц ТЧ в другую базу SQL (можно в туже базу, в другие таблицы),
Truncate TABLE  таблицы документа и таблиц ТЧ, натягивание реквизита с датой в Пофигураторе, обновление конфы, заход в SQL, развешение на новую колонку Allows NULLS, импорт из резервных таблиц, UPDATE основной таблицы, новой колонки нулевой датой, запрещение Allows NULLS на новую колонку. Вроде все, счаст еще откатаю..
Ошибка? Это не ошибка, это системная функция.