• 締切済み

「トランザクション処理」と「排他制御」は同じ意味?

アクセスなのですが「トランザクション処理」と「排他制御」は同じ意味ですか?

みんなの回答

回答No.1

違います。 http://codezine.jp/article/detail/6702 http://codezine.jp/article/detail/6764 確かにトランザクション制御をしっかりやっていればデータ更新自体に不整合が生じることはありません。 が、例えばA処理が終わらないとB処理ができないという場面にも出くわします。 A処理が5時間かかるようなものだった時、B処理を5時間前に実行してしまったら、ひたすら待つのか(デッドロック)、もしくはエラーにしてB処理はキャンセルするのかという選択が必要になります。 他に、B処理で呼び出した際は更新されてなかったが、B処理で情報が画面に呼び出された後にA処理で更新が行われており、その後にB処理で更新が行われる。 この場合、A処理の結果が無駄になる可能性があります。 呼び出してから更新するまでロックしてトランザクションを離さないという方法も取れますが、 それはつまり誰かがいじってる時は他の人は呼び出しすらできないということもあります。 また、ほったらかしにしたことなどによってロックされたままDBとのコネクションが外れてしまい、 デッドロックを発生させ、解消させる方法がDBの再起動しかなくなるなどという恐れもあります。 これらを正確に『システムとして』不整合のないものとするには、排他制御の実装方法を考える必要があります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JDBCでのトランザクション・排他制御

    初めまして。 まだ初心者の身なのですが質問させてもらいます。 サーブレット・jspでJDBCを使いデータベースとの処理を行って簡単なショッピングサイトのようなものを作っています。 まずsetAutocomit() = falseでトランザクションを開始し データベースのUPDATEを行って、最後に確定する場合comit キャンセルする場合rollbackとしています。 しかし1人のユーザーがトランザクションを行っている場合に他のユーザーからアクセスされた場合にデータベースのトランザクション中の値を取ってきたいのですが、どうしてもトランザクションでUPDATEされる前の値になってしまうのです。 これを防止するのが排他制御というものだというのは分かったのですが 実際のやり方については、結構調べたのですがあまり載っていませんでした。 データベースはMySQLを使っています。 よろしければJDBCでの排他制御についてのアドバイス、もしくは詳しく説明されているサイトなどございましたら是非教えてください。 よろしくお願いします。

  • 排他制御について

    質問があります。 Access2003とSQLserver2005の排他制御についてです。 複数のPCから共有してアクセスし、レコード単位に排他制御したいといった場合、 排他制御に適しているのはどちらでしょうか? 「Accessではこういう問題があり適さない」などあったら教えてください。 よろしくお願いします。

  • 排他制御について

    WindowsXP 排他制御可能 Windows98 排他制御不可 Office2003 排他制御可能 Office97 排他制御不可 Windows2000、Office2000は組合せによって排他制御ができたり できなかったりするのでしょうか? 排他制御をサポートするしないについて公式的なサポートサイトが あれば教えて頂けませんでしょうか?

  • Accessでの排他制御

    アクセスの排他制御に関して質問です。 ネットワーク上のサーバーにアクセスのMDBを置いて、複数の人が更新目的で開く場合、排他制御はどうなるのでしょうか? テーブル単位で、ロックが掛かるのでしょうか? もしそうであれば、複数の人が同時に使えないのですが、回避策はありませんでしょうか?

  • ACCESS97での排他制御について

    今、仕事の都合でACCESS97を利用して、排他制御のある システムを作成しようと試みているのですが、なかなか上手くいきません。 DB、APをネットワーク上に置き、共有するテーブルを、DB→APに リンクをはっている状態です。 様々なIT上で調べたのですが、どれもACCESS97で排他制御は不可能 といった内容のものしかありません。。 どうしても、不可能なのでしょうか?もし、何かご存知でしたら、教えて頂け ないでしょうか??

  • 関数内の排他制御について

    いつも的確な回答に助けられていますm( __ __ )m 以下のようなメソッドがあるとします。 function test() { 処理1: データベースから値を取得 処理2: 処理1 で取得した値に +1 する 処理3: 処理2 の結果をデータベースに書き込む } 【質問】 関数 test がクライアント A と B の2人からほぼ同時にアクセスされた時、以下のような事が起きてしまうと思います。 ・ A が 処理1 を実行 ・ A が 処理2 を実行 ・ B が 処理1 を実行 ・ A が 処理3 を実行 ・ B が 処理2 を実行 ・ B が 処理3 を実行 当然データベースにある値は期待通りの値ではないと思います。 期待する動きとしては、A が関数 test の全ての処理を抜けるまで B は入り口で待機させるというようなことを想像しているのですが、 こういった場合、どのように排他制御したら良いのでしょうか? 私は C# で排他制御を実装した経験があるのですが、 C# では同期オブジェクトを用意して lock を使ったり、 ManualResetEvent などを用いることで排他制御が可能でした。 PHP でそれらに匹敵するようなものは存在するのでしょうか?

    • 締切済み
    • PHP
  • トリガに排他制御をかけたいのですが

    トリガに排他制御をかけたいのですが Oracleのトリガで、 トリガ内の処理に対して排他制御をおこないたいのですが、 どのように設定すればよいのでしょうか? トリガの内容は以下となります。 CREATE OR REPLACE TRIGGER TRI_TEST after update of (トリガの実行条件その1) on ORG_TBL FOR EACH ROW begin if (トリガの実行条件その2) THEN begin insert(実行される処理その1) EXCEPTION update(実行される処理その2) end; end if; end; / 上記の条件において、 「実行される処理その1」 「実行される処理その2」 を行っている最中に他からのアクセスをブロックをさせたく思っております。 本件の理由は 他からのアクセスで行われる処理が 「select(トリガによってデータが投入されてるテーブル)」 「truncate(トリガによってデータが投入されてるテーブル)」 を連続して行う処理のため、 排他を実行しなかった場合、 他からのアクセスの「select」と「truncate」の処理間に トリガによってレコードがinsertされた際に、 そのレコードがselectされなくなることを危惧しているためです。

  • トランザクション処理

    accessをローカルで一人で使う場合は、 トランザクション処理については考慮しなくても問題ないのでしょうか?

  • データベースに書き込むときの排他処理

    ASP3.0 IIS5.0 ASP初心者です。初心者の素朴な疑問なんですが、 ASPで、例えばWebページから入力された情報を、 Accessなどのデータベースに書き込むとき、 排他処理って必要ですよね? 一般的にどうやるのでしょうか? Application変数を使うのでしょうか? データベース自体に排他制御する機能があるのですか? よろしくお願いします。

  • トランザクション処理について教えてください

    お世話になります まず、トランザクション処理の定義から 「関連する複数の処理を一つの処理単位としてまとめたもの。」 例えば 金融機関での入出金処理、入金処理は成功で、出金処理は失敗 となると、まずいことになります。それで、 この、トランザクション処理は 「すべて成功」か「すべて失敗」のいずれかであること が保証されることらしいのですが、 さて、これを実現する方法を教えてください。 ACCESSのVBを使っての話で、エクセルファイルの作成や更新も あります。 また、どういった所を調べればいいかのアドバイスだけでもありがたいです 何か Begin Transaction ~ End Transaction のような方法を取ると聞いたことがあるのですが。

専門家に質問してみよう