2

我正在尝试使用dbdeploy来管理 Oracle 架构更改。我可以从命令行成功运行它以生成我的更改脚本,但是当我尝试通过通过 TeamCity 运行的 dbdeploy NAnt 任务执行它时,我收到一个错误:

System.Data.OracleClient 需要 Oracle 客户端软件
版本 8.1.7 或更高版本。

我确实安装了 Oracle 10.2.0.2 客户端软件。它是系统路径中的第一个条目,dbdeploy.exe 应用程序能够成功协商 Oracle 连接。dbdeploy 代码动态加载 System.Data.OracleClient 程序集,该程序集又尝试使用 Oracle 客户端位与数据库通信。这就是我的 NAnt 环境中失败的原因。

我已经验证了以下几点:

  • 在这两种情况下,相同的用户身份正在运行该进程
  • 两种情况都使用相同的工作目录
  • 在这两种情况下运行相同的 dbdeploy 代码并使用相同的提供参数
  • 在这两种情况下都使用相同的数据库连接字符串
  • 在两种情况下都动态加载相同的 ADO.NET 程序集(System.Data.OracleClient,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089)

这是错误期间堆栈跟踪的顶部:

在 System.Data.OracleClient.OCI.DetermineClientVersion()
在 System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction
  (字符串用户名,字符串密码,字符串服务器名,
   Boolean IntegratedSecurity、Boolean unicode、Boolean omitOracleConnectionName)
在 System.Data.OracleClient.OracleInternalConnection..ctor(
   OracleConnectionString 连接选项)
在 System.Data.OracleClient.OracleConnectionFactory.CreateConnection(
   DbConnectionOptions 选项,对象 poolGroupProviderInfo,
   DbConnectionPool 池,DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(
   DbConnection owningConnection、DbConnectionPool 池、
   DbConnectionOptions 选项)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(
   DbConnection 拥有对象)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(
   DbConnection 拥有对象)
在 System.Data.ProviderBase.DbConnectionPool.GetConnection(
   DbConnection 拥有对象)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(
   DbConnection 拥有连接)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(
   DbConnection externalConnection, DbConnectionFactory connectionFactory)
在 System.Data.OracleClient.OracleConnection.Open()
在 Net.Sf.Dbdeploy.Database.DatabaseSchemaVersionManager。
   GetCurrentVersionFromDb()

我的主要问题是:我如何才能发现这些运行环境的不同之处,以了解为什么我的 Oracle 客户端软件无法加载?

4

0 回答 0