問題タブ [ora-01555]
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 - Oracle - トランザクション、ロールバック セグメント、および undo_retention パラメータはどのように機能しますか?
私は DBA ではないので、Oracle のトランザクション管理プロセスを理解するのに少し苦労しています。
インターネット上の信頼できるように見えるページを読んで理解したところ (最も顕著なのはこのAskTom ノートですが、コメントは気にしないでください)、トランザクションがコミットされたとき、新しいデータは実際のデータ ブロックでまだ報告されていません。が、ロールバック セグメントに記録されたままになります。誰かがデータに対して SELECT を発行したとき、または UNDO_RETENTION 秒が経過したとき (これら 2 つのイベントのいずれかが最初に発生した方)、新しいデータがデータ ブロックに書き込まれます。
しかし、おそらく知っていると思われる当社の誰かが最近私に反対のことを言いました. UNDO_RETENTION 秒の期間。この古いデータは、トランザクションの前に SCN で起動されたクエリによるアクセスのために、この間利用可能のままです。
では、オラクル内部で実際に何が起こっているのでしょうか?回答をバックアップするための参照を提供できますか?
Oracle 9.2.0.8 を使用しています。
前もって感謝します。
oracle - Oracle で新しいトランザクションを開始するためにセーブポイントを代用できますか?
現在、一連のレコードを挿入するために使用しているプロセスは次のようなものです。
(「一連のレコード」とは、個人のレコードと住所、電話番号、またはその他の結合されたテーブルのようなものを意味することに注意してください)。
- 取引を開始します。
- 関連する一連のレコードを挿入します。
- すべてが成功した場合はコミットし、そうでない場合はロールバックします。
- 次の一連のレコードについては、手順 1 に戻ります。
このようなことをもっとすべきでしょうか?
- スクリプトの先頭でトランザクションを開始します
- レコードのセットごとにセーブ ポイントを開始します。
- 関連レコードのセットを挿入します。
- エラーが発生した場合はセーブポイントにロールバックし、すべてが成功した場合は続行します。
- スクリプトの先頭でトランザクションをコミットします。
ORA-01555 でいくつかの問題が発生し、Ask Tom の記事 (この記事など) をいくつか読んだ後、2 番目のプロセスを試してみることを考えています。もちろん、Tom が指摘するように、新しいトランザクションの開始は、ビジネス ニーズによって定義されるべきものです。2 番目のプロセスは試してみる価値がありますか、それとも悪い考えですか?