|  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, это вызовет ошибку. | 
|  |