Стратегия выявления неиспользуемых таблиц в SQL Server 2000? - PullRequest
2 голосов
/ 29 августа 2008

Я работаю с базой данных SQL Server 2000, которая, вероятно, имеет несколько десятков таблиц, к которым больше нет доступа. Я хотел бы очистить данные, которые нам больше не нужны, но я не уверен, как определить, какие таблицы удалить.

База данных совместно используется несколькими различными приложениями, поэтому я не могу быть на 100% уверен, что просмотр этих данных даст мне полный список используемых объектов.

Что бы я хотел сделать, если это возможно, это получить список таблиц, к которым не обращались вообще в течение некоторого периода времени. Не читает, не пишет. Как мне подойти к этому?

Ответы [ 7 ]

5 голосов
/ 29 августа 2008

MSSQL2000 не предоставит вам такую ​​информацию. Но способ определить, какие таблицы используются (а затем определить, какие из них не используются), - использовать SQL Profiler для сохранения всех запросов, поступающих в определенную базу данных. Настройте профилировщик для записи результатов в новую таблицу, а затем проверьте сохраненные там запросы, чтобы найти все таблицы (и представления, sps и т. Д.), Которые используются вашими приложениями.

Еще один способ, которым, я думаю, вы могли бы проверить, есть ли какие-либо «записи», - это добавить новый столбец отметки времени к каждой таблице и триггер, который обновляет этот столбец при каждом обновлении или вставке. Но имейте в виду, что если ваши приложения выполняют запросы типа

select * from ...

тогда они получат новый столбец, и это может вызвать некоторые проблемы.

1 голос
/ 30 августа 2008

Другим предложением для отслеживания таблиц, в которые были записаны, является использование Red Gate SQL Log Rescue (бесплатно). Этот инструмент погружается в журнал базы данных и покажет вам все вставки, обновления и удаления. Список также полностью доступен для поиска.

Это не соответствует вашим критериям для исследования операций чтения в базе данных, но я думаю, что методика SQL Profiler поможет вам в этом разобраться.

0 голосов
/ 18 октября 2008

Вероятно, слишком поздно, чтобы помочь mogrify, но для любого, кто делает поиск; Я бы искал все объекты, используя этот объект в моем коде, а затем в SQL Server, выполнив это:

выберите различное '[' + имя_объекта (id) + ']'
из сискомментариев
где текст наподобие '% MY_TABLE_NAME%'

0 голосов
/ 29 августа 2008

Похоже, что использование Profiler будет работать. После того, как я позволю ему немного поработать, у меня будет хороший список используемых таблиц. Любой, кто не использует свои таблицы каждый день, вероятно, может дождаться их восстановления из резервной копии. Спасибо, ребята.

0 голосов
/ 29 августа 2008

Просто удалите их и посмотрите, не жалуется ли на это какой-либо пользователь;)

0 голосов
/ 29 августа 2008

Если вы не используете, вы имеете в виду, что в вашем приложении больше нет ссылок на рассматриваемые таблицы, и вы используете динамический sql, вы можете выполнить поиск имен таблиц в своем приложении, если они не существуют, взорвать их .

Я также вывел все sprocs, функции и т. Д. В текстовый файл и провел поиск по именам таблиц. Если они не найдены или не найдены в процедурах, которые также необходимо удалить, удалите их.

0 голосов
/ 29 августа 2008

Если у вас есть столбцы lastupdate, которые вы можете проверить на запись, то на самом деле нет простого способа проверить на чтение. Вы можете запустить профилировщик, сохранить трассировку в таблице и проверить там

Что я обычно делаю, так это переименовываю таблицу, ставя перед ней префикс подчеркивания, когда люди начинают кричать, я просто переименовываю ее обратно

...