Найти хранимую процедуру и не потерять себя

Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Читать в полной версии →

Я уже несколько лет работаю с базами данных в разных компаниях. На каждом новом месте существуют свои установленные правила и традиции по работе с СУБД (система управления базами данных). Где-то фиксируют каждое изменение, где-то важен только результат выполненной работы, и все изменения передаются из уст в уста. Могу сказать, что постоянная фиксация изменений очень помогает в работе, так как к базе могут обращаться несколько программистов.

Для себя могу выделить основные моменты, которые выручали меня неоднократно.

  1. Перед правкой (выполнение update каких-то таблиц) обязательно сделать backup базы данных. 1.1 для MS SQL: sql management studio есть встроенная задача для базы - "Создать резервную копию" 1.2 для postgresql: Есть одно замечание: при использовании первого варианта размер бэкапа огромный. 1.2.1 pg_dump -U %имя пользователя% -Fc -d %имя базы% > %path%\%name_dump%.dump - некорректно создает файл так как использует стандартный PIPE - происходит ошибка кодировки 1.2.1pg_dump -U %имя пользователя% -Fc -d %имя базы% -f - решает проблему кодировки

  2. Проверить (по возможности) с каким функционалом связаны таблицы, в которые вносятся изменения. Если это продуктовая база, то выполнение каких-либо действием строго после работы конечных пользователей или программистов, которые разрабатывают функционал, обращаясь к базе.

  3. Если необходимо найти какие-то функции или хранимые процедуры в базе, расположенной на удаленном сервере у заказчика, где установка каких-то дополнительных инструментов в менеджер не представляется возможным, воспользоваться скриптом: 3.1 для MS SQL: declare @SearchText varchar(500) SET @SearchText = 'activity'; --в кавычках указать слово, которое, возможно, может использоваться в функции exec z_FindSQL @SearchText 3.1 для postgresql: select proname,prosrc from pg_proc where prosrc like '%activity%';

  4. Для проверки скрипта можно через каждый кусок кода запускать "select 1, select 2, select 3"

  5. Бывает такое, что при заполнении какого-то поля на сайте слишком большим количеством информации может возникнуть ошибка. Как вариант причиной может стать переполнение полей MLSTRING. В этом случае стоит выполнить запрос: select ActivityId as Id, datalength(%название столбца, который отвечает за это поле на сайте%) as DoneWorkLen, ,%название столбца, возможно отражающего другую полезную информацию%.GetLangOrDefault('ru') ,* from %название таблицы% where ActivityId = 12345 -- ПОМЕНЯТЬ ДЛЯ ПРОЕКТА order by DoneWorkLen desc

.GetLangOrDefault('ru') - переводит содержимое столба на русский язык