質問

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

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

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

役に立ちましたか?

解決

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

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

select * from ...

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

他のヒント

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

これは、データベースへの読み取りを調査するための基準を満たしていませんが、SQL Profiler テクニックを使用すれば、それに関してはかなりのアイデアが得られると思います。

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

私がいつもやっているのは、テーブルの名前の前にアンダースコアを付けて名前を変更することですが、人々が叫び始めたら、名前を元に戻します。

使用しない場合は、アプリケーションに問題のテーブルへの参照がなく、動的 SQL を使用していることを意味します。アプリケーション内でテーブル名を検索できます。テーブル名が存在しない場合は、それらを吹き飛ばします。

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

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

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

おそらくモグリを助けるには遅すぎるでしょうが、検索している人にとっては。コード内でこのオブジェクトを使用してすべてのオブジェクトを検索し、次に SQL Server で次のコマンドを実行します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top