【发布时间】:2019-11-26 13:08:28
【问题描述】:
目前我正在 SQL Server Management Studio (SSMS) 中构建数据库。通过导入/导出向导将几个数据源导入此数据库。导入完成后,我不仅运行导入,还保存了一个 SSIS 包。此 SSIS 包用于安排每周刷新数据源。 在我的 Windows Server 2012 R2 上安装了 Express 版本,因此我手动创建了几个每周运行的批处理文件(通过任务计划程序安排)。这适用于大多数表,但是对于某些表,我遇到了一些奇怪的 (?) 行为。
如下:当通过导入/导出向导创建 SSIS 包并直接运行导入时,该表在数据库中正确显示。也就是说,所有列名和它包含的数千行。 奇怪的是,当执行 SSIS 包(通过批处理文件)时,表是空的(虽然列名是正确的)。对于某些表,我没有遇到这种行为。对于其他人来说,这种行为一直都会遇到。
批处理脚本如下(非常简单):
"C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\DTExec.exe" /F "C:\Users\username\ssispackage.dtsx"
批处理文件似乎始终正确运行,因为当我运行批处理文件时表“creation_date”发生了变化。此外,对于所有正确“刷新”的表,这些相同的批处理文件都可以完成这项工作。
SSIS包的一些设置:
- 数据源:Oracle OLE DB 提供程序
- 目标:SQL Server Native Client / MS OLE DB Provider for SQL Server(都试过了)
- 通过查询获取数据(因为我正在从 Oracle 查询多个表);查询解析正确
- 映射:创建目标表 & 删除并重新创建目标表
- 已完成删除和重新创建,因为数据源相当小,并且每周/每月(对某些行)有一些更改。
对于通过此方法导入(并每周刷新)的大多数数据源,表格每周都会正确显示(只需删除前一个表格,然后重新创建源)。
我希望有人能向我解释为什么会出现这个问题。如果我需要更多信息,请询问。
提前致谢!
更新:
查看批处理文件的日志时,这是(部分)输出:
Source: ..... "SourceConnectionOLEDB"
Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "OraOLEDB" Hresult: 0x80004005 Description: **"ORA-01005: null password given; logon denied".**
End Error
.....next error.... "SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.
因此,SSIS 包中似乎没有正确记住/保存密码? 不过这很奇怪,因为对于大多数表来说,它确实正确存储了密码(因为它们确实正确刷新)。 在设置数据源,即Oracle Provider for OLE DB的属性时,我选择了“允许保存密码”选项。那么它应该正确存储密码吗?
【问题讨论】:
-
您是否在与创建 dts 的 SSMS 向导相同的机器上执行 dtexec.exe 应用程序?可能存在一些网络问题或与操作系统相关的设置。
-
@EzLo 是的,这一切都在 Windows Server 2012 R2 机器上执行。对于大多数表来说,这已经是正常的(它每周刷新这些表,通过删除和重新创建表)。那些还没有起作用的,在直接运行导入(从向导)时起作用,但在执行 SSIS 包本身时不起作用。或者好吧,它们确实执行了,但结果表只有列名。
标签: sql-server ssis