- ベストアンサー
Oracle10gでテーブル単位でTemporary Tableが作成できない場合の代替案または実装方法について
- 現在Webアプリケーションで100万件のデータを取得する際、一度サーバ側でTemporary TableをInsertし、そのデータを参照しています。しかし、Insertが遅く、メモリの使用にも不安があります。そこで、テーブルが自動的にdropする仕組みを検討していますが、良い案が思いつきません。代替案や実装方法についてご教示いただけませんか?
- Oracle10gにおいて、テーブル単位でTemporary Tableを作成する方法を試行錯誤しています。現在はC#を使用してサーバ側でTemporary TableにデータをInsertし、そのデータを参照していますが、Insertが遅くメモリの使用に不安があります。テーブルが自動的にdropする仕組みを検討していますが、具体的な実装方法についてご教示いただけませんか?
- WebアプリケーションでOracle10gを使用して100万件のデータを取得する際、Temporary Tableを使用してデータを参照していますが、Insertが遅くメモリの使用に不安があります。テーブルが自動的にdropする仕組みを検討していますが、実装方法がわかりません。どなたか代替案や実装方法についてご教示いただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ごめんなさい、わかりません。 なんらかのイベントというかトリガーというかアクションによって、テンポラリ表領域に使用したテーブルを削除するように作成するしかないようですね。定期的に削除するジョブを走らせておくとか。 PRESERVE ROWSを指定して作成した場合、切捨てはするけれどDROP はしないですね。「CREATE GLOBAL TEMPORARY TABLE ~ as select * from」 だと、DROPしないといけないので使えませんね。
その他の回答 (1)
- joih
- ベストアンサー率35% (37/105)
夜間バッチでは100万件単位のデータを扱ったことがあるのですが、オンラインではないので参考になるかどうかわかりませんが。 ものによっては、セッションはつながりっぱなしで、切れる時はWeb Serverまかせなのでタイミングはとりにくいかと。 集計処理なのでしょうか? それとも表示処理なのでしょうか? 一括ダウンロード処理? 集計であれば差分更新、表示であれば表示範囲だけを処理するというロジックではだめなのでしょうか?設計とコーディングが面倒くさいですけど。 処理そのものの概要がわかるような情報をお願いします。 データベースそのものだけでの解決案は難しいかも?
補足
レスありがとうございます。 かなり、まだ悩んでいます。 参照を行うのに使用していまして、一度にクライアントに送信すると固まる?のでページングという意味で、やっております。 最初はfillで500件ずつ返していたのですが、その間にDMLが発生すると結果がつじつまがあわないことになり、NGになりました。 そこで、現在では、テンポラリにRowデータをシリアライズしてCLOBで保存しているのですが、なんせ件数だけに重く+メモリが不安です。 そこで、create table ~ as select * from ~でテーブルを作成して そこを参照したかったのですが、今度はdropするタイミングがつかめませんでした。 テンポラリにこのテーブル情報を格納してテンポラリから自動で削除されるタイミングでこのテーブルもdrop出来ないかと考え中です。 このような感じですが、わかりますでしょうか? 引き続きよろしくお願いいたします。
お礼
お手数おかけしてます。 そうなんです、Dropしないと残って行っちゃうのですよね SQLServerみたいな #Table_Name とかあればよかったのですが、 1週間たっても他の人からレスないので、無理なのかも知れません。 もう少し悩んでみます。 ありがとうございました。今回は一度締め切ります。