我有一个部署到 SQL 2012 的 SSIS 包。如果我右键单击并执行,我可以运行该包,但如果我通过 SQL Server 代理作业运行它则不行。SSIS 包利用 Excel 互操作对文件进行一些更改,然后将其保存。我的猜测是 SQL Agent 帐户不允许执行此类操作(打开 excel 应用程序)。我为管理员创建了一个代理,并选择了要作为该代理运行的包。这也行不通。任何人都知道如何实现我想要的?泰亚
3 回答
尝试这个:
创建以下文件夹:
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
解释:
Microsoft 不建议通过脚本自动化 Excel 或其他 Office 应用程序,因为Office 应用程序旨在供人使用,而不是机器。
因此,Excel 期望在应用程序运行时存在用户配置文件。SQL Server 代理服务不使用现有的用户配置文件(即使在代理用户下启动时)。当 Excel 通过代理自动启动并启动时,Excel 将查找该用户配置文件信息和桌面文件夹。
代理使用该systemprofile
文件夹作为其“用户”目录。
出于某种原因,如果systemprofile文件夹中不存在Desktop文件夹,则自动 Excel 进程将失败。因此,为 32 位和 64 位系统配置文件创建桌面文件夹将解决您的问题。
我在使用 Excel 互操作的脚本任务的 SSIS 包中遇到了这个问题;该包将在 BIDS 中执行(因为这是在我的用户帐户下执行的),但是当同一个包作为 SQL 代理作业步骤运行时,它会引发错误(由于在 SQL 代理帐户或“本地系统”下执行) )。
我收到的这个问题的错误是:
System.UnauthorizedAccessException: Retrieving the COM class factory for component
with CLSID {00024500-0000-0000-C000-000000000046}
failed due to the following error: 80070005.
为了解决这个问题,我为一个已知的用户帐户创建了一个凭据(SSMS > Security > Credentials)(最好创建一个具有最小权限的用户帐户用于生产目的)。
然后我创建了一个代理(SSMS > SQL Server Agent > Proxies > SSIS Package Execution),该代理映射到上面创建的凭据,确保在“活动到以下子系统”列表下选择“SQL Server 集成服务包”。
最后,打开代理作业的属性,选择“步骤”,编辑执行有问题的 SSIS 包的步骤,然后选择我刚刚在“运行为:”下创建的代理。
jour SSI 包是否使用共享文件夹或其他东西?有时 SQL 代理在无权访问网络(本地系统)的帐户下运行,因此可能会出现问题。
检查将代理设置为在您的帐户下运行是否有问题的方法,因此如果它有效,您可以创建新帐户并赋予其最小权限...