問題タブ [ora-01000]
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.
oracle - Tridion CMS & Oracle: ORA-01000: 開いているカーソルの最大数を超えました
うまくいけば、誰かがここで私を助けてくれます。
Tridon CMS を使用して、jBoss と Apache でホストされている Web サイトを管理しています。
SDL Tridion 5.3 を 5 年間使用していますが、突然、背後にある Oracle データベースでエラーが発生しました。ほとんどのコンテンツは、ファイル システムから通常の jsp ページとして提供されますが、Oracle データベースから HTML スニペットを返す Tridion の Java API への呼び出しを介して提供されるコンポーネントがいくつかあります。
最近、これらの HTML スニペットの一部が提供されていないことに気付きました。サーバー ログ ファイルを調べたところ、Oracle エラーORA-01000: 最大オープン カーソルの超過が生成されていることがわかりました。
最大カーソル数は 300 に設定されていたので、それが役立つかどうかを確認するために 350 に増やしましたが、そうではありませんでした。
アクティブな Oracle セッションを監視すると、多数のセッションがカーソルの最大数に達したことがわかり、アプリ サーバーを再起動しました。これは役立つように見えましたが、一時的なものにすぎません。最大カーソル数のしきい値に達したセッションの数は、再び徐々に増加しています。再起動直後の昨日の午後には最大カーソルで約 30 のセッションがありましたが、今朝は 150 です。
明らかに、これを引き起こすために最近何かが変更されましたが、何が原因かはわかりません。Oracle データベースは、私たちが通常アクセスできるものではなく、直接変更するものでもありません。日々のデータベース操作はすべて Tridion API を介して行われます。Tridion の開発と公開に関する限り、私たちは何も特別なことをしていないので、過去数年間行ってきたことと何ら変わりはありません。現在、当社の Web サイトへのトラフィック量は比較的少なく (過去には大幅に増加していました)、問題はないと確信しています。
接続されているかどうかはわかりませんが、問題が発生する直前に内部ファイアウォールの 1 つに障害が発生しましたが、これが原因で問題が発生する可能性があるとは考えられません。ファイアウォールのフェールオーバー以外に、アプリ サーバーとデータベース間の接続に変更はありません。
ここで解決策を探す場所について何か提案はありますか? SDL とのサポート チケットをオープンしたばかりですが、現時点では、彼らも私たちと同じように困惑しています。
ありがとう。
java - ORA-01000: バッチ更新の PreparedStatement で開いているカーソルの最大数を超えました
何百万ものレコードに対してバッチ更新の準備済みステートメントを使用していましたが、400k を超えるレコードを実行した後、最終的に実行時に次のエラーが発生しました。
java.sql.SQLException: ORA-01000: 開いているカーソルの最大数を超えました
これが次のコードによって引き起こされているかどうかはわかりません
これにより、接続がコミットされた後、PreparedStatement が閉じられ、新しい PreparedStatement に置き換えられます。同じ接続の繰り返しのコミットがこの問題を引き起こしている可能性があるかどうかはわかりません。
誰でも問題の解決策を提案したり、準備されたステートメントのこのバッチ更新を処理するためのより良いアーキテクチャを提案したりできますか?
P/S: エラー行は実際には文の実行を削除することを指していますが、これが根本的な原因ではないと思います。バッチ更新の準備された文コードが追加される前は、この問題は存在しませんでした。
提案をありがとう
java - ORA-01000: 開いているカーソルの最大数を超えました - Javaコードが失敗しました
Java コードでループを使用して、データベースに行を挿入しています。次に、エラーが発生しました-
少し検索したところ、各行を追加した後に準備済みのステートメントまたはステートメントを閉じると、エラーを取り除くのに役立つことがわかりました。
しかし、私は理解する必要があります -
- カーソルとは
- カーソルの数を変更できますか? はいの場合、それは良いことですか?
java - エラーを解決できません - java.sql.SQLException: ORA-01000: 開いているカーソルの最大数を超えました
データベースに行を追加する Java メソッドを作成しました。テスト目的で、このメソッドを約1000回以上呼び出しています。準備されたステートメントで close() メソッドを呼び出しましたが、行を挿入するためにこのメソッドが呼び出されるたびに oracle エラーが発生します。
エラー
ソースコード
node.js - node oracledb [エラー: ORA-01000: 開いているカーソルの最大数を超えました]
選択クエリをループで実行するとエラーが発生します。このエラーが発生しました:
これは実行されるクエリです:
nodejs でカーソル結果を閉じるにはどうすればよいですか?
javascript - 接続プールと ORA-01000
非同期でクエリを実行できる非同期 ExecuteQuery 関数を作成したので、ループ内で呼び出された場合、次のクエリは実行前に前のクエリが終了するのを待ちます。doCreatePool関数は、プログラムの初期化時に 1 回呼び出されます。接続プールを作成し、それをグローバル変数 config.Oracle_POOL に保存して、doCreatePool が戻った後でも接続プールが有効なままになるようにします。
Socket.io イベントは ExecuteQueryを呼び出してクエリを実行します (ループ内の 1 つまたは複数)。
すべてがうまくいきますが、一定量のクエリが実行された後、選択、更新、および挿入クエリのいずれかで「エラー: ORA-01000: 開いているカーソルの最大数を超えました」という ORA-1000 エラーが発生します。
通常、Connexion プールはこの問題を回避するはずですか?
コードの何が問題になっていますか?
odp.net - ODP.net 12c リリース 2 で暗黙的な参照カーソルが閉じられない
SqlServer から Oracle 12c に .net アプリケーションを移植しています。アンマネージド 64 ビット ODAC 12c リリース 2 (12.1.0.1.2) クライアントを使用してデータベースにアクセスしています。
Oracle 12c では DBMS_SQL.RETURN_RESULT(cur) 関数が導入され、ado.net コマンドに特定の出力パラメーターを追加しなくても、.net コードをそのまま再利用できるようになりました。これは私のコードがどのように見えるかのスニペットです:
uspGetAllNumericUnits ストアド プロシージャは次のようになります。
dbReader と dbCommand を適切に破棄すると、connectionScope によって接続が閉じられ、破棄されると思います。しかし、サーバーの v$open_cursor ビューを確認すると、「SELECT * FROM NumericUnit;」のカーソルが表示されます。開いたままです。接続プーリングを使用します。無効にすると(これはしたくありません)、connectionScopeが破棄されるとカーソルが正しく閉じられます。
私の問題は、このような ado.net 呼び出しが多数あり、セッションごとに許可されている最大カーソル制限にすぐに達し、ORA-01000 エラーが発生することです。
DBMS_SQL.RETURN_RESULT(cv_1) 関数を使用せずに、結果セット カーソルを出力パラメーターとして返す古い Oracle 11g アプローチを使用すると、接続プールの有無に関係なく、connectionScope が破棄されるため、カーソルが正しく閉じられます。
暗黙の参照カーソルを閉じるために必要な追加のオブジェクトはありますか? これは ODAC 12cR2 の既知のバグですか? DBMS_SQL.RETURN_RESULT(cv_1) の導入により、SqlServer から Oracle への移植は、ほぼすべての場所に出力パラメーターを追加するよりも簡単になりますが、接続プールを取り除きたくありません。
node.js - Node.js で開いているカーソルの最大数を超えました
Node.js で csv を処理し、Oracle データベースに保存するためのコードに取り組んでいます。これまでのところ、うまくいっていますが、csv に大量の行があると、「ORA-01000: 開いているカーソルの最大数を超えました」というメッセージが表示されます。スクリプトの冒頭で一度 Oracle に接続しています。csv の各レコードについて、複数SELECT
の 、INSERT
、およびDELETE
を実行してから、次のエントリに移動して、同じ接続を使用してすべてを処理しています。最後に、接続を閉じます。私が考えていたのは、プールから毎回新しい接続を取得することでしたが、1 つの接続を使用する必要があるという他の投稿を読みました。これらすべてのクエリを 1 つの接続で処理するには、特別な設定を行う必要があるのではないでしょうか?
台本がちょっと長いので、大事なところだけ載せます… 必要ならもっと載せます。Q
、csvtojson
、およびを使用しoracledb
ます。