Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Время ожидания истекло (число прочтений - 2303 )
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Время ожидания истекло
30. Ноября 2009 :: 09:58
Печать  
Помогите плиз с решением этой проблемы. Делается обрезка базы размером в 42 гига. Ориентировочное кол-во документов 1600000.
Код
Выбрать все
DBConn = CreateObject("ADODB.Connection");
	DBConn.ConnectionString = СокрЛП(СтрокаСоединения);
	DBConn.CommandTimeout = 1200;              

	DBConn.Open();  

	DBConn.Execute("CREATE TABLE  ##ID2 (IDDOC1 char (9))");

	НеУдаляемыеДокументы.ВыбратьСтроки();
	Пока НеУдаляемыеДокументы.ПолучитьСтроку()=1 цикл
		Если НеУдаляемыеДокументы.Флаг = 2 тогда
			НеУдаляемыйДок = СоздатьОбъект("Документ."+НеУдаляемыеДокументы.ИдДокумента);

			НеУдаляемыйДок.ВыбратьДокументы();
			Пока НеУдаляемыйДок.ПолучитьДокумент()=1 цикл

				ВнутреннийИДДока = ЗначениеВСтрокуВнутр(НеУдаляемыйДок.ТекущийДокумент());
				IDДока = GetID(ВнутреннийИДДока);
				DBConn.Execute("INSERT INTO ##ID2 (IDDOC1) VALUES('"+ _IdToStr(СокрЛП(IDДока))+"')");

			КонецЦикла;                                      
		КонецЕсли;
	КонецЦикла;

	ДатаОтформатированная = Строка(Формат(ДатаПо,"ДГГГГММДД")+"Z");   // Z - означает на конец дня
	ДатаОтформатированнаяНаНачало = Строка(Формат(ДатаС,"ДГГГГММДД"));  
	                                                              

	DBConn.Execute("CREATE TABLE  ##ID (IDDOC char (9) primary key clustered)");                                    
	DBConn.Execute("INSERT INTO ##ID SELECT DISTINCT IDDOC FROM _1SJOURN WHERE IDDOC NOT IN (SELECT IDDOC1 FROM ##ID2) AND LEFT(DATE_TIME_IDDOC,8) BETWEEN '"+ДатаОтформатированнаяНаНачало+"'"+" AND '"+ДатаОтформатированная+"'");

    ТекстЗапроса = "
	|SELECT sysobjects.name AS TableName, syscolumns.name AS ColumnName
	|FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (syscolumns.name = 'IDDOC') OR (syscolumns.name = 'DOCID')
	|";                        

	RecordSet = DBConn.Execute(ТекстЗапроса);

	Пока RecordSet.EOF=0 Цикл
		DBConn.Execute("DELETE FROM "+RecordSet.Fields("TableName").Value+" with (tablock) "+" WHERE "+RecordSet.Fields("ColumnName").Value + " IN (SELECT IDDOC FROM ##ID) ");
	RecordSet.MoveNext(); // Переходим на следующую запись
	КонецЦикла;

	DBConn.Execute("DROP TABLE ##ID");  
	DBConn.Execute("DROP TABLE ##ID2"); 

  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Время ожидания истекло
Ответ #1 - 30. Ноября 2009 :: 10:16
Печать  
ну так может какой-то батч на удаление выполняется больше 20 минут?

CommandTimeout
Цитата:
Устанавливает или возвращает число секунд ожидания выполнения команды. Значение по умолчанию - 30. Чтение и запись. Используйте это свойство, если возникают проблемы из-за плотного сетевого трафика или загруженности сервера. Если время, указанное в CommandTimeout, истекает до завершения выполнения команды, происходит ошибка, и ADO отменяет команду. Если Вы установите свойство в ноль, ADO будет ждать бесконечно, пока команда не будет выполнена. Удостоверьтесь, что используемый провайдер поддерживает свойство CommandTimeout. Установка CommandTimeout объекта Connection никак не связана с установкой свойства CommandTimeout объекта Command.

http://www.script-coding.info/ADO.html
  
Наверх
 
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Время ожидания истекло
Ответ #2 - 30. Ноября 2009 :: 10:29
Печать  
Спасибо, попробую. Делается это пока на локальной машине. SQL стоит 2005 Standart без паков.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Время ожидания истекло
Ответ #3 - 30. Ноября 2009 :: 12:00
Печать  
(0) опиши хотя бы идею что делает скрипт из (0).
Документы это не только таблица журналов но еще
как минимум dh  и  dt

У меня документов  больше чем у тебя но это не повод сворачивать базу (по крайней мере для меня).

(0) Может у тебя регистры не закрываются ? и сначала надо этот вопрос решить?
  
Наверх
 
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Время ожидания истекло
Ответ #4 - 30. Ноября 2009 :: 12:22
Печать  
Выставил CommandTimeOut = 0 все прошло нормально. Скрипт удаляет все документы из всего где они встречаются, за исключением которые нельзя удалять (выбираются вручную). перед удалением формируются остатки по БУ и по регистрам.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать