| 
			
			 | 
		#1 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
			
			
			Падает стандартный импорт с ошибкой "Вызов ttscommit без вызова ttsbegin"
			 
			
			Добрый день, коллеги! 
		
		
		
		
		
		
			Ситуация такая: DAX4.0, Версия ядра 4.0.2501.116, версия приложения 4.0.2501.348, база данных MS SQL 2005. Проблема следующая - при импорте большого объема данных (около 2Гб dat-файл) система падает с ошибкой "Вызов ttscommit без вызова ttsbegin". Кто сталкивался с этим? Как боролся? На форуме искал, но не нашел. 
				__________________ 
		
		
		
		
	Начать что-либо, никогда не поздно - просто начни сейчас.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо огромное, Вы мне очень помогли. 
		
		
		
		
		
		
			Но! 1. Я умею искать источник ошибки. 2. Для того, чтобы ее повторить мне надо ждать 5 часов, так как она проявляется под конец загрузки. 3. Я указал место возникновения ошибки, могу уточнить - класс SysDataImport, метод ImportBuffer строка 23. 4. Я задал конкретный вопрос - есть ли опыт фикса именно падения импорта именно с такой ошибкой. 
				__________________ 
		
		
		
		
	Начать что-либо, никогда не поздно - просто начни сейчас.  | 
| 
	
 | 
| 
			
			 | 
		#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. А вдруг?  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Там всего 258 таблиц, в самой большой чуть больше 800 000 записей. Так что через int а это 4 миллиарда никак не перескочит. 
		
		
		
		
		
		
			Кроме того, предположим поломался этот счетчик? И что оно же попадает на эту строчку повторно. Т.е. где-то срабатывает лишний ttscommit. Вопрос - где? С учетом того что на подготовку переноса мне осталось менее 20 часов, я не могу себе позволить повторно запустить. Вот и спрашиваю, ну а пока готовлю запасной аэродром.  
		
				__________________ 
		
		
		
		
		
			Начать что-либо, никогда не поздно - просто начни сейчас. Последний раз редактировалось skof; 19.01.2012 в 09:43.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Скорее всего эта ошибка (непарный вызов ttsbegin/ttscommit) закралась где-то в коде, который вызывается на insert таблицы. Попробуйте в файле для импорта оставить по одной записи для каждой таблицы и поймайте в отладчике. Ну или на info.add напишите логирование со стеком вызова.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если tts level больше одного,  и где то в коде вызывается ttsabort то он сбрасывает tts level сразу в 0. 
		
		
		
		
		
		
		
	Т.е. если дальше в коде есть любой ttscommit, это вызовет ошибку.  | 
| 
	
 |