Как я могу отследить, какой пользователь в последний раз изменил сохраненный процесс в SQL Server 2005+? - PullRequest
0 голосов
/ 13 ноября 2009

Вдохновленный этим вопросом Как быстро определить самые последние измененные хранимые процедуры в SQL Server Мне интересно, можем ли мы одновременно идентифицировать пользователя? Как это сделать с помощью программы sql (если это возможно)? Я очень хочу знать.

Заранее спасибо

Ответы [ 6 ]

1 голос
/ 13 ноября 2009

Два варианта:

Попробуйте запустить отчет SQL Server Management Studio «История изменений схемы»
Щелкните правой кнопкой мыши «База данных»
Выберите «Стандартные отчеты»
Выберите «История изменений схемы»

Если это не работает, и вы действительно отчаялись:
Попробуйте ":: fn_dblog".
Пример:

SELECT * FROM ::fn_dblog(NULL, NULL)  

Это позволит вам напрямую просматривать журнал транзакций.

1 голос
/ 13 ноября 2009

Если вы говорите о том, «что используется в prod DB», а не о «управлении исходным кодом», тогда нет .

Вам потребуется SQL Server 2005 и более поздние версии и триггеры DDL .

0 голосов
/ 19 ноября 2009

Вы можете использовать SQL Server Profiler для отслеживания действий DDL. В разделе «Выбор событий» проверьте следующие события:

Объекты / Объект: Изменено

Объекты / Объект: Создано

Объекты / Объект: Удалено

Существует также множество параметров настройки: вы можете сохранить выходные данные в файл или таблицу, отфильтровать выходные данные на основе любых столбцов и т. Д.

0 голосов
/ 13 ноября 2009

У нас есть все наши Sprocs в отдельных файлах (с контролем версий и т. Д.), А не просто щелчок правой кнопкой мыши и редактирование прямо в базе данных!

У нас это есть в начале каждого скрипта SProc

EXEC dbo.MyLogScriptRun 'MySProcName', '091113'

это создает запись в таблице регистрации сценариев, что MySproc был создан, и его версия - 091113. Мы также записываем в систему текущего зарегистрированного пользователя, а также имя базы данных и сервера (что помогает при восстановлении базы данных на другом сервере, и нам интересно Каким образом MySproc стал ЭТОЙ версией на ЭТОМ сервере!)

Мы также используем это, чтобы проверить, какая версия установлена ​​на конкретной клиентской БД, например при диагностике проблемы и в качестве основы для определения, какую исходную версию использовать (из управления версиями) для развертывания исправления; также для отправки обновления (чтобы мы могли определить, какие SProcs являются более новыми и должны быть включены в «пакет выпуска»)

Большую часть этого вы можете сделать с помощью триггеров DDL (начиная с SQL2005), но я не уверен, что смогу также сохранить номер версии.

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

Запись в журнале написана так, что выполняется

EXEC dbo.MyLogScriptRun 'MySProcName'

предоставляет список из журнала. (т.е. я могу выделить первую часть строки, исключая номер версии, чтобы получить список, или выполнить всю строку, чтобы создать запись в журнале).

0 голосов
/ 13 ноября 2009

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

0 голосов
/ 13 ноября 2009

Я не верю, что это возможно после свершившегося факта. Это очень похоже на вопрос Microsoft SQL Server - Кто создал хранимую процедуру?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...