• ベストアンサー

セッション復活の方法

VB6.0アプリからOracleデータベースにアクセスして データの取得・更新を行うシステムを構築しています。 (2層C/Sシステムっていうんでしょうか?) 今、このシステムにおけるデータの取得・更新を 起動~終了の1セッション内で行っています。 将来的にユーザ数が増え、セッション数が増加すると このような1セッションの作りではパフォーマンスが低下してしまうということを聞きました。 そこで、必要な時だけセッションを張り、 必要の無い時はセッションを切った状態にすることが要望されていますが これを行うとセッションを張る時のオーバーヘッドがかかって遅くなります。 そこで、CreateDatabasePoolメソッドをGetDatabaseFromPoolメソッドや用いて、 セッションの瞬時復帰を行い、上記のオーバーヘッドをなくすことを思いついたのですが、 調べると私の構築しているようなシステムではできないようなのです。 Webアプリならできるようですが。。 私の構築しているようなシステムにおいて セッション即時復帰の方法、 または、CreateDatabasePool、GetDatabaseFromPoolの使用法 をご教授ください。 宜しくお願いします。 言葉足らずな説明ご容赦ください。

  • Oracle
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • GoF
  • ベストアンサー率37% (34/91)
回答No.2

バージョンとエディションの表記がされてないので回答に困るのですが、 コネクションマネージャを使用する方法があります。 ユーザプロセス - コネクションマネージャ - リスナ の3層構成になり、コネクションプール、セッションの多重化がサポートされているようです。 (エンタープライズ版の機能です。) 但し、ゾンビセッションのロックで苦労したという噂話を聞いているので使用したことはありません。 ちなみ、Unix系の専用サーバはプロセスモデルですので、接続操作にはかなりコストがかかります。 スレッドモデルのWindowsでは、およそ 10 ~20 接続であれば MTS にしなくても大丈夫だと思います。 (使用環境により異なりますので DBAと相談されてください) あとアプリケーションレベルで実装されるのは避けたほうがよいと思います。

yokothin
質問者

お礼

遅くなって申し訳ありません。 回答ありがとうございます。 Oracleのバージョンは9.2です。 書き忘れました。すみません。 コネクションマネージャですか~ そういうツールがあるんですね。なるほど。 前の質問者の方のアドバイスと合わせ DBAと相談してみます。

その他の回答 (1)

回答No.1

セッション数が負担になるようならば、共有サーバ接続を行うようにすれば、 セッションの増加による不可は軽減できます。 また、セッション開設時のオーバーヘッドですが、認証の問題さえ何とかすれば さほど長い時間がかかることはないと思います。 (windowsサーバで設定が良くないと、時間がかかるけど、設定さえ見直せば、 コンマ数秒でセッション開設も不可能ではありません。)

yokothin
質問者

お礼

遅くなって申し訳ありません。 回答ありがとうございます。 サーバ側設定でオーバヘッド回避ですねぇ。 なるほど、なるほど。試してみます。 ちょっとまだ忙しくて試せてません。。。泣

関連するQ&A

  • セッションに格納する方法

    あるプロジェクトのWebアプリを引き継ぐことになりそのソースを見ていたところ あるメソッドで次のようにしてセッションに格納した値をやりくりしている部分があり???? と思ったので質問させてください。 //ログイン情報を取得 A aObj = (A)session.getAttribute("LOGIN_INFO"); //セッションンにフラグを格納 aObj.setFlag = true; そして別のメソッドで下記のように再度ログイン情報を取得し上記メソッドでセットしたフラグを取得 //ログイン情報を取得 A aObj = (A)session.getAttribute("LOGIN_INFO"); if(aObj.getFlag) { System.out.println("hello"); } ここで疑問なのですが最初に aObj.setFlag = true; とやった後に session.setAttribute("LOGIN_INFO", aObj); と明示的に記述してあげなくてもセッションの中のaObjの flagプロパティにはtrueに書き換えられるのでしょうか。 というかデバッグしてみたらtrueに書き換えがされていました。 (恐らく、オブジェクトの参照渡しのため) こういう書き方でセッションの中のオブジェクトが持つプロパティを書き換えるのって 一般的な書き方でしょうか。最初、パッと見たとき、セッションから取得したaObjにsetterで プロパティを書き換えているだけでセッションが保持するオブジェクトのプロパティを 書き換えているようには見えませんでした。 setterを実行することでセッションの保持するオブジェクトのプロパティを書き換えるという コードに違和感を感じたものでして・・・

    • ベストアンサー
    • Java
  • セッション属性

    HttpSession 属性に HashMap がバインドされています。 そこで、HttpSession の getAttribute で取得した HashMap オブジェクトで、任意のキーにバインドされている値をgetして、putで入れなおして変更すると、 結局、セッション属性にバインドされている HashMap の値が更新されることになる。 (setAttribute メソッドは使わない) 上記は正しいですか? とりあえず、簡素に質問しました。

  • Cake2系のコントローラでセッション情報取得

    CakePHP2を使用して、開発を行っているのですが、 AppControllerを継承したControllerのあるメソッドで、 別のコントロー(AppController継承)をnewでインスタンスを生成し、 自前のコントローラのあるメソッドを呼び出しているのですが、 自前のコントローラのメソッド内で、セッション情報取得しようとすると 「Call to a member function load() on a non-object」 となりエラーになります。 AppControllerには、コンポーネントの呼び出しを行っています。 public $components = array('Common','Session'); newして使わないコントローラだと、セッション情報を取得できるのですが、 newしたコントローラでは、セッション情報にセットした情報を取得することができません。 newしたコントローラへ必要な情報を渡すには引数以外はないのでしょうか。 セッション情報をnewしたコントロールで取得したいのですが、 可能でしょか。

    • ベストアンサー
    • PHP
  • セッションを使用したページ遷移

    こんにちは、質問です。 現在趣味で制作しているPHPを利用したシステムで フォームからDBへ多くのデータを登録する処理を記述しています。 計4Pのページをフォームにより遷移しながら最終ページでデータ挿入をする風に考えているのですが セッションとPOSTメソッドを使用してデータの引継ぎを行っていると、ブラウザの「戻る」ボタンを押した時に以前のページが有効期限切れとなってしまい、データを戻って入力しなおしたい時に最初からやり直さなければならない状態になっています。 こういった状況を回避するにはどのような手段がスタンダードなのでしょうか? 確かセッションを使用せずにPOSTメソッドのみで行った場合はブラウザの「戻る」ボタンを使用してもデータが保持されていました よろしくおねがいします 環境はPHP4 MySQL3です!

    • 締切済み
    • PHP
  • 学校の授業で困っていることがあります。PHP+MySQLでショッピング

    学校の授業で困っていることがあります。PHP+MySQLでショッピングサイトを構築しているのですが、カートの在庫処理の部分で疑問が発生しました。 私たちのショッピングサイトは、カートに商品を追加した時点で、DBの在庫テーブルの販売数を増やし、在庫数に即時に反映させたいと考えています。 しかし、ブラウザを閉じた時やセッションタイムアウト時、ログアウト時に確定していないカートの商品については販売数を元に戻したいのです。 ログアウト時は明示的に行えると思うのですが、セッションタイムアウト時、ブラウザを閉じた時の処理はどのようにすればいいのですか? そのようなイベントを取得するメソッドや方法はないのでしょうか? 参考サイトや方法を教えてください!

    • ベストアンサー
    • PHP
  • セッションデータが残ってしまう

    phpでログインページを作ってます。 「現在のログイン人数」を調べる方法として、ログインすると生成されるセッションデータの数でそれを表示しようと思ったのですが、ログアウト(またはウィンドウを閉じた)してもセッションデータが残ってしまいます。ログアウトならdestroyで消去するという手もありますが、ウィンドウを閉じた場合だとプログラムが働かないのでデータを消せません。 セッションデータが必要なくなったとき、それを削除するようにするにはどう設定したら良いのでしょうか?

    • ベストアンサー
    • PHP
  • メソッドの作成基準について

    現在、Webアプリを開発しているのですがメソッドを作成するにあたり いつも悩むことが下記2点あります。 どういう基準で判断すればよいのでしょうか。 正解の判断基準ってあるのでしょうか。 1. メソッドをStatic なメソッドにするかインスタンスメソッドにするか。 2. メソッド内の処理に必要な数値を引数で取得するかセッションから取得するか。   2.についてはセッションから値を取得するようにすれば引数の無いメソッドが できて便利かもと思ってはいるのですがこの考えは正しいのでしょうか。

    • ベストアンサー
    • Java
  • IIS 有効なセッションIDの取得について

    お世話になります。 表題につきましてご教授願います。 現在、  Windows2003  IIS6  ASP にて、社内システム構築中です。 ある、機能でセッションIDをフォルダ名としサーバー上にフォルダ を作成しております。 そこで質問ですが、サーバーが振ったセッションIDの中で、(サーバー から見た)現在有効なセッションIDを取得することは可能でしょうか。 クライアント側で既にブラウザを落としている(セッションが切れている) 場合は、作成されたフォルダを削除したいと考えているのですが、その際、 有効なセッションIDが取得できれば、セッションが切れているIDのフォルダを 削除できるかな。。と考えている次第です。 以上、宜しくお願い致します。

  • セッションデータの排他処理

    セッションデータを更新するようなケースで、簡単に排他処理をする方法はないでしょうか。 現在はCGI::Sessionを使っていますが、このfileドライバは、読み込み時にflock⇒開放⇒書き込み時にflock、というように一度開放してしまいます。他の付属ドライバは調べていませんが同じかもしれません。 CGI::Sessionオブジェクトが存在する間はずっとロックしておいて欲しいのです。(と言うより普通に考えればそうであるべきな気がしますが) やはりそのための、たとえばIDごとにわざわざロックファイルを作るとかの処理が必要なのでしょうか。あるいは、ドライバを自分で書くとか。 常套手段的な、それともすでにそういうドライバをご存知でしたら教えてください。 また、セッションデータを更新するなんて珍しくもないと思うんですが、CGI::Sessionが対応してない理由とか、皆さんはどうしているのかも、気になります。

  • セッションを用いたデータの変更、反映

    お世話になります。 セッションを使用して会員管理システムを構築しているのですが、管理システムの中に ポイント計算システムを導入しています。 会員登録 ~ 商品の購入 ~ ポイントの加算・減算・利率等のコアな箇所のプログラムは 思い通りに走りました。 しかし、ポイントの加算・減算処理を行った場合、データベースには計算後の値が入るのですが、 セッションを使用しているため、一度ログアウト( セッションを破棄 )して再ログインをしないと 最新のデータ( ポイント )がブラウザへ反映されず悩んでいます。 セッションIDを書き換えれば何とかなるかもと思い、 session_regenerate_id(true); も設置してみましたが、挙動は変わりませんでした。 ( リンクをダブルクリックしまくるとセッションが切れるくらいです。 ) クライアントサイドのスクリプトが必要になるのでしょうか? PHPのみで解決できる方法がございましたらご教示いただきたく存じます。 ---------------- ■スペック PHP 5.1.6 MySQL 5.0.95 ----------------

    • ベストアンサー
    • PHP