• ベストアンサー

トランザクション処理システムについて

現在大学で会計情報について学んでいるのですが トランザクション処理システムがよくわかりません。 プログラミングで行なわれるようなトランザクションについてはWebで調べてわかったつもり (inputとoutputの処理中に他からのinputがあった場合に整合性が取れなくなるので、それを回避するためにIPOを一連の動作とすることで変更があった場合に偽を返す) なのですが、それが会計システムでどのように使われるのか、また意味するのかがよくわかりません。 教えてください、よろしくお願いします

  • 経済
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • __orz
  • ベストアンサー率44% (12/27)
回答No.1

会計のようなシステムでは、例えばお金の残高を移動するような処理をすると思います。 例えば、 口座A:1000万円 口座B: 500万円 という状況で、口座Aから口座Bに800万円振り込むとすると、 処理上では、 処理1)口座Aから800万円を引く 処理2)口座Bに800万円を足す というようなことを行います。 これらは同時に行えれば良いですが、コンピュータシステムでは、基本的に順番にしか処理されないので、処理1→処理2という手順で処理を行いますが、ここで問題なのが、処理1と処理2の間に何かしらのトラブル(障害)が発生し、処理1が終了できたが処理2が終了できなかったという場合です。もしそうなると、800万円がどこかに消え去ってしまいます。 そこで、トランザクション処理、という仕組みを使い、整合性を確保する必要が出てくるわけです。 他にも並行処理で不整合が起こらないようにしたりするのにも使われます。(同時に800万円引き落とそうとして残高がマイナスになったりしないように、とか)。

関連するQ&A

  • トランザクション処理について

    トランザクション処理について、ちょっと疑問に思うことがあります。 トランザクション処理とは、クライアントの異常終了などで、中途半端な状態で終わったデータはロールバックされ、元の状態にもどされることですよね?では、サーバが突然フリーズした場合どうなるのでしょうか?トランザクション処理もできないため、中途半端な状態で終わったデータは手動で整合性を合わせる必要があるのでしょうか? かなり、基本的なことを聞いていますが、DBの知識がないためどなたか教えてください。

  • MySQLのトランザクションについて

    WEBアプリ上の、MySQLのトランザクションについて質問です。 トランザクションは、データの挿入に矛盾がない場合commitすることによって データの挿入等を確定する機構だとおもいますが、 この仕組みって、トランザクション中は作業対象のテーブルは実行中のクライアント以外 アクセスできなくなる(※つまりロック?がかかっている?)のでしょうか? そうじゃないと、意味がないですよね?やっぱり。。。 また仮にですが、例えばAというクライアントがWEBサイトにアクセス中に Bというクライアントが待ったく 同じ動作を同じタイミングでアクセスした場合ってどうなるのでしょうか? 実際、WEBアプリでそこまでの例外というか処理って行うものでしょうか? また、ちなみにMySQLの場合、 "START TRANSACTION" というSQL文だけでなく AUTOCOMMIT = 0 として、自動コミットをオフにしつつ beginという式で トランザクションを開始する方法があるようですが、実際はどちらの方が当たり前のほうほうなのでしょうか? 識者の方ご教授ください。

    • ベストアンサー
    • MySQL
  • トランザクション中に別のトランザクションは開始できますか?

    DBはサイベースを使っています。初心者です。 以下のような動作をしているシステムの一部を改造することになりました。 1)カーソルAオープン 2)トランザクション開始 3)フェッチ 4)1トランザクションでの処理数分終了済みでなければ、3)から繰り返し 5)commit/rollback 6)終了済みでなければ 2)から繰り返し 7)カーソルAクローズ 今回、3)でフェッチしたレコードのある項目をキーとして 別のテーブルを検索しなければならないのですが、 3)の後に、カーソルBオープンとフェッチのみを追加しただけでは問題があると思うのですが、同一プロセスから、トランザクション中に別のトランザクションを開始することは可能なのでしょうか? なお、このトランザクションでは、レコードの追加や削除は行いません。 どうぞよろしくお願いいたします。

  • 同一ユーザーが同時アクセスした時のトランザクション

    PHPとMySQLでWEBアプリを作っています。 複数の人がログインしてデータの書き換えが発生するので、トランザクションを扱いたいと考えています。 サイトや書籍を見て基礎はとりあえず頭に入ったのですが、自分の作っているアプリで一般的にどうやればいいのかピンときていません。 そこでいくつか疑問があるのですが、今回的を一つに絞って質問します。 質問 「同じアカウントのユーザーが別々のブラウザから同時にアクセスしてきても問題が無いようにする一般的なトランザクション処理の方法が知りたい」 現在既に出来ているアプリの流れが以下です。(かなり簡略化しています) <?php  始めにMySQLでユーザー情報の読み込み  MySQLでいろんな情報の読み込み  phpでいろんな処理  MySQLでいろんな情報の書き込み  (上記の一連の処理は何回も出てくる)  最後にMySQLでユーザー情報の書き込み ?> 書籍やサイトに載っているトランザクションの例だと、読み込みと書き込みの一連の流れが連続しているので単純にSTART TRANSACTIONしてCOMMITしている場合が多いです。 しかしこのアプリの場合ユーザー情報の読み込みと書き込みに間が空いているので、この間をSTART TRANSACTIONとCOMMITで挟む、というのはかなりおかしい気もします。 このような場合に同一アカウントからの同時アクセスでも整合性を保つにはどうやるのが一般的なのでしょうか。 根本的にphpプログラムとしてデザインが間違っているのかもしれませんが、あくまでMySQLのトランザクション処理での解決を目指している(もうプログラムはほぼ完成している)ので、MySQLのカテゴリで質問しました。でもそういう指摘もしてもらえるとありがたいです。 (ちなみにこのようなことはあくまでそういうアクセスをしてくる人のまれな状況のための対処であり、頻度としては高くないと思っていますがまずは最初の疑問としてあげました)

    • ベストアンサー
    • MySQL
  • トランザクション名の付け方

    こんにちは。VB.NETの勉強をしている社会人です。 クリック時にトランザクション名が付されるようにコーディングしているのですが、誤りがあるようでうまく動作しません。「 sTrans = scn.BeginTransaction("トランザクション1")」の記述に問題があるようですが、記述はテキストのままです。 ※「sTrans = scn.BeginTransaction()」と、名前を付けなければトランザクションは実行されます。 どのようにすればトランザクションに名前が付けられるのか、教えていただけないでしょうか。 よろしくお願いいたします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sTrans As OleDb.OleDbTransaction Dim scn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\VB_DB\SampleDB2.mdb;Persist Security Info=False") scn.Open() 'トランザクションを開始する Try sTrans = scn.BeginTransaction("トランザクション1") MessageBox.Show("トランザクションを開始しました。", "処理経過") 'トランザクションを終了する sTrans.Commit() Catch ex As Exception MessageBox.Show("トランザクションを開始できませんでした。", "処理結果") End Try scn.Close() End Sub End Class

  • MySQLとPHPのトランザクションについて

    MySQLとPHPのトランザクションを利用して不整合対策を行う場合、下記のような例になるかと思いますが、 $dbh->beginTransaction(); try { }catch(PDOException $e){ $dbh->rollback(); } try { }catchの中で、PHP側での演算の判定を入れて、エラーの場合、ロールバックをさせるような使用方法は可能でしょうか? 例えば、 1.SELECTで現在の上限数を取得 2.PHPで上限数と比較 3.上限数を超えていない場合は、INSERTを流す 4.上限数を超えている場合は、エラーでロールバック のように、上限数が決まっている処理において、 2と3の処理の際に起こり得る不整合をなくしたいと考えています。

    • ベストアンサー
    • PHP
  • 小規模なシステム開発(15万)を行う場合は、費用処理でしょうか?資産処

    小規模なシステム開発(15万)を行う場合は、費用処理でしょうか?資産処理でしょうか? 過去に1億円くらいかけて開発したシステムがあります。当然資産として扱っています。 そのシステムに対して小規模なシステムの改定を行うべく、15万円のシステム開発を行った場合、 この15万円は、費用処理でしょうか?資産処理でしょうか? 新規にシステム開発を行う場合、20万円未満の開発費用は会計上は費用扱いで良いと思いますが、 既に大規模なシステムがあり、そのシステムに改定をする場合の20万円未満の扱いについては 会計上費用にすべきか、資産にすべきかを教えてください。

  • Webシステムでないシステムの呼び方は?

    こんにちは。 javaなどを使用した、ブラウザでを使ってサーバで動作するシステムはWebシステムと呼ぶと思っているのですが、vb.netでデザインを行って、ブラウザを使用しないシステム開発を行うこともあります。この場合は、クライアント側にdllを保存して、クライアントで動作するのですが、このような場合は何システムと呼ぶのが正しいのでしょうか?曖昧な質問で申し訳ありませんがご存知の方、教えてください。よろしくお願いします。

  • 会計システムをつくるために必要なプログラミング言語は?

    コンピューターに関してはHTMLでHPをやっと作れる程度の初心者ですが質問させてください。 会計システム(POSシステムのように、販売した時点でそれが財務諸表に反映されるようなシステム。イメージとしては、ただの会計ソフトのようにそのソフトを利用している会社の中だけで完結しているものでなく、そのシステムを利用している会社がこちらに販売情報を送り、その情報を元にこちらで会計処理を行い、財務情報等をシステム利用会社に示すといった感じのシステム)を作るにはどのようなプログラミング言語が適しているんでしょうか?会計知識以外で、その他に必要な知識があれば教えてください。

  • ギターのスイッチングシステムについて

    この度、RocktronのPatchmate Loop 8 Floorを購入しました。 参照(http://www.electroharmonix.co.jp/rocktron/patchmateloop8floor.htm) 初めてのスイッチングシステムなので分からない事が沢山あります。 是非皆様のお知恵を拝借出来ればと思います。 1・スイッチングシステムにエフェクターを繋ぐ場合、普段繋いでいるようにエフェクターの配列の順番は関係あるのでしょうか?(例・コンプ→歪→空間系、等) エフェクターの掛かり具合が変わってしまうのか心配です。 2・この機種の場合後ろにInput/OutputそしてSend/Returnが付いています。 ■ギター→Input→Send→エフェクター→Return→Output→次のエフェクター という接続順になるようなのですが、これの利点とは何なのでしょうか? そして他のスイッチングシステムのようにSend/Returnだけを使って使う事も出来るのでしょうか? 3・スイッチングシステムを使う上でノイズゲート/サスプレッサーの位置はどこになるのでしょうか? ちなみに自分の使っているノイズサスプレッサーはISP Decimator G-stringです。 4・ループが足りなくなった場合スイッチングシステムの前後にエフェクターを繋いでも大丈夫でしょうか? 皆様の回答お待ちしています。 宜しくお願いします。