【最大10000ポイント】当たる!!質問投稿キャンペーン!

一度発行したクエリをキャンセルしたいのですが、何かやり方ありますか?セッションを落とすしかないでしょうか。
アプリケーションから実行するのですが他のクライアントのセッションは落とさないように区別したいと思います。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

(1)select * from v$session;でsid列とserial#を特定します



(2)その後、alter system kill session です。

クライアントには ORA-3113や3114、1041が帰るはずです。

この回答への補足

コメントありがとうございます。
(1)のsid列とserial#の特定をどうやるかがわかっていません。DB接続時に自分のsid列とserial#を確実に特定できるものでしょうか?
DB管理者がkillするだけなら目視確認すれば良いのでしょうか。。。

アプリケーションでは複数のログインユーザーIDを管理していますが、DB操作に使用しているOracle上のユーザーIDは1つなので特定するためのキーにはなりません。

(アプリケーションのログインユーザーIDは数が多く、かつ増減が多いのでNGと考えております。)

DB接続直後にv$session-sidの最大値を取得し、それが自分のセッションだと判断するくらいでしょうか?

補足日時:2003/05/15 01:53
    • good
    • 0

Javaはあまり詳しくないので、一般的なC/Sアプリケーション


を例にとって話しますが、Oracleとの接続で非同期接続を
プログラムで実現していれば、クエリーをキャンセルさせる
ことができます。

ただしその時でも、Oracle側での検索は続いていますので、
Oracleサーバの負荷は下がりません。

同期接続の場合、Oracleサーバでの検索が終了して最初の
検索結果が返ってくるまで検索はキャンセルできません。

JavaBeanで接続しているとのことですので、そのJavaBean
を作った人または作った会社に問い合わせて、どうやったら
Oracleとの接続をキャンセルすることができるか、詳しく
聞いてみたらいいでしょう。

最後の手段はセッション切断しかないと思います。

この回答への補足

コメントありがとうございます。
JavaBeanを作った人には問合せしましたが「できない」
といわれています。

Oracleサーバの負荷を減らしたいのです。
結果セットとして大量データができるクエリを1クライアントが実行/キャンセルを繰り返したらサーバーのリソースが不足してしまうのでキャンセルされたらリソースを解放する必要があると考えています。
セッション切断しかないでしょうか。

またセッション切断をアプリケーションで実現するとしたら処理は下記のような感じでしょうか。
1.クエリ実行(セッションID取得)
2.キャンセルイベント
3.別セッションでDB接続して1.のセッションをkillする。

補足日時:2003/05/14 12:07
    • good
    • 0

データベースは何ですか?


また使用しているクライアント側のアプリケーションは?

この回答への補足

データベースはOracle 8.0.5です。
使用しているクライアント側のアプリケーションは
JDBCドライバ経由のJavaBeanです。

補足日時:2003/05/13 17:41
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qクエリのキャンセルがいつになっても終わらない

SQLServer2005 Workgroup を使っています。

500万行ぐらいあるテーブルがあるのですが

update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~

というプログラムを実行したところ、10時間経っても計算結果が終わらない為、
一旦キャンセルをしました。

ところが「クエリをキャンセルしてます」というメッセージが流れたまま
キャンセル後、10時間経過しても終了してくれません。

この状態で新たにクエリを作ってプログラムを実行してもものすごく処理が重いです。

キャンセルによってデータを元に戻そうとしているのかどうか分りませんが
元に戻さなくていいので強制的に終了する方法はないでしょうか?

Aベストアンサー

頑張ってロールバックしているんでしょうね。
Update文が何行あるのかわかりませんが、適宜Commit入れておくことはできなかったんでしょうか?

責任を負えませんが、データのバックアップがきちんと用意できている等
DBが壊れることも厭わないなら、「サービスを停止する」とか。

QACCESS【更新クエリの中断ができない】

ACCESS初心者です。質問がわかりにくかったらすみません。
ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。
クエリを実行すると、
”更新クエリを実行すると、テーブルのデータが更新されます”
と、メッセージが表示され”はい”で次に進むと
”*件のレコードが更新されます。”と正確な件数が表示されます。
ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、
レコードは更新されてしまいます。何故でしょうか?教えてください。
______________________
フィールド:     型名
テーブル:      データ統合
レコードの更新:  Replace([型名],","," ")
抽出条件:     Like"*,*"

Aベストアンサー

以下のサイトが参考になれば良いのですが・・・

参考URL:http://support.microsoft.com/kb/322676/ja

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qオプションボタンの三択(アクセス)

こんにちは。
アクセスのオプションボタンについて教えてください。
マルにちょんとチェックするボタンです。

フォーム上にオプション1オプション2オプション3の選択肢があるとします。

ふつうにしていると1も2も3も全部一緒にえらべてしまいます。
ひとつにチェックをつけると他のふたつにはチェックできないようにするにはどうしたらいいですか?

Aベストアンサー

こんにちは。maruru01です。

オプショングループを使用します。
・ツールボックスのオプショングループ(四角でxyzと書いてある奴)を選択して、適当な大きさにドラッグして、フォームに置きます。
・ツールボックスからオプションボタンを選択して、マウスのポインタをオプショングループの中へ移動させると、四角の中が反転表示されるので、その状態でオプショングループの中にオプションボタンを配置します。
・同様に必要な分だけオプションボタンをオプショングループの中に配置します。

これで、オプショングループ内のオプションボタンは、1つしか選択出来なくなります。
ちなみにオプションボタンのプロパティの[オプション値]というのが各オプションボタンを表す値で、オプショングループのプロパティの[既定値]にどれかの値を入れておくと、最初にチェックされているオプションボタンを指定出来ます。
また、VBAで値を認識するのは、オプショングループのValueプロパティになります。
選択されているオプションボタンの[オプション値]がオプショングループのValueにセットされるわけです。

こんにちは。maruru01です。

オプショングループを使用します。
・ツールボックスのオプショングループ(四角でxyzと書いてある奴)を選択して、適当な大きさにドラッグして、フォームに置きます。
・ツールボックスからオプションボタンを選択して、マウスのポインタをオプショングループの中へ移動させると、四角の中が反転表示されるので、その状態でオプショングループの中にオプションボタンを配置します。
・同様に必要な分だけオプションボタンをオプショングループの中に配置します。

これで、オ...続きを読む

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

Q途中で処理を中断させたい (アクセスVBA)

早速ですが、アクセスVBAでエラー処理のコードを作成していますが、メッセージボックス出力後に、
"実行時エラー13:型が一致しません"
とでてきます。
おそらくデータが入っていないのにもかかわらず、次の処理を続行してしまうためにこのようなことが起こっているのではないかと思います。どのように処理をすればよいのでしょうか?
宜しくお願いします。

Aベストアンサー

No.2の方の答えが正しいです。

MsgBoxを表示させた後に、
Exit Subをつけないと、処理がそのまま続行されてしまうので、
エラーが発生してしまいます。

なので、データのチェックを行い、
エラーメッセージを表示した後に、
必ず、ExitSubをつけましょう。

Qクエリ上でフィールド名が2つあるときの見分け方

初心者です。
テーブルを複数使って、クエリを作っているのですが、
『&』でフィールドをつなごうとしたとき、
「指定されたフィールド'[会員種別ID]'がSQLステートメントのFROM句にある複数のテーブルを参照しました」
と言うエラーが出てきます。
多分これは、T_顧客リストとT_会員種別の両方に[会員種別ID]があるので区別がつかないと言う事だと思います。
(間違っていたら正しい意味を教えていただけますか?)
だから、どうしたら区別できるのでしょうか?

Aベストアンサー

[T_顧客リスト].
[T_会員種別].

のように、会員種別IDの前にテーブル名とドットをつけてみてください。

エラーの原因はご推察どおり、[会員種別ID]と指定しただけでは
どちらのテーブルの会員種別IDの事か判別できないためです。

QUPDATE文のWHERE条件に他のテーブルのフィールドも入れたい

SQL文についてです。

表Aで列1と列2が'◎'のものについて、列3,列4,列5をそれぞれ'○','△','×'に更新したい場合は下記でOKだと思います。
UPDATE 表A
SET 列3 = '○', 列4 = '△', 列5 = '×'
WHERE 列1 = '◎' AND 列2 = '◎'

列1と列2をキーとして表Aと結合できる表Bが存在するとします。
条件に表Bの列6が'□'だった場合を追加したい時、どのような方法で行えば良いのでしょうか?
内部結合やWHERE EXISTSなどをいろいろ調べたのですが、SQL文に慣れていないためかうまくいきません。
初歩的な質問で申し訳ありませんが過去質問で参考になるものがなかったのでお願いします。

Aベストアンサー

UPDATE 表A
SET 列3 = '○', 列4 = '△', 列5 = '×'
WHERE 列1 = '◎' AND 列2 = '◎'
AND EXISTS
( SELECT 1 FROM 表B
WHERE 表B.列1 = 表A.列1
AND 表B.列2 = 表A.列2
AND 表B.列6 = '□' )
じゃだめですか。

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング