Определить, какие созданные пользователем объекты в SQL Server
Я пытаюсь пройти нашу базу данных разработки прямо сейчас и очистить некоторые старые тестовые процессы/таблицы. Можно ли определить, какие созданные пользователем объекты в базе данных SQL Server 2005? Если да, то как я могу найти эту информацию?
Изменить: просто хотел уточнить, что объекты, о которых идет речь, уже существуют. Настройка аудита и триггеров, вероятно, не принесет мне много пользы. Я предполагаю, что в основном я искал способ использовать системные таблицы/представления для получения информации.
Ответы
Ответ 1
Ответ "нет, вы, вероятно, не можете".
Пока есть вещи, которые могут сказать, кто создал данный объект, за ними стоит много "ifs". Быстрый (и не обязательно полный) обзор:
sys.objects(и, следовательно, sys.tables, sys.procedures, sys.views и т.д.) имеет столбец main_id. Это значение является внешним ключом, относящимся к списку пользователей базы данных, который, в свою очередь, может быть объединен со списком логинов SQL (экземпляров). (Вся эта информация может быть найдена в следующих системных представлениях.)
Но.
Быстрая проверка нашей настройки здесь и беглый обзор BOL указывает, что это значение установлено только (то есть не null), если оно "отличается от владельца схемы". В нашей системе разработки, и у нас есть две другие схемы, все выглядит как NULL. Вероятно, это потому, что у всех есть права dbo в этих базах данных.
Это проверка подлинности NT. Идентификация SQL, вероятно, работает почти так же. Кроме того, есть ли у всех и используют уникальный логин или они разделяются? Если у вас оборачивается текучесть сотрудников и домен (или SQL), данные снова могут быть недоступны или могут быть неполными.
Вы можете просмотреть эти данные (выберите * из sys.objects), но если main_id имеет значение null, вам, вероятно, не повезло.
Ответ 2
Если объект был недавно создан, вы можете проверить отчет истории изменений схемы, в SQL Server Management Studio, который "предоставляет историю всех выполненных исполнений операторов DDL в базе данных, записанных по умолчанию":
![enter image description here]()
Затем вы можете выполнять поиск созданных операторов объектов. Среди всей отображаемой информации есть имя пользователя, для которого выполнена инструкция DDL.
Ответ 3
Если у каждого пользователя есть свой собственный вход в SQL Server, вы можете попробовать это
select
so.name, su.name, so.crdate
from
sysobjects so
join
sysusers su on so.uid = su.uid
order by
so.crdate
Ответ 4
Если вам нужен небольшой и конкретный механизм, вы можете найти DLL Triggers.
Ответ 5
Вы пробовали этот запрос:
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( '<db name>')
AND OBJECT_ID=OBJECT_ID('<table name>')