アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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が見つからない時は、教えて!gooで質問しましょう!

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

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