DB同時接続および更新処理結果確認について

このQ&Aのポイント
  • DB同時接続および更新処理結果確認について
  • Oracle11gのDBサーバに複数のユーザが同時接続しており、Aさんが行を追加した後、Bさんが同じ行を表示できない問題が発生しています。Oracleの設定方法について教示してください。
  • Oracle11gのDBサーバにおいて、複数のユーザが同時接続している際に、Aさんが行を追加した場合にBさんが即座にその行を確認できるようにするための設定方法を教えてください。
回答を見る
  • ベストアンサー

DB同時接続および更新処理結果確認について

お世話になります。 DB:Oracle11g OS:Linux5 上記環境のDBサーバへ、Aさん、BさんがTera Term接続して、 2名とも同じスキーマSSS(DBA付与)でsqlplusにてDB接続しました。 Aさんが、TTTテーブルに対してINSERT文を実行し、 1行追記されていることをSELECT文にて確認することができましたが、、 その後Bさんが同じSELECT文を実行しても、Aさんが追記した行が表示されません。 お恥ずかしい質問で恐縮ですが、 Bさんからも、AさんのINSERT実行結果を即時に確認できるようにするための Oracleの(?)設定がありましたら、ご教示ください。 ※目的はAさんが実行したINSERT、UPDATE、DELETEの結果を、   Bさんが開いているTera Termのコンソールからも確認したい。

  • Oracle
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

Aさんがコミットして更新(この場合INSERT)を確定すれば Bさんからも見えるようになりますよ。 Aさんが確定しない限り、Aさんの更新はBさんからは見えません。 このカラクリがないと Aさんが「やっぱ、や~めた」ってロールバックした時 困るでしょ? Bさんから見えてたら。 SQL*Plusで SET AUTOCOMMIT ON として自動コミット機能を有効にすれば Aさんが更新するたびに自動的(強制的)にコミットされますが、 Aさんは、その更新をロールバックすることができなくなります。 よ~~~く、考えて使うべき機能です。

r7dhpkvpnf
質問者

お礼

検証環境で目的の動作を確認できました。 ロールバックのご指摘も含め、ご回答ありがとうございました。

関連するQ&A

  • PL/SQLプログラムの書き方がわかりません。

    「課題」2つのデータベースがあり、それぞれ別インスタンス。A―DBからB―DBに、データを抽出し、もっていきます。このとき、キーとなるデータが、Bに既にある場合は、UPDATEを、ない場合はINSERTします。 プログラムの流れは、LOOP FETCH でAから取り出すSELECT文につけられたカーソルを実行し、次に SELECT文で、Bからキーとなるデータがあるか検索して、それで、IF文で、なかったときは、INSERT、あるときはUPDATE だと思うのですが・・・書き方がいまいちわかりません。どなたか、サンプルになるようなプログラムがございましたら、教えていただけませんでしょうか?まったくの素人なのですが、この課題をしなければいけません。よろしくお願いします。

  • ASPから異なる複数のDBサーバーに接続する方法

    ASPの質問です。WEBサーバーと複数のDBサーバーがあります。 ADODB.Connectionでオラクルサーバーに接続し、データベースオブジェクトを作成しています。 別々のDBサーバーにあるテーブルを結合して利用したいのですが、ASPで可能でしょうか? 例えば"select * from A,B where A.ID=B.ID"というSQL文を実行する(AとBは別々のDBサーバーにある)。 とりあえず、代替案で検討しているのは片方のDBサーバーにデータベースリンクで他方のDBサーバーのVIEWを作ろうかと思っています。できればASPで解決したいのですが、よろしく御願いします。

  • ファイルに記述されている複数のSQL文を一度に実行させたい

    こんにちわ。 ファイルに記述されているSQL文を、Linuxのコマンドラインなどから 実行したいと考えています。 ファイルに insert into DB_NAME(aaa,bbb,ccc) values(111,222,333); insert into DB_NAME(ddd,eee,fff) values(333,777,222); insert into DB_NAME(aaa,ttt,ddd) values(111,000,999); ... などのSQL文が複数行(例えば1000個ほど)記述しているのを用意して なんかしらの方法で一度に実行させたいのです。 mySQLでは、このようなやり方があるのですが postgreではどのようにすればいいのか、わかりません。 どなたかご存知の方、よろしくお願い致します。 OSはLinuxです。

  • VB.NETでDataTableにデータ追加したい

    VisualStugio.Net2003でソースコードを記述しており、コード内でSQLのSELECT文を実行して、実行結果をDataTableに格納する処理をしています。 今回、とあるテーブルに対し2パターンのSQLを実行し、それぞれの実行結果を1つのDataTableに格納したいのですが、どのようにすれば良いでしょうか? 自分で調べたところ、先に実行したSQL結果に、後から実行したSQL結果を1行ずつ追加するといった方法は見つかりましたが、1行ずつではなく、一括で追加する方法が知りたいです。 前提として、2回のSQL実行では、同じテーブルの同じ項目をSELECTしております。 下記に簡単ですがコード記述の概要を補足しておきます。 ・コード記述概要 【変数宣言】 Dim DB1 As DataTable Dim DB2 As DataTable 【SQL文1】 SELECT A,B,C FROM テーブル1 WHERE 条件文1 DB1 = SQL文1の実行結果 【SQL文2】 SELECT A,B,C FROM テーブル1 WHERE 条件文2 DB2 = SQL文2の実行結果 【DB1にDB2のデータを追加】←ここのやり方を知りたいです DB1 = DB1 + DB2 よろしくお願いいたします。

  • OS/390 DB2 簡単なSQLで結果が異なるのですが 

    簡単なSQLなのですが、 バージョン違いが起因するのか、 導入の際のテーラーリング作業の違いなのか、 SQL結果が異なって困ってます。 状況は以下の通りです。 テーブルA 定義内容 項目 a b c    ・    ・    ・ データ内容(aの値)    +-+    |a|    +-+    |1 |    +-+    |2 |    +-+    |3 |    +-+   ~~~~~   ~~~~~    | | SQL SELECT * FROM テーブルA    WHERE a = '1' OR a = '3' 実行結果 マシンA(DB2/UDB V6)    +-+    |a|    +-+    |1 |    +-+    |3 |    +-+ マシンB(DB2/UDB V7)    +-+    |a|    +-+    |1 |    +-+ 因みにUDB以前のDB2・V5でも、 DB2/UDB V6と同じ結果です。 またaについてはindex項目ではありません。 この結果を同じにするにはどうしたらいいか、 ご存知の方がいらっしゃいましたら、 アドバイスをお願いいたします。 (直感で考えるとV6以前の結果のほうが 正しいと思うのですが・・・)

  • phpで「<」を作りmysqlで使いたい

    $mmm = mysql_connect('localhost','root','pass'); mysql_select_db('database',$mmm) $rrr = array(100,200); $fieldname = "dataA"; $qqq = "SELECT * FROM ttt WHERE 1"; $sss.=" AND ".$rrr[0]."<=".$fieldname." AND ".$fieldname."<".$rrr[1]; echo $sss; 表示されるのは、 SELECT * FROM ttt WHERE 1 AND 100 です。<以降を取得できません。原因は何でしょうか。

    • 締切済み
    • PHP
  • SQLの処理結果について

    お世話になります。 毎回気になっていることがあります。 MySQLでアップデートやインサートを含む一連の処理が正常に行われたかを確認する方法として現在クエリー実行結果がTrueかFalseで判定をしているのですが、これは正しい方法なのでしょうか? 例えばUPDATEをしたあとにphp内で別の処理をする場合、これらのすべての処理が完了したかを確認するし、途中で中断していたらその前の処理も行わない(取り消す)ということは可能なのでしょうか? 例: 1、テーブルからAという値をセレクト 2、A+1 3、テーブルAにアップデート 4、A+1 5、テーブルBに4の値を書き込み 3の処理が失敗している場合、5の処理は行わないというようのしたいのです。 毎回If分岐というのがよいのでしょうか? 複数回判定が必要な場合などぼ方法を教えていただけると幸いです。

    • ベストアンサー
    • PHP
  • DBの更新??

    ソースは下記です。 Set db=Server.CreateObject("ADODB.Connection") db.Provider="Microsoft.Jet.OLEDB.4.0" db.Mode=2 db.ConnectionString=Server.MapPath("../../script/db_dat/crv_haken.mdb") db.Open Set rs=db.Execute("select * from control " ) rs("day-upd") = Request.Form("編集担当") rs("tanto-upd") = date rs.update rs.Close db.Close Set db=Nothing で・・・実行しますと エラー タイプ ADODB.Recordset (0x800A0CB3) 現在の Recordset は更新をサポートしていません。プロバイダか、選択されたロックタイプの限界の可能性があります。 のメッセージがでます。 何が原因でしょうか?お教えください。

  • DBに接続しブラウザ上に検索結果が全て表示されるServlet

    首記の件ですが、コーティングしてコンパイルしても NullPointerExceptionがでてしまいます。 このServletはDB接続クラスと実行Servletにわかれていてます。 原因はDB接続クラスにレコードをカウントするメソッドが あるのですが、そこでNullPointerExceptionが発生して その他に影響を及ぼしているみたいです。 ・・・とまぁ、ここまで理解できたのですが行き詰まって しましましたのでご教授いただけると幸いです。 以下に問題のコードとエラー内容を記述します。 --接続クラス-- (略) private int count() throws SQLException { // 桁数 int rec = 0; // SQL文実行 rs = st.executeQuery("SELECT * FROM TESTTABLE1"); // カウント while(rs.next()) { rec++; } return rec; } } --エラーメッセージ-- java.lang.NullPointerException at DB.count(DB.java:146) at DB.select(DB.java:117) at SELECT.doGet(SELECT.java:73)

    • ベストアンサー
    • Java
  • DBリンク経由の参照について

    サーバ【A】のスキーマ【あ】にDB【テーブル1】があります。 サーバ【A】のスキーマ【い】に、【あ】からセレクト権限を与えた所、【い】から【テーブル1】を参照できるようになりました。 次に、 サーバ【B】からサーバ【A】にDBLINKをはりました。 (tnspingで接続されているのを確認済)。 これで、 サーバ【B】のスキーマ【あ】からDBLINK経由で【テーブル1】を参照できるようになりました。 しかし、サーバ【B】のスキーマ【い】から【テーブル1】が参照できません。 私としては、スキーマ同士の権限を与え、DBLINKが正しく繋がっているので、参照できるのでは??と思うのですが、 何度やっても、 --------------------------------------------------------------- ORA-04043: オブジェクト"【あ】"."【テーブル1】"は存在しません。 --------------------------------------------------------------- が表示されてしまいます。 原因として何が考えられるでしょうか…?? 説明不足だったらすみません。 何か考えられる可能性があったら教えて下さい。