Хранимая процедура выпадает случайно

Недавно мы столкнулись с какой-то странной проблемой в нашей промежуточной и производственной среде. Мы запустили сценарий обновления хранимой процедуры на SQL Server 2005, проверили новое изменение и начали использовать его на наших продуктах. Через некоторое время в БД отсутствует такая же хранимая процедура. Эта хранимая процедура не используется никакими другими задачами, кроме той, которую мы намереваемся использовать. Мы проверили каждый бит сценария кода и развертывания, но не можем найти трассировку для простое удаление хранимой процедуры.

Эта проблема не возникает в наших DEV и QA средах, но только для Staging and Production.

Может ли кто-нибудь помочь в этом?

С уважением,

Mafaz

Если вы исключили очевидный (например, преднамеренный саботаж), я бы предложил просмотреть sys.sql_modules для ссылки на процедуру – возможно, произошел случайный промах:

 IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc1') DROP PROCEDURE Proc1 GO CREATE PROC dbo.Proc1 AS ... << MISSING GO! IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc2') DROP PROCEDURE Proc2 GO CREATE PROC dbo.Proc2 AS ... 

т.е. в выше, код DROP PROCEDURE Proc2 добавляется в определение несвязанного Proc1 из-за отсутствия GO в конце определения Proc1 . Каждый раз, когда Proc1 запускается, он Proc2 от proc Proc2if exists будет неудобно скрывать ошибку, если Proc2 уже сброшен).

Аналогичным образом, еще одна распространенная проблема заключается в том, чтобы оставить GRANT EXEC в нижней части PROC – если разрешения слабы, это может привести к нарушению производительности процедуры.

Лучшим советом здесь является выполнение приложений с минимальными разрешениями, чтобы он не мог выполнять DDL например DROP или GRANT . Таким образом, приложение будет ломаться, когда Proc1 будет выполнен, что позволит вам быстро отслеживать код нарушения.

Interesting Posts

Курсоры против цикла while – SQLServer

Как подключить файл базы данных SQL Server (.mdf) во время создания установочного файла в Visual Studio 2010 с использованием каталога данных

Временное приостановление репликации SQL-сервера

Создайте «окончательный» фильтр в UNION SQL

Как я могу найти, какой параметр sql-сервера выбрасывает исключение в .net?

Как создать резервную копию базы данных на сервере exp с помощью Visual Studio 2015

Чтение в ResultSet из SQL Server дает разные результаты в SQL Server 2014 и Sql Server 2016

Многие таблицы в одной строке в реляционной базе данных

Создание контекстов данных моделей данных LINQ to SQL с ASP.NET MVC

Назначение значений нескольким переменным из одного оператора select MS SQL

Использование CTE в качестве блочного цикла?

Конфликт версий TFS 2013 и SQL Server 2014

Строка увеличения в зависимости от значения другого столбца

Шумные слова в Sql Server 2005 Полнотекстовый поиск

SQLBindParameter для подготовки к SQLPutData с использованием собственного клиента C ++ и SQL

Давайте будем гением компьютера.