我开发了一个SSIS包,其中包含“执行流程任务”和“数据流任务”。我在执行程序包时遇到了问题。
结果:(手动与计划)
与
和
当我使用特定的用户配置文件'GEORGES/BL0040EP'登录时。
-
“执行进程任务”--运行powershell脚本以刷新excel连接并保存excel文件。
(成功)
-
“数据流任务”--读取excel数据并将其插入SQL Server表。
(成功)
我正试着用
SQL代理
-
“执行进程任务”--运行powershell脚本以刷新excel连接
(不工作,没有错误消息)
. 保存excel文件
.
-
“数据流任务”--读取excel数据并将其插入SQL Server表。
(成功)
powershell script to refresh the Excel file
从运行时似乎不会向SSAS服务器发出
SQL Agent
. 不是“查询问题成功”。不是“查询权限错误问题”。简单地说就是“根本不执行查询”。未记录或检测到任何权限问题。
问题:
为什么SQL代理不运行查询?
$env:UserName | Out-File -filepath
输出包含用户名的文本文件。代理帐户设置似乎正在预期的用户配置文件上下文下运行。文本文件的内容是
bl0040ep
.
创建代理帐户
Creating a Proxy User to run an SSIS package in SQL Server Agent
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
数据库sas\u UsageStats\u xlsx\u ExcelRefresh.ps1
# 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分析器
SQLProfiler(VS/SSIDB-connectionerror\u user-bl0040).png
SQLProfiler(SQLAGENT-connection\u no-activity).png
没有图像可以附加。当包在SQL代理上下文下运行时,用户(bl0040ep)没有任何活动。
更新1:系统桌面文件夹
Issues with simple script executed via SQL Server Agent
...
C:\Windows\System32\config\systemprofile\Desktop
和
C:\Windows\SysWOW64\config\systemprofile\Desktop
. 该文件夹已存在于SysWOW64上。
更新2:32位PowerShell可执行文件
我还尝试直接调用32位版本的PowerShell:
%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe
Run a 32 bit Powershell script on Sql Server Agent
更新3:Windows任务计划程序代替SQL代理作业
Nirav's Diary, Schedule SSIS Package Without Deploying, 2-Windows Schedule Task