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

StackOverflow https://stackoverflow.com/questions/35076

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

select * from ...

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top