14

確かに、これはセッションの終了と同じであり、ロールバックを引き起こすはずですか?オラクル以外の可能性が最も高いと私には思えます。それがこれをしたことを知ったとき、私は実際にショックを受けました

さらに重要なのは、Oracleが終了時にロールバックに変更した場合、誰かが反対するでしょうか。

4

7 に答える 7

18

おかしなことに、今週の11gR2リリース(2009-09-03)で、SQL*PlusにEXITでCOMMITまたはROLLBACKするオプションが追加されました。ここにドキュメント

今後数週間/数か月以内に、現在のデータベースに対して使用して目的の動作を実現できる11gR2インスタントクライアントが登場すると思います。

注意が必要です。別のセッションに切断または接続した場合でも、(ドキュメントによると)暗黙的にトランザクションをコミットします。

于 2009-09-02T22:43:13.340 に答える
6

これは、おそらく20年以上前に行われたOracleによる設計上の決定でした。それは私が使用したであろうデザインではありません。これは、基礎となるOCIではなく、SQL*Plusのプロパティのように見えることに注意してください。

セッションが突然終了した場合、AFAIKは、予想どおり、セッションがロールバックされます。したがって、たとえば、誰かがSIGKILLをSQL Plusに送信した場合、セッションのトランザクションはロールバックする必要があります。ただし、SQL Plusセッションが正常に終了した場合(EOFまたはexitコマンド)、SQL * Plusは、その無限の知恵で、これまでに行ったことをすべてコミットすることを決定します。

理由については-私には理論があります。SQL標準データベースでは、実行した操作がSELECTステートメントのみであっても、常にトランザクションを実行します。コミットしない場合、行った変更はすべてロールバックされます。スクリプト化された操作の最後にコミットを追加するのを忘れがちです。そのため、デフォルトの動作にすると、誰かがデータベースを変更するためにスクリプトを実行し、次に2番目のスクリプトを実行して変更が正しく有効になったかどうかを確認する回数が減りました。他のDBMSは、「auto-commit」のようなモードでこれを行う必要をなくします。このモードでは、各ステートメントがスタンドアロントランザクションであり、完了時に自動的にコミットされます。これは便利な操作モードです。他のシステムは、明示的なBEGIN WORKステートメントを実行するまで自動コミットするモードを提供します。実行すると(もちろん)、対応するCOMMITまたはROLLBACKまでトランザクションを実行します。私は「MODEANSI」データベースが重要なときにコミットすることを確認するのに十分な頻度でコミットしていないことに気づきましたが、私が使用するソフトウェア(Oracleではない)は、サイレントにコミットするのではなく、コミットされていない作業をロールバックします-そして私はそうしますそれ以外の方法で動作するように変更された場合は不幸になります。(構成可能なデフォルトは問題ないかもしれません。それでも、コミットされていないロールバックの方が優れたデフォルトだと思います。それは、知らない人にとっては厄介なことです。データベースを誤って破損する危険性が少なく、それが私にとって最も重要です。)しかし、私が使用しているソフトウェア(Oracleではない)は、サイレントにコミットするのではなく、コミットされていない作業をロールバックします。それ以外の方法で動作するように変更された場合、私は不幸になります。(構成可能なデフォルトは問題ないかもしれません。それでも、コミットされていないロールバックの方が優れたデフォルトだと思います。それは、知らない人にとっては厄介なことです。データベースを誤って破損する危険性が少なく、それが私にとって最も重要です。)しかし、私が使用しているソフトウェア(Oracleではない)は、サイレントにコミットするのではなく、コミットされていない作業をロールバックします。それ以外の方法で動作するように変更された場合、私は不幸になります。(構成可能なデフォルトは問題ないかもしれません。それでも、コミットされていないロールバックの方が優れたデフォルトだと思います。それは、知らない人にとっては厄介なことです。データベースを誤って破損する危険性が少なく、それが私にとって最も重要です。)

注意:これは、別のDBMSベンダーで働いている人からの中古情報です。ただし、私が知る限り正確であり、10年以上にわたって蓄積された情報に基づいており、さまざまなフォーラム。)

于 2009-09-02T14:52:46.400 に答える
3

あなたはオラクルに尋ねなければならないでしょう!

私がこれを最初に発見したとき、私は驚いたことを認めなければなりません。なぜなら、ロールバックを行うというより保守的なアプローチを取ると思うからです。

COMMITが最も可能性の高い/デフォルトのアクションであると考えられていると推測することしかできません。おそらくこれがSQL*Plusがそれを行う理由ですか?

于 2009-09-02T14:46:32.823 に答える
1

良い質問。

私はmetalinkを調べましたが、1998年に通常の終了時にコミットするというデフォルトの動作に対してバグ(または変更要求)が発生しました。metalinkにアクセスできる場合は、バグ633247を探してください。

于 2009-09-02T20:48:07.657 に答える
1

Oracleドライバーを使用するjdbc接続が、接続を閉じるときに暗黙的にtxnをコミットする方法と一致します。

于 2011-08-10T07:33:44.147 に答える
0

コミットは良い考えだと思います。ジャスティンとビリーがこのスレッドで書いたことに同意します:http: //forums.oracle.com/forums/thread.jspa?messageID = 3611345& #3611345

よろしく、ロブ。

于 2009-09-02T15:19:02.800 に答える
0

終了時にコミットすることは私には論理的なことのように思えますが、一般的にROLLBACKは例外です。何か問題が発生した場合はロールバックします。データを挿入、更新、または削除すると、これを実行することになりますCOMMIT

于 2016-02-18T09:11:59.050 に答える