У меня есть пакет служб SSIS, который я разработал с «Задачей выполнения процесса» и «Задачей потока данных».У меня проблема с оформлением пакета.
РЕЗУЛЬТАТЫ: (Вручную или по расписанию)
Все процессы успешны при запуске, выполняемом вручную в 32-битном режиме из VS и SSISDB при входе в систему с определенным профилем пользователя 'GEORGES / BL0040EP'.
- 'Выполнить задачу процесса' - запустить сценарий powershell для обновлениясоединения Excel и сохраните файл Excel. (УСПЕХ)
- «Задача потока данных» - считывает данные Excel и вставляет их в таблицу SQL Server. (УСПЕХ)
Я пытаюсь запустить пакет с SQL Agent (используя учетную запись прокси),и у процесса есть некоторые проблемы.
- 'Выполнить задачу процесса' - запустить сценарий powershell для обновления соединений Excel (НЕ РАБОТАЕТ, СООБЩЕНИЙ ОБ ОШИБКАХ) .Сохраните файл Excel (УСПЕХ) .
- «Задача потока данных» - считывает данные Excel и вставляет их в таблицу SQL Server. (УСПЕХ)
ПРОБЛЕМА:
powershell script to refresh the Excel file
, по-видимому, не выдается серверу SSAS при запускеот SQL Agent
.Не «запрос успешно выполнен».Не «запрос проблем с правами доступа».Просто «запрос вообще не выполняется».Проблемы с разрешениями не регистрируются и не обнаруживаются.
Я могу сказать, потому что я запустил SQL Profiler на сервере.Когда агент вызывает пакет, запрос не выполняется.Когда VS / SSISDIB вызывает пакет, я вижу, как выполняется запрос.Оба успешно с профилем пользователя (GEORGES \ bl0040ep);и неудачно с ошибкой прав доступа с неавторизованным профилем пользователя (GEORGES \ bl0040).
ВОПРОС:
Почему агент SQL не запускает запрос?
Я даже добавил к шикарной команде $env:UserName | Out-File -filepath
для вывода текстового файла, содержащего имя пользователя.И настройка учетной записи прокси-сервера, кажется, работает в ожидаемом контексте профиля пользователя.Содержимое текстового файла bl0040ep
.
Создание учетной записи-посредника
Создание пользователя-посредника для запуска пакета служб SSIS в агенте SQL Server
USE master
GO
-- Create a proxy credential for xp_cmdshell.
EXEC sp_xp_cmdshell_proxy_account 'GEORGES\bl0040ep', '!myPW!';--SELECT * FROM [master].[sys].[credentials]
-- Grant execute permission on xp_cmdshell to the SQL Server login account.
GRANT exec ON sys.xp_cmdshell TO [GEORGES\bl0040ep]
GO
-- Create a credential containing the GEORGES account PowerGEORGES\PowerUser and its password
CREATE CREDENTIAL Credential_BL0040EP WITH IDENTITY = N'GEORGES\bl0040ep', SECRET = N'!myPW!'
GO
USE [msdb]
GO
-- Create a new proxy called SSISProxy and assign the PowerUser credentail to it
EXEC msdb.dbo.sp_add_proxy @proxy_name=N'Proxy_BL0040EP',@credential_name=N'Credential_BL0040EP',@enabled=1
-- Grant SSISProxy access to the "SSIS package execution" subsystem
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N'Proxy_BL0040EP', @subsystem_id=11
-- Grant the login testUser the permissions to use SSISProxy
EXEC msdb.dbo.sp_grant_login_to_proxy @login_name = N'GEORGES\bl0040ep', @proxy_name=N'Proxy_BL0040EP'
GO
DatabaseSSAS_UsageStats_xlsx_ExcelRefresh.ps1
*1087*
# Refresh the excel workbook connections and save the updated file
$file = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx'
$x1 = New-Object -ComObject Excel.Application
$x1.Visible = $false
$x1.DisplayAlerts = $False
$enddate = (Get-Date).tostring("dd-MM-yy")
# $filename = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_Usage Stats ' + $enddate + '.xlsx'
$filename = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx'
$env:UserName | Out-File -filepath C:\SVN\BusinessAnalysts\ExcelTools\RefreshAll_process.txt
$wb = $x1.workbooks.Open($file)
$wb.refreshall()
# REM: Use SLEEP to eliminate the message: "This will cancel a pending data refresh. Continue?"
Start-Sleep -Second 20
$wb.SaveAs($filename)
$wb.Close()
$x1.Quit()
Remove-Variable wb,x1
SQL Profiler
Нетактивность перехватывается при запуске пакета из агента SQL.При запуске из VS и SSISDB регистрируется ошибка входа.
SQLProfiler_ (VS / SSIDB-connectionerror_user-bl0040) .png
SQLProfiler_ (SQLAGENT-connection_no-activity) .png
Нет изображения для прикрепления.Просто нет активности для пользователя (bl0040ep), когда пакет запускается в контексте агента SQL.
Ср 02/06/2019 14: 31: 46.96
ОБНОВЛЕНИЕ 1: папка системного рабочего стола
Я добавил папку «Рабочий стол»в System32 запустил задание из агента SQL, и проблема не исчезла.Это было рекомендовано для аналогичной проблемы, о которой сообщалось в TechNet Проблемы с простым сценарием, выполняемым через агент SQL Server ... C:\Windows\System32\config\systemprofile\Desktop
и C:\Windows\SysWOW64\config\systemprofile\Desktop
.Папка уже существовала в SysWOW64.
ОБНОВЛЕНИЕ 2: исполняемый файл PowerShell в 32-разрядной
Я также попытался напрямую вызвать 32-разрядную версию PowerShell: %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe
.Тем не менее обновление Excel не завершается при запуске через агент SQL с учетной записью прокси.Ссылка Запуск 32-разрядного сценария Powershell на агенте сервера Sql
ОБНОВЛЕНИЕ 3: Планировщик задач Windows вместо задания агента SQL
Я пробовал другой метод планирования для выполнения пакета (Windows Task Scheduler, вместо SQL Agent).Расписание завершается, но ведет себя точно так же, как и агент SQL ... запрос не отправляется источнику данных.Справочник Дневник Нирава, Расписание пакета служб SSIS без развертывания, задача расписания 2-Windows