SSIS 包访问 Oracle DB。您如何知道您使用的是 32 位还是 64 位 Oracle 驱动程序?

SSIS package access Oracle DB. How do you know if you are using 32 or 64 bit Oracle driver?

我们有一个安装了 32 位 Oracle 11g 驱动程序的 SQL 服务器生产箱。我们当前的测试 SQL 安装了相同驱动程序的服务器已被具有 64 位 12c 驱动程序的新服务器所取代。当我们测试从 Oracle 提取并加载 SQL 的 SSIS 2012 包时,我们将 运行 在新的测试 SQL 服务器上使用 64 位 DTEXEC.exe 实用程序 运行包。

Q1:是不是因为使用了64位的DTEXEC实用程序,包会自动寻找64位版本的驱动?

我假设在下面的连接字符串中,Provider=MSDAORA.1 指的是 MS OLE Provider for Oracle,因此,我假设我没有使用 Oracle 驱动程序。我没有使用 DSN。

Q2:是不是在查找connectionstring的"Data Source"属性的值,MyOracleResource.MyCompany.COM,找到对应的entry在我的 tnsname.ora 文件中,这些文件夹之一基于我用于 运行 包的 DTEXEC 版本?

C:\Oracle\product203_32bit\CLIENT_1\NETWORK\ADMIN
C:\Oracle\product203_64bit\CLIENT_1\NETWORK\ADMIN

如果是这样,我很惊讶 MS 驱动程序会依赖于安装 Oracle 客户端时创建的 tnsnames 文件。

在Project属性中,属性 Pages->Config Properties->Debugging下,有一个属性,"Run64BitRunTime."

Q3: 我正确地假设当 运行 在 IDE 中时,这相当于选择 32 位或 64 位DTEXE 实用程序的版本到 运行 来自 cmd 行的包?

当我查看 Oracle 连接对象的属性时,我看到 "ID" 属性 的值为 {0cbfe196-1a88-4b62-8522-b34dbb37ba71}。

问题 4:此 GUID 是否用于识别驱动程序的特定驱动程序版本,因此在与生产环境不匹配的环境中进行测试时可能会导致问题?

<Configuration ConfiguredType="Property" Path="\Package.Connections[MyOracleDb].Properties[ConnectionString]" ValueType="String">
    <ConfiguredValue>Data Source=MyOracleResource.MyCompany.COM;User ID=MyUser;Password=MyPassword;Provider=MSDAORA.1;Persist Security Info=True;</ConfiguredValue>
</Configuration>

Q1 - 是 - 当您在 64 位版本的 DTEXEC 下执行程序包时,它将使用 64 位驱动程序。您可以通过仅安装一个或另一个并尝试 运行 包来在本地进行测试。 运行在错误的版本下会因为找不到驱动而导致打包失败

Q2 - 如何解析服务器取决于您的组织如何配置您的环境。例如,在我工作的地方,有一个环境变量被推送到每台机器上,它指向存储 TNSNAMES 文件的网络目录。您必须咨询您的 Oracle 专家以了解它在您的环境中如何工作。

Q3 - Run64BitRunTime 属性 将导致 SSIS 设计器使用不同版本的 DtsDebugHost.exe。以与 DTEXEC 类似的方式工作,它将 运行 32 位或 64 位版本,具体取决于设置方式。这也是为什么 属性 在软件包 运行 投入生产后没有影响的原因 - 因为您正在使用不同的程序来 运行 整个软件包。

Q4 - ID 属性 由 SSIS 在内部分配和使用。如果你四处点击,你会看到每个组件都有一个 id。所以这与任何外部元素无关。