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

Откуда:
Сообщений: 9
Настроенный DTS пакет из Enterprise Manager выполняется успешно и данные из экселя переносятся в табличку в sql.
Но когда мы выполняем процедуру sp_rundts (ее текст ниже), то выполняется она без ошибок, но данные в таблицу в sql не попадают почему-то.
С чем это может быть связано?
Процедуре на вход задаем параметры
@srv_name varchar(255),
@pkg_name varchar(255),
@execute bit = 0

DECLARE @hr int, @oPKG int
DECLARE @ErrSrc varchar(255), @ErrDesc varchar(255)

-- Код возвращаемой ошибки
SET @hr = 0

-- Сообщения об ошибках
DECLARE @err_oa_creat varchar(255), 
	@err_oa_load varchar(255), 
	@err_oa_exec varchar(255), 
	@err_oa_dest varchar(255)

SET @err_oa_creat = 'Ошибка при создании OLE-объекта'
SET @err_oa_load = 'Ошибка при загрузке OLE-объекта'
SET @err_oa_exec = 'Ошибка при вызове методов OLE-объекта'
SET @err_oa_dest = 'Ошибка при уничтожении OLE-объекта'

-- Создание OLE объекта
EXEC @hr = sp_OACreate 'DTS.Package', @oPKG OUT
IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @oPKG, @ErrSrc OUT, @ErrDesc OUT 
    SELECT [Action] = @err_oa_creat, [hr] = convert(varbinary(4),@hr), [Source] = @ErrSrc, [Description] = @ErrDesc
    RETURN @hr
END

-- Загрузка OLE объекта

-- DTSSQLServerStorageFlags :
-- DTSSQLStgFlag_Default = 0
-- DTSSQLStgFlag_UseTrustedConnection = 256 
DECLARE @ms varchar(255)
SET @ms = 'LoadFromSQLServer("' + @srv_name + '", "", "", 256, , , , "' + @pkg_name + '")'
EXEC @hr = sp_OAMethod @oPKG, @ms, NULL
IF @hr <> 0
BEGIN
  EXEC sp_OAGetErrorInfo @oPKG, @ErrSrc OUT, @ErrDesc OUT 
  SELECT [Action] = @err_oa_load, [hr] = convert(varbinary(4),@hr), [Source] = @ErrSrc, [Description] = @ErrDesc
  RETURN @hr
END

-- Если процедура вызвана не в тестовом режиме, то запускаем пакет на выполнение
IF @execute <> 0 BEGIN
  -- Вызов методов OLE объекта
  EXEC @hr = sp_OAMethod @oPKG, 'Execute'
  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @oPKG, @ErrSrc OUT, @ErrDesc OUT 
    SELECT [Action] = @err_oa_exec, [hr] = convert(varbinary(4),@hr), [Source] = @ErrSrc, [Description] = @ErrDesc
    RETURN @hr
  END
END

-- Уничтожение OLE объекта
EXEC @hr = sp_OADestroy @oPKG
IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @oPKG, @ErrSrc OUT, @ErrDesc OUT 
    SELECT [Action] = @err_oa_dest, [hr] = convert(varbinary(4),@hr), [Source] = @ErrSrc, [Description] = @ErrDesc
    RETURN @hr
END


Более того, на другом сервере всё успешно работает. Но нам бы очень нужно наладить на этом.
23 май 12, 15:21    [12602135]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
Glory
Member

Откуда:
Сообщений: 104751
amagnolia
то выполняется она без ошибок,

Так надо смотреть лог пакета, а не процедуры

amagnolia
Настроенный DTS пакет из Enterprise Manager выполняется успешно

Потому что он выполняется на вашей машине, а процедура выполняет пакет на сервере
23 май 12, 15:33    [12602278]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
amagnolia
Member

Откуда:
Сообщений: 9
Glory, Enterprise Manager установлен на сервере и запускаем мы все на сервере через RDP - и пакет, и процедуру.
23 май 12, 15:36    [12602314]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
Glory
Member

Откуда:
Сообщений: 104751
amagnolia
Glory, Enterprise Manager установлен на сервере и запускаем мы все на сервере через RDP - и пакет, и процедуру.

Ну тогда читать лог пакета
23 май 12, 15:38    [12602345]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Можно запустить профайлер и посмотреть, идут ли вообще команды из пакета на сервер.
я через sp_OACreate никогда пакеты не вызываю, всегда использую xp_cmdshell - это дает возможность разобраться, на каком конкретно этапе что-то не работает.
23 май 12, 17:20    [12603329]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
amagnolia
Member

Откуда:
Сообщений: 9
Glory, Кот Матроскин, спасибо за ответы. Завтра подключусь к клиентам посмотрю лог пакетов и профайлер. Может, что-нибудь прояснится.
23 май 12, 17:55    [12603521]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
amagnolia
Member

Откуда:
Сообщений: 9
Я включила логи DTS пакета. Когда запускаю через execute package логи появляются, а процедуру запускаю - логи не появляются вообще... Получается пакет вообще не запускается на выполнение?

Через профайлер:

SELECT N'Testing Connection...'

EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters

Audit Login -- network protocol: LPC
set quoted_identifier on
set implicit_transactions off
set cursor_close_on_commit off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set language us_english
set dateformat mdy
set datefirst 7

set textsize 1073741824

exec msdb..sp_get_dtspackage N'LoadSales_RU', null, null

И дальше полностью текст процедуры...
и всё.
24 май 12, 17:06    [12609792]     Ответить | Цитировать Сообщить модератору
 Re: DTS пакет выполняется из Enterprise Manager, но при запуске из процедуры нет  [new]
amagnolia
Member

Откуда:
Сообщений: 9
В итоге переписали всё через xp_cmdshell

@srv_name varchar(255),
@pkg_name varchar(255)

  
DECLARE @cmd varchar(255)
SET @cmd = 'DTSRun /S"' + @srv_name + '" /E /N"' + @pkg_name + '" '
EXEC xp_cmdshell @cmd


Высветилась ошибка, что нет доступа к папке, где файл лежит. Положили в другую папку, всё ок.

Спасибо всем за помощь!
25 май 12, 17:34    [12617286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить