2

私は SQL Server 2000 データベースを使用しています。このデータベースには、アクセスされなくなったテーブルが数十ある可能性があります。維持する必要がなくなったデータを消去したいのですが、削除するテーブルを特定する方法がわかりません。

データベースはいくつかの異なるアプリケーションで共有されているため、これらを確認しても、使用されているオブジェクトの完全なリストが得られるとは 100% 確信できません。

可能であれば、私がやりたいことは、一定期間まったくアクセスされていないテーブルのリストを取得することです。読み取りも書き込みもありません。これにどのようにアプローチすればよいですか?

4

7 に答える 7

5

MSSQL2000 では、そのような情報は提供されません。ただし、どのテーブルが使用されているかを特定する (そしてどのテーブルが使用されていないかを推測する) 方法は、SQL プロファイラーを使用して、特定のデータベースに送信されるすべてのクエリを保存することです。結果を新しいテーブルに記録するようにプロファイラーを構成し、そこに保存されたクエリをチェックして、アプリケーションで使用されるすべてのテーブル (およびビュー、SP など) を見つけます。

「書き込み」があるかどうかを確認する別の方法は、すべてのテーブルに新しいタイムスタンプ列を追加し、更新または挿入があるたびにその列を更新するトリガーを追加することです。ただし、アプリが次のタイプのクエリを実行する場合、

select * from ...

その後、新しい列を受け取り、問題が発生する可能性があります。

于 2008-08-29T19:25:05.553 に答える
1

書き込まれたテーブルを追跡するためのもう 1 つの提案は、Red Gate SQL Log Rescue (無料) を使用することです。このツールはデータベースのログに飛び込み、すべての挿入、更新、および削除を表示します。リストも完全に検索可能です。

データベースへの読み取りを調査するための基準を満たしていませんが、SQL プロファイラーの手法を使用すれば、その点についてはかなりのアイデアが得られると思います。

于 2008-08-29T20:10:51.293 に答える
0

mogrify を手伝うにはおそらく遅すぎますが、検索を行っている人にとっては。コードでこのオブジェクトを使用してすべてのオブジェクトを検索し、次にこれを実行して SQL Server で検索します。

'%MY_TABLE_NAME%' のようなテキストがある
syscomments から個別の '[' + object_name(id) + ']'を選択します

于 2008-10-17T21:28:30.610 に答える
0

書き込みを確認できる lastupdate 列がある場合、読み取りを確認する簡単な方法はありません。プロファイラーを実行し、トレースをテーブルに保存してそこにチェックインすることができます

私が通常行うことは、テーブルの名前にアンダースコアを付けて名前を変更することです。人々が叫び始めたら、名前を元に戻すだけです

于 2008-08-29T19:19:26.953 に答える
0

使用されていない場合は、アプリケーションが問題のテーブルへの参照をもう持たず、動的 SQL を使用していることを意味します。テーブル名が存在しない場合は、アプリでテーブル名を検索できます。

また、すべての sproc、関数などをテキスト ファイルに出力し、テーブル名を検索しました。見つからない場合、または削除する必要のある手順で見つかった場合は、それらを吹き飛ばします。

于 2008-08-29T19:22:59.550 に答える
0

それらを削除して、ユーザーがそれについて不平を言うかどうかを確認してください;)

于 2008-08-29T19:28:57.993 に答える
0

プロファイラーを使用するとうまくいくようです。しばらく実行すると、使用済みテーブルの適切なリストが表示されるはずです。テーブルを毎日使用しない人は、バックアップから復元されるまで待つことができます。ありがとう、皆さん。

于 2008-08-29T19:50:44.430 に答える