19.01.2012, 06:47 | #1 |
NavAx
|
Падает стандартный импорт с ошибкой "Вызов ttscommit без вызова ttsbegin"
Добрый день, коллеги!
Ситуация такая: DAX4.0, Версия ядра 4.0.2501.116, версия приложения 4.0.2501.348, база данных MS SQL 2005. Проблема следующая - при импорте большого объема данных (около 2Гб dat-файл) система падает с ошибкой "Вызов ttscommit без вызова ttsbegin". Кто сталкивался с этим? Как боролся? На форуме искал, но не нашел.
__________________
Начать что-либо, никогда не поздно - просто начни сейчас. |
|
19.01.2012, 07:52 | #2 |
Участник
|
|
|
19.01.2012, 08:51 | #3 |
NavAx
|
Спасибо огромное, Вы мне очень помогли.
Но! 1. Я умею искать источник ошибки. 2. Для того, чтобы ее повторить мне надо ждать 5 часов, так как она проявляется под конец загрузки. 3. Я указал место возникновения ошибки, могу уточнить - класс SysDataImport, метод ImportBuffer строка 23. 4. Я задал конкретный вопрос - есть ли опыт фикса именно падения импорта именно с такой ошибкой.
__________________
Начать что-либо, никогда не поздно - просто начни сейчас. |
|
19.01.2012, 09:22 | #4 |
Участник
|
Не за что
Цитата:
Хм. интересный код X++: // -------------- if (readCnt mod 1000 == 0) { readCntInTrans = 1; //set counter to one because currently one record is processing ttscommit; ttsbegin; } Есть безумное предположение, что счётчик readCnt типа Integer может переполнится (2Гб dat-файл всё-таки). Попробуйте изменить на int64. А вдруг? |
|
19.01.2012, 09:41 | #5 |
NavAx
|
Там всего 258 таблиц, в самой большой чуть больше 800 000 записей. Так что через int а это 4 миллиарда никак не перескочит.
Кроме того, предположим поломался этот счетчик? И что оно же попадает на эту строчку повторно. Т.е. где-то срабатывает лишний ttscommit. Вопрос - где? С учетом того что на подготовку переноса мне осталось менее 20 часов, я не могу себе позволить повторно запустить. Вот и спрашиваю, ну а пока готовлю запасной аэродром.
__________________
Начать что-либо, никогда не поздно - просто начни сейчас. Последний раз редактировалось skof; 19.01.2012 в 09:43. |
|
19.01.2012, 14:36 | #6 |
Участник
|
Скорее всего эта ошибка (непарный вызов ttsbegin/ttscommit) закралась где-то в коде, который вызывается на insert таблицы. Попробуйте в файле для импорта оставить по одной записи для каждой таблицы и поймайте в отладчике. Ну или на info.add напишите логирование со стеком вызова.
|
|
19.01.2012, 17:12 | #7 |
Участник
|
Если tts level больше одного, и где то в коде вызывается ttsabort то он сбрасывает tts level сразу в 0.
Т.е. если дальше в коде есть любой ttscommit, это вызовет ошибку. |
|