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

Недавно мы столкнулись с какой-то странной проблемой в нашей промежуточной и производственной среде. Мы запустили сценарий обновления хранимой процедуры на 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

Один тип Db для другого – SQL

как отображать записи базы данных, даже если ячейка равна нулю

Получить первую букву каждого слова в строке SQL

Проблемы с синтаксисом SQL

SQL Server 2012, geography.STContains, неправильный результат?

как обновить таблицу с помощью внешнего ключа

Как добавить ограничение NOT NULL на несколько столбцов в одной инструкции

Как конкатенировать несколько предложений create table, чтобы скрипт выполнял все с помощью одной команды execute?

Инструменты данных SQL Server в visual studio 2015

Развертывание службы WCF

SQLServer Выберите, что объединяет и возвращает результаты, в которых несколько записей объединения соответствуют значениям

Отображение столбцов в виде строк в сложной инструкции Select – sql

Изменить значение столбца в группе

SELECT с вычисленным столбцом, зависящим от корреляции

Попытка подключиться к базе данных не удалась, потому что это версия 782

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