2009-08-10 3 views
34

Я пытаюсь пройти через нашу базу данных разработки прямо сейчас и очистить некоторые старые тестовые процессы/таблицы. Можно ли определить, какие созданные пользователем объекты в базе данных SQL Server 2005? Если да, то как я могу найти эту информацию?Определить, какие созданные пользователем объекты в SQL Server

Редактировать: Просто хочу уточнить, что объекты, о которых идет речь, уже существуют. Настройка аудита и триггеров, вероятно, не принесет мне много пользы. Наверное, я в основном искал способ использовать системные таблицы/представления для получения информации.

ответ

28

Ответ «нет, вы, вероятно, не можете».

Хотя есть вещи, которые могут сказать, кто создал данный объект, за ними стоит много «ifs». Быстрый (и необязательно полный) обзор:

sys.objects (и, следовательно, sys.tables, sys.procedures, sys.views и т. Д.) Имеет столбец main_id. Это значение является внешним ключом, относящимся к списку пользователей базы данных, который, в свою очередь, может быть объединен со списком логинов SQL (экземпляров). (Вся эта информация может быть найдена в следующих системных представлениях.)

Но.

Быстрая проверка нашей установки здесь и беглый обзор BOL указывает, что это значение задано (то есть не равно null), если оно «отличается от владельца схемы». В нашей системе разработки, и у нас есть две другие схемы, все выглядит как NULL. Вероятно, это потому, что у всех есть права dbo в этих базах данных.

Это аутентификация NT. Идентификация SQL, вероятно, работает почти так же. Кроме того, есть ли у всех и использовать уникальный логин или они разделяют? Если у вас текучесть сотрудников и домен (или SQL) удаляются, снова данные могут отсутствовать или быть неполными.

Вы можете просмотреть эти данные (выберите * из sys.objects), но если main_id имеет значение NULL, вам, вероятно, не повезло.

+0

Хороший ответ, охватывает все базы ... – gbn

+0

Это в значительной степени то, что я думал, что ответ будет. Спасибо за помощь. – bcasp

1

Если вам нужен небольшой и конкретный механизм, вы можете найти информацию о DLL Triggers.

11

Если каждый пользователь имеет свой собственный SQL Server входа в систему, вы можете попробовать это

select 
    so.name, su.name, so.crdate 
from 
    sysobjects so 
join 
    sysusers su on so.uid = su.uid 
order by 
    so.crdate 
+0

Но он кажется so.uid действительно SchemaId для не импортированных dbs: http://msdn.microsoft.com/en-us/library/ms177596.aspx – crokusek

0

Пытались ли вы этот запрос:

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>') 
30

Если объект был недавно создан, вы можете проверить изменения схемы Отчет о истории в SQL Server Management Studio, который «предоставляет историю всех совершенных заявлений о выполнении DDL в базе данных, записанных по умолчанию»:

enter image description here

Затем вы можете выполнять поиск операторов создания объектов. Среди всей отображаемой информации есть имя пользователя, для которого выполняется оператор DDL.

Смежные вопросы