問題タブ [odp.net-managed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vb.net - ODP.NET/EF接続でALTER SESSIONを使用した大文字と小文字を区別しない検索?
大文字と小文字を区別しないテキスト検索が必要な EF/LINQ ステートメントがいくつかありますが、Oracle データベースでは大文字と小文字が区別されます。必要な ALTER SESSION ステートメントを接続/コマンド レベルで実行して、後続の同一コンテキスト呼び出しに影響を与えるにはどうすればよいですか?
実行する必要があると思われるコマンド ( OTN スレッド)
Database.ExecuteSqlCommandとDatabase.Connection.CreateCommandの両方をメソッドとして認識していますが、「いつ」がわかりません。作成後、LINQ の前にコンテキストに対して手動でこれを実行しようとすると、手動で接続を開いたり閉じたりする必要があり、LINQ とは異なるトランザクションのようで、適用されていないようです。
oracle - Oracle edmx StoreGeneratedPattern="Identity" の問題を伴う EF 5
Oracle [Oracle.manageddataaccess.client] で EF5 を使用しています。edmx を作成/更新するたびに、プロパティ StoreGeneratedPattern="Identity" が失われます。これをエンティティごとに手動で設定する必要がありました。
それを自動化する方法やその他の回避策はありますか? ここで何か不足していますか?
VS2013 を使用します。以下は、作成後の edmx のサンプル エンティティです。
vb.net - OracleConnection.Open が完全に管理された Oracle データ プロバイダで初めて使用されたときの SocketException
Oracle.ManagedDataAccess.Client を使用すると、次の VB.NET 行で内部例外がスローされます。
conn.Open ステートメントは成功しますが、次の例外がスローされます。
さらに重要なことは、最初の接続を開くのに 1.5 秒かかることです。
接続を閉じて新しい接続を開けば問題ありません。
最初の接続がほんの一瞬で行われる管理されていない Oracle データ プロバイダーでは、このような問題はありませんでした。Oracle 11g または 12c データベース サーバーに接続している場合は違いがないため、データ プロバイダーが原因であるかのように見えます。
データ プロバイダーは何かを試みて失敗し、その後、セッションの残りの部分で別のデフォルトになりますか? その場合、最初に成功したパスを強制するためにできることはありますか?
最初の接続の待ち時間が長いのは、単に Oracle プール マネージャーの初期化コストが原因ですか? もしそうなら、その部分を修正するために私にできることは何もないと思いますが、その場合でも、SocketExceptionを取り除くために何かできるかどうか知りたいです.
SocketException がヒットしたときの .NET 側のスタック トレースは次のようになります。
Oracle .trc ファイルを見ると、異常はないようです。
c# - C# - Oracle ストアド プロシージャは行なしで RefCursor を返します
ストアド プロシージャの呼び出しでは 7 行が返されますが、Oracle Managed Data Access を介して呼び出した場合は返されません。
コード :
ストアド プロシージャ
実行時 : 警告なし、エラーなし (すべてのパラメーターが有効)
私の問題:( 予想される7行ではなく)任意の行が返されますが、スキーマを取得します(列名は正しいです)。
環境 :
- Windows x64
- .NET フレームワーク: 4.0
- Oracle クライアントがインストールされている (v11.2) が必要ではない
- Oracle データ プロバイダー .NET : Oracle.ManagedDataAccess (v121.1.2)
.net - Oracle マネージド データ アクセス用に NLS_LANG を設定します。
oracle.manageddataaccess (NHibernate 4.0 経由) を介して Oracle 12c を使用する winforms c# アプリケーションがあります。Oracle データベースは顧客サイトの別のマシンにあります。Oracle データベースとクライアント マシンの NLS_LANG の違いにより、文字セットの変換に問題がありました。 . クライアント マシンに Oracle クライアントがインストールされていません (マネージド ドライバーのみを使用)。
環境変数を使用してクライアント NLS_LANG を指定できることがわかりました。
私の質問は、Oracle で新しい Managed Data Access を使用するときに NLS_LANG 設定を指定する他の方法はありますか?
plsql - ODP.Managed net 12 cでDBMS_OUTPUT.PUT_LINEをキャプチャすることは可能ですか?
カーソルを読み取るループ内で実行されるプロシージャの DBMS_OUTPUT.PUT_LINE を取得する必要があります。これは新しい ODP.Net Managed assembly で可能ですか?
申し訳ありませんが、先ほどは言及しませんでした。Net 呼び出しは同期呼び出しです。DBMS_OUTPUT は OracleInfoMessageEventHandler によってキャプチャされますか?
c# - OracleConnection.Open() ORA-00303 使用時のエラー: Network Library: Name-Value 構文エラー ODP.NET 管理の dll
source.Open(); を押すと、このエラーが発生します。コード行と私はその理由を理解できません。管理されていない dll を使用していましたが、バージョン Oracle.ManagedDataAccess.dll 64 ビットにアップグレードしようとしています。私のプロジェクトは .NET Framework 4 を使用しています。名前と値)。エラーから、何かが明らかに間違っているように見えますが、うまく動作しません。
app.config の TNS:
コードスニペット:
エラー: ORA-00303: ネットワーク ライブラリ: 名前と値の構文エラー
c# - Oracle.ManagedDataAccess および ORA-01017: ユーザー名/パスワードが無効です。ログオンが拒否されました
サーバーの 1 つで困難な状況に陥っています。Oracle 12c データベースに接続する必要がある ASP.NET MVC 3 アプリケーションがあります。これは、次の接続文字列を使用して行われます。
また、Oracle の Oracle.ManagedDataAccess バージョン 4.121.1.0 も使用しています。接続を試行するたびに、次のエラーが発生します。
上記の資格情報を使用して、デスクトップに正常に接続できます。別のサーバーに同じコードがありますが、管理されていない古いバージョンのライブラリを使用しており、前述の資格情報で正常に接続できます。ただし、コードを実行したいサーバーは、異なるサーバーでの接続を成功させる同じ資格情報を使用して毎回失敗します。
失敗したサーバーでは、次のことができます。
- SQLPLUS経由で接続
- TNSPING でデータベースにアクセスする
- システム DSN を作成して ODBC 接続を確立する
すべての場所で TNSNAMES.ORA を確認しましたが、正しいようです。
データベースに何度もアクセスした後、アカウントは実際にロックされ、実際にデータベースにアクセスしたこと、およびデータベースが提示された資格情報を気に入らなかったことが示されました。以前に正常に接続されたアプリケーションを確認したところ、アカウントがロックされていることを示すエラーで失敗しました。アカウントのロックを解除すると、問題が発生しているサーバーを除いて、これらのアプリケーションが正常に接続されました。
私は途方に暮れています。
この問題の原因について他に何か提案はありますか?
編集:
ローカル コンピューターと問題のあるサーバーに WireShark をインストールしました。デスクトップとデータベース、および問題のサーバーとデータベースの間の通信をキャプチャしました。私のデスクトップがパスワードを伝えていることがわかりました:
一方、私が問題を抱えているサーバーはそうではありませんでした(または少なくともそれが仮定です):
パスワードが接続文字列に存在する場合でも、パスワードが送信されないようにするセキュリティ/構成設定を知っている人はいますか?
編集 (20180713):
私の特定のケースでは、問題は FIPS 設定でした。
研究を行っている人には、これを回避する方法がいくつかあります。
HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled にあるレジストリ設定を変更できます。FIPS が有効な場合、値は 1 です。無効な場合、値は 0 です。再起動する必要はありません。
ほとんどの場合、この問題が発生する理由は、FIPS が有効になっており、Oracle マネージド データ アクセス ライブラリを使用しているためです。確実な回避策は、管理されていないライブラリを使用することです。ただし、このライブラリを使用するには、Oracle Instant Client をインストールする必要があります。クライアントは、 Oracle Data Access Componentsでダウンロードできます。
サーバーを Oracle 12.2c にアップグレードします。12.2c より前の Oracle 12c バージョンには、まだこの問題があります。
FIPS を有効にしていない場合は、データベースで SEC_CASE_SENSITIVE_LOGON 設定が true に設定されているかどうかを調査する必要があります。ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; を実行する必要があります。次に、すべてのパスワードをリセットします。