問題タブ [savepoints]
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.
sql - セーブポイントにロールバックしてもロックが解除されない
セーブポイントの使い方を誤解していると思います。おそらく誰かが私のためにそれを片付けることができます。私がやろうとしていること、そして私が経験したこととして、私の例を提示します。
私のアプリは特定の手順を実行しています。その手順 (および関連する DB 操作) の前に、セーブポイントを作成します。その手順の間に、select for update を開始します。これにより、多数のロックが作成されます。
lock1 - 期間=トランザクション、クラス=行、タイプ=インテント 行=大きな数値
lock2 - 期間=トランザクション、クラス=行、タイプ=WriteNoPK 行=大きな数値
その Java プロシージャが成功すると、関連する DB トランザクションがコミットによって完了します。ただし、Java プロシージャが失敗した場合は、関連する DB 操作もロールバックしたいと考えています。私はこれを試みています:
conn.rollback(mySavepoint);
ただし、これはDB操作によって作成された(上記の)テーブルロックを解放していません(conn.rollback(mySavepoint);によってロールバックしただけだと思っていました)。
この動作を、Sybase と Derby の 2 つのデータベースでテストしました。
これはなぜですか?
conn.rollback(mySavepoint) の後に本当にコミットする必要がありますか??? 少し直感に反するようです。
java - Hibernate でセーブポイントとロールバックを実行するには?
私は自分のクラスのテストを作成しているので、コードをテストするために非常に多くのデータを挿入しています。
そこでsavepoint and rollback
、DBに何らかの仕組みを作ろうと考えています。
DBサーバーとしてpostgresqlを使用しています。
以下はテスト用の私のコードです:
ProcessRequest()
ここでは、コマンド オブジェクトを介して値を設定し、休止状態を使用して DB 内にデータを格納するメソッドに渡します。それでも、データが正しいかどうかをチェックするメソッドを書くassert
必要testProcess()
がありますか?
したがって、私の質問は、このトランザクションがsetUp()
メソッドで開始されたときに、1 つのセーブポイントを作成してからtestProcess()
メソッドを実行assert
し、データが正しいかどうかを確認してから、メソッドtearDown()
で設定されているセーブポイントにロールバックしたいということですsetUp()
。
では、どうすればよいのでしょうか。誰かが私が何を使用し、どのように前進するかを教えてくれるなら、私はそのことを学び、自分で行きます.
何をどこで使用する必要があるかについてのガイダンスが必要です。皆さん、ありがとうございました。
oracle - Oracle プロシージャでセーブポイントを使用する方法
プロシージャに複数の update ステートメントと insert ステートメントがあります。
以下の例を参照してください。
手順例
- コード
更新 1
挿入 1
更新 2
Update 3 -- 例外が発生したと仮定
ここで、最初の更新ステートメントが更新または挿入に影響を与えないことを意味する前にロールバックしたいと思います。
drupal - Drupal on mysql クラスター
drupal のすべてのテーブルのセットを入れてENGINE=NDBCLUSTER
、ブロックを編集して drupal に保存すると、 について問題が発生しsavepoint
ます。
Web サイトで予期しないエラーが発生しました。後でもう一度お試しください。 savepoint_1; Array ( ) ', '%function' => 'block_admin_configure_submit()', '%file' => '/opt/lampp/htdocs/geosquare/modules/block/block.admin.inc', '%line' => 504, 'severity_level' => 3, )
ENGINE=MyISAM
どちらもサポートしていないを変更しようとしましたSAVEPOINT
が、drupal のブロックを編集して保存すると。
それは正常に動作します。それはしばらくの間私を混乱させました、助けを求めて。
oracle - 検証が欠落している場合にすべての挿入をロールバックする方法
xlm から 10 個のテーブルにデータを挿入する必要があります。階層は次のとおりです。
- T1 には子テーブル T2 があります
- T2には、t10まで子テーブルt3、t4、t5、t6などがあります
- t1 より上の t3 から t10 でいずれかの検証が失敗した場合、t2 テーブルの挿入はロールバックする必要があります。
SavePoint を使用していますが、検証が欠落している場合は、その特定のセーブポイントをロールバックします。
ここでの私の質問は、10 個のセーブポイントを使用する必要があるので、すべてのテーブルのトランザクションをロールバックする必要がありますか、それとも 1 つのセーブポイントだけで十分ですか?
sqlite - SAVEPOINT を使用して変更がディスクに書き込まれないのはなぜですか?
読み取り、書き込み、および別の読み取りの 3 つの操作があります。各操作は、SAVEPOINT を使用して開始されたトランザクション内にあります。値を読み取り、それを読み取るために使用したトランザクションを中止し、値を設定し、それを設定するために使用したトランザクションをコミットし、後で中止するトランザクションで再度読み取ります。データベースを再度開くと、セットが元に戻されます。
次のシェルスクリプトで問題を切り分けました。
私の出力は
私は何が欠けていますか?
sql - 複数のセーブポイントを使用する正しい方法は何ですか
初めてトランザクションを使用するので、ばかげた質問をしている可能性があります。
3 つのテーブルにデータを挿入したい:
たとえば、何か問題が発生して にデータを挿入できない場合Table2
、 からのデータはTable1
失われず、変更さTable3
れません (逆も同様です)。
これまでに 2 つのバージョンを試しましたが、どれも満足のいくものではありませんでした。
バージョン 1:
しかし、データを に挿入できない場合はTable1
、可能なデータTable2
が失われ、何も失いたくありません。というわけで、分けてみました。
バージョン 2:
しかし、Table2 への挿入が失敗した場合は、次のようになります。
(1 行が影響を受けます)
(影響を受ける行は 0 行)
メッセージ 628、レベル 16、状態 0、手順 InsertInto、行 26 (2 番目の BEGIN CATCH)
アクティブなトランザクションがない場合、SAVE TRANSACTION を発行できません。
どうすればこれを正しく行うことができますか?