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 環境で失敗しているものです。
以下の点を確認しました。
- どちらの場合も、同じユーザー ID がプロセスを実行しています
- どちらの場合も同じ作業ディレクトリが使用されます
- どちらの場合も同じ 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 owningObject) System.Data.ProviderBase.DbConnectionPool.UserCreateRequest で ( DbConnection owningObject) System.Data.ProviderBase.DbConnectionPool.GetConnection で ( DbConnection owningObject) System.Data.ProviderBase.DbConnectionFactory.GetConnection で ( DbConnection owningConnection) System.Data.ProviderBase.DbConnectionClosed.OpenConnection で ( DbConnection outerConnection、DbConnectionFactory connectionFactory) System.Data.OracleClient.OracleConnection.Open() で Net.Sf.Dbdeploy.Database.DatabaseSchemaVersionManager で。 GetCurrentVersionFromDb()
私の主な質問は次のとおりです。これらの実行環境の違いを見つけて、Oracle クライアント ソフトウェアをロードできない理由を確認するにはどうすればよいですか?