Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пакет SSIS вылетает по таймауту  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
Приветствую.
Передо мной встала задача сделать SSIS-пакет, который на основе списка таблиц копирует эти таблицы с одного сервера на другой.
В SSIS-пакете я создал Execute SQL Task, который имеет на выходе указанный список таблиц, и передает их в Script Task.
В Script Task создается пакет, SMO-коннекшны и Transfer SQL Server Objects Task. Всё работает, но после часов двух работы (копируемый объем данных велик) пакет вылетает с ошибкой: Execution failed with the following error: "Истекло время ожидания (Timeout). Время ожидания истекло до завершения операции или сервер не отвечает. The statement has been terminated.".
Искал в инете, где надо установить таймаут - не нашел. Помогите, пожалуйста. Заранее благодарен.
Код из скрипта прилагаю:

public void Main()
{
	// Create a package to execute TransferSqlServerObjectsTask
	Package pkg = new Package();
	Executable MoveTable = pkg.Executables.Add("STOCK:TransferSqlServerObjectsTask");
	TaskHost MoveTableTask = MoveTable as TaskHost;
	
	ConnectionManager SourceConnection = pkg.Connections.Add("SMOServer");
	SourceConnection.ConnectionString = "SqlServerName=LUNA;UseWindowsAuthentication=True;UserName=;";
	SourceConnection.Name = "LUNA.DW";

	ConnectionManager DestinationConnection = pkg.Connections.Add("SMOServer");
	DestinationConnection.ConnectionString = "SqlServerName=olap-db.i;UseWindowsAuthentication=False;UserName=ssis_test;Password=test;";
	DestinationConnection.Name = "olap-db.i";

	MoveTableTask.Properties["CopyData"].SetValue(MoveTableTask, true);
	MoveTableTask.Properties["CopySchema"].SetValue(MoveTableTask, true);
	MoveTableTask.Properties["ExistingData"].SetValue(MoveTableTask, Microsoft.SqlServer.Dts.Tasks.TransferSqlServerObjectsTask.ExistingData.Replace);
	MoveTableTask.Properties["CopyAllTables"].SetValue(MoveTableTask, false);
	MoveTableTask.Properties["DropObjectsFirst"].SetValue(MoveTableTask, true);
	MoveTableTask.Properties["CopyIndexes"].SetValue(MoveTableTask, true);
	MoveTableTask.Properties["CopyPrimaryKeys"].SetValue(MoveTableTask, true);

	// Read the records from Object variable and put them into StringCollection
	StringCollection tables = new StringCollection();

	OleDbDataAdapter oleDA = new OleDbDataAdapter();
	DataTable dt = new DataTable();

	oleDA.Fill(dt, Dts.Variables["TableName"].Value);

	foreach (DataRow row in dt.Rows)
		tables.Add(row["TableName"].ToString());
	
	MoveTableTask.Properties["TablesList"].SetValue(MoveTableTask, tables);
	MoveTableTask.Properties["SourceConnection"].SetValue(MoveTableTask, "LUNA.DW");
	MoveTableTask.Properties["SourceDatabase"].SetValue(MoveTableTask, "DW");
	MoveTableTask.Properties["DestinationConnection"].SetValue(MoveTableTask, "olap-db.i");
	MoveTableTask.Properties["DestinationDatabase"].SetValue(MoveTableTask, "DW");

	// Execute package and dispose
	pkg.Execute();

	if (pkg.Errors.Count > 0)
	{
		string strError = "";
		foreach (DtsError errContainer in pkg.Errors)
			strError += (strError.Length > 0 ? "\n" : "") + errContainer.SubComponent + ": " + errContainer.Description;
		System.Windows.Forms.MessageBox.Show(strError);
	}
	Dts.TaskResult = (int)ScriptResults.Success;
}


Сообщение было отредактировано: 12 ноя 14, 13:01
12 ноя 14, 12:59    [16833853]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Строку кода, на которой вылетает, предлагается угадать?
12 ноя 14, 13:02    [16833868]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
Да. Если бы вылетало на конкретной строке, то я бы не спрашивал.
Я поставил breakpoint на if (pkg.Errors.Count > 0), т.е. после pkg.Execute();
и в этот breakpoint приходит с двумя ошибками:
1. Execution failed with the following error: "An error occurred while transferring data. See the inner exception for details.".
2. Execution failed with the following error: "Истекло время ожидания (Timeout). Время ожидания истекло до завершения операции или сервер не отвечает. The statement has been terminated.".
12 ноя 14, 13:22    [16834032]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
mikka sikorsky, возможно время выполнения запроса к источнику превысил ConnectionTimeOut
установите в соединении это св-во в 0. Может поможет
12 ноя 14, 14:41    [16834631]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
Crimean
Member

Откуда:
Сообщений: 13147
HandKot,

command timeout скорее
12 ноя 14, 14:55    [16834752]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
HandKot
mikka sikorsky, возможно время выполнения запроса к источнику превысил ConnectionTimeOut
установите в соединении это св-во в 0. Может поможет


так по-умолчанию 0 стоит везде.

Crimean, как command выцепить? Код приведен выше, command там нет
12 ноя 14, 15:29    [16835029]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
mikka sikorsky
так по-умолчанию 0 стоит везде.

А Вы это проверили?
Еще есть вероятность, что сервер не доступен (выключен). Что в этом случае делать не могу подсказать
12 ноя 14, 15:37    [16835113]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
Crimean
Member

Откуда:
Сообщений: 13147
когда стреляет connection timeout обычно ошибка login failed. а вот когда command - тогда command terminated
а как к нему добраться - пробовать искать / доставать объект SqlCommand, у него оно...
12 ноя 14, 15:48    [16835201]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
Нет у него никакого SqlCommand.
Смотрел в дебаге - не нашёл.
Падает на большой таблица, где более 70 млн записей
12 ноя 14, 20:11    [16836779]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
mikka sikorsky
Падает на большой таблица, где более 70 млн записей
Похоже, просто бага
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b5c231f1-0ea5-4ac4-a4bd-392bde443b81/smo-transfer-sql-server-objects-task-timing-out

Смотрите на версии, CU, SP, может, что то поможет.
13 ноя 14, 01:27    [16837476]     Ответить | Цитировать Сообщить модератору
 Re: Пакет SSIS вылетает по таймауту  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
Пока решил вопрос репликацией, забив на SSIS.
Работает даже почти в 2 раза быстрее.
14 ноя 14, 01:18    [16843579]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить