Имя: Пароль:
1C
1С v8
Перевод большой базы в SQL.
0 citrus
 
12.02.13
10:43
Всем доброго дня.

Появилась задача перевести в SQL БП8 2.0
Сейчас база файловая, объем 20гб!

При попытке загрузить в SQL пишет, что не уникальное значение пытается записаться в уникальную колонку и все валится.

Сделали ТИИ, все пункты кроме пересчета итого и реструктуризации прошли.
На этих пунктах валится по нехватки памяти. Чекбд ошибок не находит.

Мы в тупике. Что делать?
1 Zebburius
 
12.02.13
10:45
Попробуйте создать РБД, в которой второй узел на SQL, а потом через их синхронизацию (желательно не через файл, а какой-нибудь COM) проведите первоначальный обмен.
2 Maxus43
 
12.02.13
10:47
реструктуризацию надо бы всё таки. делайте на мощном компе с большим количеством мозгов
3 ZanderZ
 
12.02.13
10:47
(0) обрезать...
4 Живой Ископаемый
 
12.02.13
10:47
какое значение большая она или нет?
если была маленькой и такая же ошибка - как бы тему назвал?
5 citrus
 
12.02.13
10:48
2) кол-во мозгов значения не имеет. запускали на сервере >15гб ОЗУ. Когда процесс !С съедает более 1.5 гб памяти вылетает ошибка.
6 wise
 
12.02.13
10:48
делай ВСЁ на х64
7 Живой Ископаемый
 
12.02.13
10:49
2(3) и что случится?
8 H A D G E H O G s
 
12.02.13
10:49
Текст ошибке в студию!
9 wise
 
12.02.13
10:50
6+ было ТАКЖЕ - помогло...
10 citrus
 
12.02.13
10:50
(3)  пробовали свернуть. зависает на регистре РАСХОДЫУСН и так же по памяти валится. причем сворачиваем первые 2 месяца учета.
11 krbIso
 
12.02.13
10:50
(6)не поможет
(0)попробуйте найти эти неуникальные значения
12 citrus
 
12.02.13
10:51
(6) делать на х64.  64 винда или 1С или все вместе? :)
13 citrus
 
12.02.13
10:51
(11) а где и как их искать?
14 H A D G E H O G s
 
12.02.13
10:52
(13) Мы бы сказали, если бы ты хотя бы текст ошибки написал, поклонник телепатов хренов.
15 Maxus43
 
12.02.13
10:53
в скуле найти можно, а вот в файловой я хз как)
16 wise
 
12.02.13
10:53
(12) винда
17 H A D G E H O G s
 
12.02.13
10:55
(15) Serg_1960 даже обработку писал под это дело.
18 wise
 
12.02.13
10:55
16+ ГДЕ ж ты клиента ТАКОГО(х64) возьмёшь...
19 Maxus43
 
12.02.13
10:55
(18) на линупсе) 8.3
20 ДенисЧ
 
12.02.13
10:57
создать новую базу на скуле.
Через выгрузку-загрузку xml перенести данные.
21 citrus
 
12.02.13
10:59
(20) сколько будет весть такая XML'ка?  нереально!
22 H A D G E H O G s
 
12.02.13
10:59
(20) Бугага.
Товарищь неосиливает переписать текст ошибки.

Спасибо, пошел писать код в хорошем настроении.
23 МихаилМ
 
12.02.13
11:01
(0)
если с скл разбираетесь,
вот заготовка ddl триггера для отмены индекса

v8: Ошибка в базе. Ошибка в таблице Config.
24 citrus
 
12.02.13
11:02
(22) да успокойся ты умник. сейчас заливается и будет скрин ошибки.
25 Maxus43
 
12.02.13
11:03
(23) на этапе загрузки у них, базы как таковой на скуле нету...
26 H A D G E H O G s
 
12.02.13
11:04
(24) Я спокоен. Спасибо за заботу.
27 ДенисЧ
 
12.02.13
11:05
(21) кусками.
28 МихаилМ
 
12.02.13
11:08
(25)
база есть. таблиц нету
29 citrus
 
12.02.13
11:19
(27) т.е. сначала перенести доки, потом еще их проводить же надо?
30 ZanderZ
 
12.02.13
11:20
(29) можно отдельно движения потом перенести
31 citrus
 
12.02.13
15:11
(30) ну это нереальная история.
32 citrus
 
12.02.13
15:11
Ребята, вот текст ошибки

Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo._AccRgAT2495' and the index name '_AccRgA2495_ByPeriod_TRRRRRRN'. The duplicate key value is (Jan  1 2001 12:00AM, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1
33 orefkov
 
12.02.13
15:30
(0)
Можно попробовать взять это: http://infostart.ru/public/166557/
и ковырять файл базы данных, по таблице AccRgAT2495, искать, где дубли. Исправить.
34 H A D G E H O G s
 
12.02.13
15:35
(32) Тупо найти этот регистр накопления и отключить по нему итоги.
35 ДенисЧ
 
12.02.13
15:43
(29) Сначала справочники. Потом доки. Видами и периодами. Сразу с движениями.
36 1Сергей
 
12.02.13
15:47
20 gb файловая? и она ещё не загнулась?
37 ДенисЧ
 
12.02.13
15:47
(36) Как видишь, уже загибается :-)
38 citrus
 
12.02.13
16:31
(37) вообще она еще жива  и работает, но ооооооочень медленно )
39 citrus
 
12.02.13
16:32
(34) а как определить какой это регистр?
40 citrus
 
12.02.13
16:32
может вообще выключить итоги во всех и так переносить, а в sql  е уже включить. О! идея! :)
что скажете?
41 Sammo
 
12.02.13
16:50
(40) Или так
(39) Что-то вроде получитьструктурухраненияБД()
42 citrus
 
12.02.13
21:51
Новости с фронта:
отключил итоги во всех регистрах
попробовал сделать реструктуризацию, вышла ошибка переполнения памяти
сделал сжатие - прошло нормально, база стала 15гб.
выгрузил dt и при попытке залить в SQL опять вышла ошибка

Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo._AccRgAT2495' and the index name '_AccRgA2495_ByPeriod_TRRRRRRN'. The duplicate key value is (Jan  1 2001 12:00AM, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1


идеи есть? :)
43 H A D G E H O G s
 
12.02.13
21:59
Я могу подключиться и глянуть.
44 acsent
 
12.02.13
22:02
(32) АААА, знакомая ошибка. У тебя в регистре бухгалтерии неправильные субконто стоят. Нужно сделать приведение типов
45 acsent
 
12.02.13
22:03
держи с барского плеча
http://sdrv.ms/12c3jHt
46 citrus
 
12.02.13
22:33
(45) спасибо :)  запустил, что-то обрабатывает.  как будут новости сообщу :)
47 Hmster
 
13.02.13
00:11
вообще ТИИ должно было помочь.
учу как делать такую ошибку в бухе.
берем бухию 20, где нет учета по складам.
делаем документы с движениями по счетам ТМЦ.
Включаем склады.
Теперь если выгрузить ДТ и попробовать загрузить в скуль будет писать ошибку не уникальности индекса, но ТИИ нормально спасает
48 citrus
 
13.02.13
00:45
(47) ТИИ валится на пересчете итогов и реструктуризации.
хотя когда итоги отключил, один фиг ошибка.
49 citrus
 
13.02.13
00:46
(45) привел типы твоей обработкой и один фиг ошибка

Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo._AccRgAT2495' and the index name '_AccRgA2495_ByPeriod_TRRRRRRN'. The duplicate key value is (Jan  1 2001 12:00AM, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1
50 citrus
 
13.02.13
00:47
настораживает в этой ошибке дата "Jan  1 2001 12:00AM" это запись такая где то в базе или документ на этой дате?
51 H A D G E H O G s
 
13.02.13
00:51
(50) Давай подключусь
52 Demiurg
 
13.02.13
00:51
пересчитайте итоги перед выгрузкой
53 Serg_1960
 
13.02.13
01:03
(имхо) Вообще-то это проблема даже не в индексах, или в  итогах... Это "пустые" записи. Фича файловой - неуникальные значения в индексах не рушат базу, как в SQL.

PS: вон, в соседней ветке сижу, подсказываю как определить что за таблица глючная - v8: Слетела база 1с8 , не проходит проверку на целосность
54 Hmster
 
13.02.13
01:07
(48) ТИИ при проверке логической и физической целостности, даже если оставить "не изменять" исправляет данную ошибку.
55 citrus
 
13.02.13
01:13
(51) давай. лучше завтра днем. через что амми или тим?
56 H A D G E H O G s
 
13.02.13
01:14
(55) Лучше Тим, стучи в аську
ICQ#: 374-881-272
57 citrus
 
13.02.13
01:16
(52) Вячеслав, я уже писал, что пересчет не работает. Падает по нехватке памяти. Правда я отключил потом итоги и все равно заливка в SQL падает.
58 Demiurg
 
13.02.13
01:19
возможно загрузиться в бд2, там отличия
возможно данные загрузились целиком уже, но не построились индексы из-за не уникальности, тогда нужно просто удалить дубль
59 Demiurg
 
13.02.13
01:21
ВЫБРАТЬ
Подзапрос.Период,
Подзапрос.Регистратор,
<измерения>,
СУММА(Подзапрос.КоличествоЗаписей) КАК КоличествоЗаписей
ИЗ
(ВЫБРАТЬ
Хозрасчетный.Период КАК Период,
Хозрасчетный.Регистратор КАК Регистратор,
<измерения>,
1 КАК КоличествоЗаписей
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный) КАК Подзапрос

СГРУППИРОВАТЬ ПО
Подзапрос.Период,
Подзапрос.Регистратор,
<измерения>

ИМЕЮЩИЕ
СУММА(Подзапрос.КоличествоЗаписей) > 1

попробуйте найти такие записи
60 Hmster
 
13.02.13
01:27
(0) хочешь сказать что проверка логической и ссылочной целостности не выдала тебе никаких сообщений?
у тебя стояло "только тестирование" или "тестирование и исправление" ???
61 citrus
 
13.02.13
01:28
(60) тестирование и исправление. ошибки были, но они поправились. загрузка все равно не проходит.
62 citrus
 
13.02.13
01:29
сейчас запустил ТИИ снова, поставил все галки кроме реинд и пересчет итогов.  посмотрим, может что-то напишет про пустые графы.
63 sanja26
 
13.02.13
01:39
классификатор адресов предлагали очистить?
64 Serg_1960
 
13.02.13
01:49
"Не смешите мои копыта"(с)

Анекдот в тему: "Мотор не заводится. Я всё уже перепробывал - фары протирал, бампер пинал..."
65 sanja26
 
13.02.13
01:54
))
66 MadHead
 
13.02.13
02:34
утилиту для теста файловых баз не пробовали запускать? ChkDBF или как-то так. Давно уже не доводилось файловые ковырять
67 Hmster
 
13.02.13
07:36
(66) в данном случае не помогает
(61) у меня в базе на скуле склады не включались, база была не маленькой, вот и пришлось извращаться. Проверка целостности мне помогла.
68 citrus
 
13.02.13
08:08
ТИИ со всеми галками кроме Сжатия и Рестр прошло без ошибок, ТИИ с реструктуризацией сразу валится в ошибку.

см скрин
http://s006.radikal.ru/i215/1302/eb/b0fed2879392.jpg

значения NULL на каком этапе очищаются?
может выгрузку загрузку в файл еще сделать, а потом уже в SQL?
69 Hmster
 
13.02.13
10:12
(68) у тебя итоги и реструктуризацию не сделает. можешь не париться
70 Hmster
 
13.02.13
10:14
щас попробую в демке сделать
71 Hmster
 
13.02.13
11:03
в демке ситуацию не получилось смоделировать.
нашел журнал регистрации. вот что мне ТИИ писало
Субконто регистров бухгалтерии. Хозрасчетный. Проверка уникальности записей
   В таблице AccRgED509 обнаружены неуникальные записи со значениями полей:
       Period = DATETIME(2011,4,25,15,38,37)
       Recorder = 173:A520001D7D04DC0211E081D31BEEB9B0
       LineNo = 23
       Kind = 448:BEE54541A4A688B745534FDD1DF6EB52
       Correspond = 1
   Неуникальность записей устранена
72 citrus
 
13.02.13
11:10
это такой подробный отчет ТИИ дает? это при какой галке он такие неуникальности чистит?
73 Hmster
 
13.02.13
11:43
(72) при 2х галках проверки целостности. фишка в том что на демке модуляция проблемы не работает. я позже попробую еще.
я бы предложил тебе создать узел плана обмена и выгружать кусками с разделением по метаданным
74 H A D G E H O G s
 
13.02.13
11:52
Здорово всем.
75 citrus
 
13.02.13
11:55
(74) привет. сейчас доеду до офиса и можно будет посмотреть.
76 citrus
 
13.02.13
14:00
(74)   H A D G E H O G s я на связи как будет возможность стучи.
77 МихаилМ
 
13.02.13
14:36
+(23)
с учетом, что ошибка может быть в нескольких таблицах
проще отключить создание всех уникальных индексов.
при этом сохранить в таблицу
tsql команды создания индексов.

затем исполнить скрипты из таблицы
с теми, которые не исполнятся разбираться персонально.
тк в некоторых случаях записи нужно сгруппировать или удалить дубли или удалить совсем.

в любом случае  потребуется только 1 загрузка из dt
78 citrus
 
13.02.13
15:17
(77) т.е. идея такая - при загрузке отключить формирование индексов и потом их сформировать отдельно?
но как отключить это процесс во время загрузки?
79 Hmster
 
13.02.13
15:21
(78) а можешь не смотря на ошибку загрузки запустить базу и узнать какая таблица парит мозг через ПолучитьСтруктуруХраненияБазыДанных.
может его выгрузить в файл, потом очистить, потом загрузить?
80 citrus
 
13.02.13
15:28
(79) вообще эта SQL база после такой глючной загрузки запускается и даже документы вроде все на месте.
Оборотки сравнить не получается, т.к. итоги отключил. Сейчас в SQL запустил процесс включения итогов, посмотрим чем закончится.

Если включение итогов пройдет нормально, может так и оставить?
Как можно проверить базу на пригодность к работе после такого перехода на SQL?
81 Hmster
 
13.02.13
15:31
(80) логика подсказывает что регистр у тебя не мог весь загрузиться, вопрос были ли в очереди на загрузку еще какие-нибудь регистры или только этим обойдется...
82 citrus
 
13.02.13
15:33
(81) ну оборотка это и покажет, опять же ТИИ можно сделать может где битые ссылки остались.
так?
83 acsent
 
13.02.13
15:34
там еще нужно лишние субконто удалять. моя обработка этого не делает.
Вот код из кд
Для каждого СтрокаТаблицы Из Объект.Движения.Хозрасчетный Цикл
   
   ВидыСубконтоКУдалению = Новый Массив;
   
   Для Каждого ЭлементСубконто Из СтрокаТаблицы.СубконтоДт Цикл
       Если СтрокаТаблицы.СчетДт.ВидыСубконто.Найти(ЭлементСубконто.Ключ, "ВидСубконто") = Неопределено Тогда
           ВидыСубконтоКУдалению.Добавить(ЭлементСубконто.Ключ);
       КонецЕсли;
   КонецЦикла;
   
   Для каждого ВидСубконто Из ВидыСубконтоКУдалению Цикл
       СтрокаТаблицы.СубконтоДт.Удалить(ВидСубконто);
   КонецЦикла;
   
   
   ВидыСубконтоКУдалению.Очистить();
   
   Для Каждого ЭлементСубконто Из СтрокаТаблицы.СубконтоКт Цикл
       Если СтрокаТаблицы.СчетКт.ВидыСубконто.Найти(ЭлементСубконто.Ключ, "ВидСубконто") = Неопределено Тогда
           ВидыСубконтоКУдалению.Добавить(ЭлементСубконто.Ключ);
       КонецЕсли;
   КонецЦикла;
   
   Для каждого ВидСубконто Из ВидыСубконтоКУдалению Цикл
       СтрокаТаблицы.СубконтоКт.Удалить(ВидСубконто);
   КонецЦикла;
84 citrus
 
13.02.13
15:34
а вообще крайняя идея это РИБ.
надо будет сегодня ночью попробовать запустить.
85 МихаилМ
 
13.02.13
15:41
(78)
пример в (23)
надо изменить для создания индекса.
+ логировать

http://msdn.microsoft.com/ru-ru/library/ms173781.aspx
86 Hmster
 
13.02.13
15:41
(84) вообще можно попробовать на копии переписать все движения по глючному регистру. может не много времени займет если в транзакции.
87 citrus
 
13.02.13
15:49
(86) это регистр бух хозрасчетный )))) 99% времени
88 Hmster
 
13.02.13
15:58
(87) через внешнее соединение долго будет перегружать движения? не пробовал. может так будет проще всего?
89 romix
 
13.02.13
16:03
У меня падала загрузка в 7-й базе, пока я не создал пустую конфу с константой и не загрузил поверх нее.
90 citrus
 
13.02.13
16:06
(89) "пустую конфу с константой" это как?
91 МихаилМ
 
13.02.13
17:36
это (90) это ромикс приивсем моем уважении
не угадал.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан