Я работаю с базой данных SQL Server 2000, в которой, вероятно, есть несколько десятков таблиц, к которым больше нет доступа. Я хотел бы удалить данные, которые нам больше не нужно поддерживать, но я не уверен, как определить, какие таблицы нужно удалить.
База данных используется несколькими различными приложениями, поэтому я не могу быть на 100% уверен, что их просмотр даст мне полный список используемых объектов.
Что я хотел бы сделать, если это возможно, - это получить список таблиц, к которым не обращались вообще какое-то время. Ни чтения, ни записи. Как мне подойти к этому?


Если у вас есть столбцы lastupdate, вы можете проверить записи, на самом деле нет простого способа проверить чтение. Вы можете запустить профилировщик, сохранить трассировку в таблицу и проверить там
Что я обычно делаю, так это переименовываю таблицу, добавляя к ней знак подчеркивания, а когда люди начинают кричать, я просто переименовываю ее обратно
Если не используется, вы имеете в виду, что ваше приложение больше не имеет ссылок на рассматриваемые таблицы, и вы используете динамический sql, вы можете выполнить поиск имен таблиц в своем приложении, если они не существуют, удалите их.
Я также вывел все sprocs, функции и т. д. В текстовый файл и выполнил поиск по именам таблиц. Если они не найдены или обнаружены в процедурах, которые также необходимо удалить, удалите их.
MSSQL2000 не даст вам такой информации. Но один из способов определить, какие таблицы используются (а затем вывести, какие из них нет), - это использовать SQL Profiler для сохранения всех запросов, которые поступают в определенную базу данных. Настройте профилировщик для записи результатов в новую таблицу, а затем проверьте сохраненные там запросы, чтобы найти все таблицы (и представления, sps и т. д.), Которые используются вашими приложениями.
Другой способ, как я думаю, вы можете проверить, есть ли какие-либо «записи», - это добавить новый столбец с отметкой времени в каждую таблицу и триггер, который обновляет этот столбец каждый раз, когда происходит обновление или вставка. Но имейте в виду, что если ваши приложения выполняют запросы типа
select * from ...
тогда они получат новый столбец, и это может вызвать у вас проблемы.
Просто удалите их и посмотрите, не пожалуется ли кто-нибудь на это;)
Похоже, использование Profiler будет работать. Как только я позволю ему поработать некоторое время, у меня должен быть хороший список используемых таблиц. Любой, кто не использует свои таблицы каждый день, вероятно, может дождаться их восстановления из резервной копии. Спасибо, ребята.
Еще одно предложение по отслеживанию таблиц, в которые была внесена запись, - использовать Спасение журнала Red Gate SQL (бесплатно). Этот инструмент погрузится в журнал базы данных и покажет вам все вставки, обновления и удаления. Список также полностью доступен для поиска.
Он не соответствует вашим критериям для исследования операций чтения в базе данных, но я думаю, что метод SQL Profiler даст вам хорошее представление об этом.
Возможно, уже слишком поздно, чтобы помочь могрифе, но для тех, кто занимается поиском; Я бы поискал все объекты, использующие этот объект в моем коде, а затем в SQL Server, выполнив это:
выберите отдельный '[' + object_name (id) + ']'
из syscomments
где текст типа "% MY_TABLE_NAME%"