
お世話になっております。
Oracle10gで テーブル単位でTemporary Tableが出来ないか
試行錯誤しております。
要件として、Webアプリケーションで100万件のデータをSelectします。
その際、全データを取得するには、遅すぎるので、分割して取得しています。
現在では、C#で、サーバ側で取得Temporary Table Insertして、そのデータを参照するようにしているのですが、
Insertが遅いのと、C#に一度持ってきていますので、メモリが不安な状態です。
これを、create global temporary table CRE_TABLE_NAME as select * from TABLE_NAME
にして、CRE_TABLE_NAMEを参照したいのですが、dropタイミングがつかめませんでした。
そこで、このテーブルが自動的にdropしたいのですが、何か良い案はありませんでしょうか?
思いついたのが、temporary tableにテーブル情報を保持して、sessionが切れた、時点で消えるのを利用して、テーブルdropのトリガーを記載しようと思ったのですが、そのトリガーを思いつきませんでした。
どなたか、代替案または、実装したことがある方、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ごめんなさい、わかりません。
なんらかのイベントというかトリガーというかアクションによって、テンポラリ表領域に使用したテーブルを削除するように作成するしかないようですね。定期的に削除するジョブを走らせておくとか。
PRESERVE ROWSを指定して作成した場合、切捨てはするけれどDROP はしないですね。「CREATE GLOBAL TEMPORARY TABLE ~ as select * from」 だと、DROPしないといけないので使えませんね。
お手数おかけしてます。
そうなんです、Dropしないと残って行っちゃうのですよね
SQLServerみたいな #Table_Name とかあればよかったのですが、
1週間たっても他の人からレスないので、無理なのかも知れません。
もう少し悩んでみます。
ありがとうございました。今回は一度締め切ります。
No.1
- 回答日時:
夜間バッチでは100万件単位のデータを扱ったことがあるのですが、オンラインではないので参考になるかどうかわかりませんが。
ものによっては、セッションはつながりっぱなしで、切れる時はWeb Serverまかせなのでタイミングはとりにくいかと。
集計処理なのでしょうか?
それとも表示処理なのでしょうか?
一括ダウンロード処理?
集計であれば差分更新、表示であれば表示範囲だけを処理するというロジックではだめなのでしょうか?設計とコーディングが面倒くさいですけど。
処理そのものの概要がわかるような情報をお願いします。
データベースそのものだけでの解決案は難しいかも?
この回答への補足
レスありがとうございます。
かなり、まだ悩んでいます。
参照を行うのに使用していまして、一度にクライアントに送信すると固まる?のでページングという意味で、やっております。
最初はfillで500件ずつ返していたのですが、その間にDMLが発生すると結果がつじつまがあわないことになり、NGになりました。
そこで、現在では、テンポラリにRowデータをシリアライズしてCLOBで保存しているのですが、なんせ件数だけに重く+メモリが不安です。
そこで、create table ~ as select * from ~でテーブルを作成して
そこを参照したかったのですが、今度はdropするタイミングがつかめませんでした。
テンポラリにこのテーブル情報を格納してテンポラリから自動で削除されるタイミングでこのテーブルもdrop出来ないかと考え中です。
このような感じですが、わかりますでしょうか?
引き続きよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
object browser で処理を中断す...
-
同じSELECT文同士でのデ...
-
年度毎にシーケンスの初期化?
-
Truncate以外で高速にテーブル...
-
PL/SQLの平行処理について
-
C#でトランザクション開始後参...
-
チューニング対象のSQLの見つけ...
-
Oracleの欠点
-
DELETE文でFROM句を省略した場合
-
データを削除しても表領域の使...
-
ORA-00959: 表領域'****'は...
-
viewのバックアップ
-
Access レコードを追加できませ...
-
oracleのimpdpでORA-39166
-
SQL*Loaderをダイレクトモード...
-
アクセス初心者に注意点を教え...
-
索引作成について
-
グループ単位にCSVファイル...
-
【Access】外部結合を行う前に...
-
Oracle上のテーブルからCREATE ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
RDBのテーブル種類の違い
-
object browser で処理を中断す...
-
他の処理でselectさせないよう...
-
同じSELECT文同士でのデ...
-
Access2013で操作ログを残した...
-
統計情報の取得=コミットですか?
-
年度毎にシーケンスの初期化?
-
accessでイベントを中止するよ...
-
PL/SQLの平行処理について
-
[性能改善]AccessのDBに大量の...
-
ActiveX DLLでのオラクルのトラ...
-
Oracleから見たOracleの優位性(...
-
DBリンクエラーについて
-
Transactionで待機状態になりま...
-
チューニング対象のSQLの見つけ...
-
1件あたりの処理時間を検討する...
-
DMLロック解除待ち時間の指定は...
-
処理速度について(UPDATE)
-
同一レコード更新時の排他制御
おすすめ情報