2009-05-10 20 views
4

MS-SQLで '永続的な'一時テーブルを使用することはできますか?私が意味することは、現在グローバルテンポラリテーブルを生成するバックグラウンドタスクがあることです。これはさまざまなタスクによって使用されます(これがグローバル化した理由です)。残念ながら、テーブルが使用されなくなると、SQLによって自動的に削除されます。これは私のシステムによってうまく処理されます。再構築するためにキューに入れられます。しかし、理想的には、1日に1回しか構築されません。ですから、理想的には、「何も触れていなければ1時間、削除してください」などのタイムアウトパラメータを設定するような設定ができます。SQLの永続的な一時テーブル?

DBを管理すること(断片化、ログの増加など)に関連する負荷がより大きくなるため、実際には既存のDBに入れたくありません。効率的なロールアップデータであり、 1ギガバイト以上のHD空間を占有しています。

私は、tempdbと同じドライブに別のDBを作成し、それをPseudoTempDBのようなものにして、自分自身を落として処理することを計画しています。

洞察を深めていただければ幸いです。

+1

プランBに進み、生涯を自分で管理します.SQL Serverだけでは何も求めません。 –

+0

私はこの点を参考にしています:http://stackoverflow.com/questions/27835/does-ms-sql-support-in-memory-tables – Kekoa

+0

kekoav、私の理解は、テーブル変数はtempとほとんど同じですテーブル(永続性の観点から)だから私の前提は、テーブル変数は(一時テーブルと同様に)アクセスを停止すると消えてしまうということです。 – Mark

答えて

3

私はあなたのプランBに行くでしょう、 "tempdbと同じドライブに別のDBを作成し、PseudoTempDBのようなものを呼び出して、自分自身を落としてしまいます。

2

私はこの質問を二重に受け入れることを認めなければなりません。「永続的」と「一時的」は通常一緒に行かないのです!ちょっとしたアウトオブボックスの考え方はどうですか?おそらく、あなたのバックグラウンド・タスクは、SQLがテーブルを未使用としてマークしないように、定期的に些細なクエリを実行する可能性があります。そうすれば、作成と分解を直接制御することができます。

+0

ええ、ちょっとした二分法 - ちょうど私の 'temp'データのための大きなウィンドウがほしいです。 :) 実際には、バックグラウンドでクエリを実行する必要はありません。一度クエリを実行した接続が開いている限り、クエリはそのまま残ります。ハックとして、それは私が現在やっていることですが、何らかの理由で接続が切断された場合、すべてを再構築する必要がありますので、私の計画Bと同じくらいクリーンな解決策ではありません。 – Mark

+0

何か...幸運と幸運upvoteに感謝します。 –

+0

これは非常に簡単なことです。 tempテーブルが多すぎる行を保持していない場合、fooからselect count(*)が実行されます。 –

1

永久テーブルの作成はどうですか?言って、MyTable。 24時間に1回、このようなデータリフレッシュ:

  1. 新しいテーブルMyTableNewを作成し、トランザクション内でそれ
  2. を移入、MyTableとをドロップし、MyTableと
  3. にMyTableNewの名前を変更するRENAME_OBJECTを使用

このあなたは毎日テーブルを作り直しています。

ログファイルが心配な場合は、別のデータベースにテーブルを格納し、それをRecovery Model:Simpleに設定します。

+0

これは基本的に私が上で概説したものです - 唯一の違いは、あなたが同じDBでそれを行うことを提案することです。私は確かに同じDBに入れることができますが、それは長期的なデータではないので、DBのバックアップには必要ありません(また、除外を複雑にしたくない)。 – Mark

4

あなたはtempdb.dbo.TempTableとしてテーブルを作成した場合、それはまで落ち得ることはありません。

- SQL Serverが

Bを再起動する - あなたの場合は、明示的にそれを

をドロップそれを常に利用可能にしたい場合は、再起動時にtempdbにコピーされるようにそのテーブルを作成することができます(ただし、後で作成する新しいデータベースでも作成されるため、手動で削除する必要があります)起動ストアドプロシージャを使用して作成することができます。しかし、再起動によってデータを永続化する方法はありません。

+2

興味深いので、#または##の前にデータベースとしてTempDBを使用して作成すると、再起動するまで(tempdbがダンプされると)効果的にperminentになります。それはまさに私が後にしていることです - それが存在しなければ私はそれを再現することができます。 – Mark

+1

そうですね、それはどのように動作するのですか。 – LeoPasta

+2

@マーク、LeoPastaが何を言っているかは間違いないかどうか確認してください。 – peakit

関連する問題