2016-04-13 7 views
0

私のプロジェクトの目的のために、セッションベースの一時テーブルを使用することはできません。それらは永続的である必要がありますが、ある一定の時間(CRUDは実行されていない)が経過すると自動的に削除されます。これはすべて可能ですか?一定期間使用していない状態でテーブルを削除するにはどうすればよいですか?

+2

* *の並び替え。 'sys.dm_db_index_usage_stats'を使ってアクティビティを追跡し、このデータに作用するスケジュールされたジョブを使用することができます。ただし、このビューはSQL Serverを再起動するたびにクリアされるため、誤ってテーブルを削除しないように注意する必要があります。このデータを読むのもあまり効率的ではありません。おそらく、データレイヤーでこれを明示的にコーディングする方が良いでしょう。 –

答えて

1

SQL Server Agentを使用して、この方法で動作するストアドプロシージャを呼び出すジョブをスケジュールできます。 (How to Schedule a Job?

X時間後に更新されていないテーブルをどのように特定しますか?

使用このクエリ:

SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update, 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID('DatabaseName') 
AND OBJECT_NAME(OBJECT_ID) LIKE '%%' -- Here is the template name for your tables 
AND DATEDIFF(MINUTE, last_user_update, GETDATE()) > 10 -- Last updated more than 10 minutes 

今、あなたは削除するテーブルを持っていることを、あなたは(しながら、手順、カーソルを)それらをドロップしたいものは何でもロジックを使用することができます

+0

これは、サーバーの再起動後に失敗します。 –

+0

サーバの再起動は気にしないので、これは私にとっては最高の選択肢です。 – jplanglais

0

確かです。あなたのプログラム層にそれを書いてください。

AUTOMATICALLY - SQL Server内:いいえ。あなたはスクリプトを定期的に起動するためにエージェントを常温で使用します。

「非アクティブ」とは、あなたの責任を意味します。

0

このテーブルの保存日をどこかに(たとえば同じテーブルまたは別の特別なテーブルに)保存してから、最後の変更日を確認してからテーブルを削除するジョブを作成する必要があります。

+0

テーブルが読み取り専用アクティビティで使用される場合はどうなりますか? – Shnugo

+1

**上記のsys.dm_db_index_usage_stats **が優れたソリューションです。しかし、このビューはsqlサービスの再起動後に再作成されます。この場合、** sys.dm_db_index_usage_stats **のデータを別の永久テーブルに定期的に保存することができます。再起動後、インデックスの使用に関するサーバー情報は削除されません。そして、この "統計"テーブルを使用して、テーブルを削除するかどうかを決定することができます。 –

関連する問題