|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Всем привет! Хочется добавить в процесс CD проверку базы на синтаксические ошибки, желательно не очень дорого, но никак не могу напась на след. SQL Toolbelt дорого, нашел SQL Code Guard, он не поддерживается да и работает ли из команднойл строки непонятно. Думал прикрутить к SSDT, но никак не соображу, как автоматизировать. Спасибо за совет! С уважением, Князев Константин ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 15:19 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius проверку базы на синтаксические ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 15:47 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
invm, проверка хранимых процедур на компилируемость, корректность имен таблиц, колонок. нарыл Checking MS SQL Server Stored Procedures , только многие процедуры долго выполняются, поэтому не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 15:59 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius, Find invalid objects ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 16:17 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius, импортируйте базe в проект Data Tools Visual Studio, сразу всё увидите. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 16:44 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, это интересно, изучаю, спасибо Владислав Колосов, процесс разработки отлажен, менять не целесообразно, настроены билд и деплой через TeamCity, поэтому база первична. Т.е. для проверки надо по базе генерить проект SSDT и в нем пускать Build, но я не нашел пока способа, как генерить проект по базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 17:29 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius нарыл Checking MS SQL Server Stored Procedures , только многие процедуры долго выполняются, поэтому не подходит. Но так проверить можно только процедуры и скалярные функции. Имхо, самый простой способ: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 18:06 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
invm, спасибо! пробовал noexec, а про fmtonly забыл... а в чем смысл выполнения на лупбек сервере, в чем отличие от локального? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 18:19 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Обманул. Можно еще проще Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 18:25 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius а в чем смысл выполнения на лупбек сервере, в чем отличие от локального? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 18:28 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Исправление для обоих вариантов: Код: sql 1. 2.
Проблемы: - для линкеда не будут валидироваться DDL-триггеры - для sp_refershsqlmodule не будут валидироваться функции из вычисляемых столбцов таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 18:41 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
invm, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 19:49 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius Sergey Syrovatchenko, это интересно, изучаю, спасибо Владислав Колосов, процесс разработки отлажен, менять не целесообразно, настроены билд и деплой через TeamCity, поэтому база первична. Т.е. для проверки надо по базе генерить проект SSDT и в нем пускать Build, но я не нашел пока способа, как генерить проект по базе. Не совсем понял, причем тут Team City. Пусть деплоит себе как деплоил, он никак не мешает. Вы разработку в текстовом редакторе ведете? Эта методика давно устарела, переходите на студию. Студия проверит все ссылки и невалидные определения. А как вы развертывание тестируете, тоже TC гоняете? Это не эффективно - слишком медленно получаете обратную связь. Ну, да дело хозяйское - деньги платят и ладно. Советую найти книгу Рефакторинг баз данных: эволюционное проектирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 02:05 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Владислав Колосов А как вы развертывание тестируете, тоже TC гоняете? Это не эффективно - слишком медленно получаете обратную связь. Понятно, каждый разработчик проверяет у себя свой код, но можно и итоговую проверку добавить. Конечно, это медленно, но всё равно же в общем процессе, т.е. накатывание новой версии на тестовый сервер всё равно идёт не в реалтайме по мере программирования, а делается по некоему расписанию, как часть (фаза) общего процесса разработка-билд-тестирование-деплой-эксплуатация. Обсуждаемая проверка есть часть фазы "билд". Zelius Хочется добавить в процесс CD проверку базы на синтаксические ошибки, желательно не очень дорого ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 09:39 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
А приведённые выше механизмы отлавливают ошибки вида Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 09:45 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Владислав Колосов, Я уже конвертировал проект в SSDT, он получается очень большой ( под 7000 объектов, легаси монолит), много связей между базами, серверами, логины, джобы, выборки xml, и завести его без проблем у меня не получилось, сейчас вроде подлатали SSDT (последний раз разбирался года 3 назад). Так же не понял, как делать предплой и пост деплой, он упорно один файл предлагал, а нужно на каждый релиз, и что бы старые невыполнялись, но поразбираюсь еще... Еще проблема, что некоторые разработчики его в глаза не видели. alexeyvg, да, каждый разработчик проверяет свой код, но все таки периодически проскакивает ошибка в имени таблицы и колонки и всплывает только на этапе эксплуатации (( вот хотя бы от этого хотел защититься ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 09:50 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
env А приведённые выше механизмы отлавливают ошибки вида... Потому что это ошибка выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 10:24 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius да, каждый разработчик проверяет свой код, но все таки периодически проскакивает ошибка в имени таблицы и колонки и всплывает только на этапе эксплуатации (( вот хотя бы от этого хотел защититься Никакой проверкой в любом случае вы не выловите даже все простые, условно "синтаксические", ошибки, не говоря уже о более многочисленных остальных. Соответственно, в процессе, кроме разработчиков, волшебной "проверки", и прода, должен быть этап "деплой на тестовый сервер" и прогон теста. Даже самый примитивный, на первое время, тест, выявит много проблем до этапа эксплуатации. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 10:30 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
alexeyvg, деплой на тестовый сервер делается, простые ошибки выявляет. тесты это хорошо, но ресурсы на 7000 тестов никто не выделит да и самому делать это застрелишься (недавно сделал пару тестов на tSQLt, долго и нудно) :( есть Red-Gate с SQL Change Automation, но он входит в состав пакета за 3500 не рублей, и падает с переполнением стека на нашей базе. Сейчас думаю, как прикрутить SSDT... Пока есть мысль сделать шаблонный проект, потом новым скриптером скриптовать базу, вставлять своими руками ссылки на скрипты в проект, запускать msbuild и ловить ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 10:40 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius, Если вы не используете SSDT, то в чем же вы разработку БД ведете? Просто интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:36 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Ennor Tiegael, в файлах, SSMS ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:00 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius, Жесть. Окей, попробую вкратце описать возможный воркфлоу. Сразу скажу, что это не единственный возможный подход, но в моих обстоятельствах я так делал, и все работало. Если у вас система на продажу, с кучей клиентов, то задача усложняется, хотя невозможной это ее не делает - я лично знаю как минимум одну компанию, которая ведет свою БД в SSDT и которая продает свою систему и предоставляет возможность кастомизации под нужды отдельных клиентов (Fenergo). Как именно они это делают, и сколько ручного труда у них на это тратится - без понятия, но учитывая, что многие вещи можно сделать через командную строку с msbuild, возможно они многое автоматизировали. А, да - насчет лицензий. Если у вас в компании есть лицензии VS, то все просто - ставите VS 2019 (ну или последнюю, какая будет в будущем) соотв. редакции и вперед. Если нет, то ставите Community Edition и при установке выбираете единственный workload - Data Processing или как-то там. В этом случае лицензия не нужна . На каждую из имеющихся у вас БД создаете отдельный проект базы в SSDT. После создания проекта и выставления его настроек (коллейшн и прочее) в панели Solution Explorer правой кнопкой на проекте -> Import Schema . Затягиваете из имеющейся БД всю схему в проект, потом смотрите есть ли ошибки. Сначала билдите проект, потом пытаетесь задеплоить его в пустую БД. Последнее, на самом деле, довольно надежный тест, ловит очень многое (но конечно не всё). Зависимости между базами в SSDT реализуются через механизм Database Reference . Сразу скажу, что чистить свеже-импортированный код, чтобы заменить все 3- и 4-частные имена на соответствующие SQLCMD-переменные, это как чистить ведро ершей - работка та еще, и запросто может занять несколько дней на большой и сложноподчиненной базе. По счастью, в основной своей части это просто тупая рутина в виде кучи Ctrl-Shift-F / Ctrl-Shift-H. Кроме того, конкретно эту задачу обычно приходится выполнять только один раз, в процессе перевода разработки на SSDT. Постепенно народ привыкает, что все изменения должны исходить из проекта, а не из базы, несогласных увольняют, и ситуация стабилизируется. Единственная серьезная проблема, с которой можно столкнуться на этой стадии - это циклические зависимости между БД. Тут скорее всего вам придется заняться редизайном, потому что подобная ситуация неправильна в принципе, и будет создавать проблемы при любом способе деплоймента, какой бы вы ни выбрали. В идеале, граф зависимостей между вашими БД должен быть направленным и ациклическим (а еще лучше - деревом). Собственно написание кода в SSDT не отличается от любого другого редактора. Разве что обращение к объектам других БД приходится делать через SQLCMD-переменные, типа: Код: sql 1. 2. 3. 4. 5. 6. 7.
Деплой изменений из проекта в базу можно делать несколькими способами:
Также имеется Data Compare , которую можно использовать для быстрого деплоя эталонных данных на тестовую БД. Про полную интеграцию с Git, полагаю, можно даже не упоминать. В принципе, вроде бы все. Из моего личного опыта могу сказать, что на данный момент я внедрял SSDT в трех компаниях (причем я там был контрактором, а не перманентным эмплоем, и делал это по собственной инициативе), и во всех случаях внедрение было успешным. Естественно, поначалу люди сопротивляются, но когда они видят преимущества, которые дает данный тул, и им удается перестроить свой способ мышления, то в конечном итоге некоторые даже говорят "спасибо". P.S. Если вы посмотрите внимательно, то заметите, что большая часть приведенных ссылок ведет на один и тот же раздел в документации. Пошерстите там, наверняка найдете много полезного. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 05:46 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Ennor Tiegael, спасибо за такой развернутый ответ! на самом деле не такая уж и жесть, все объекты версионированны и лежат TFS у нас написана тулза, которая собирает релизные скрипты, проекты в SSMS вести удобно, объединяю в проекты по задачам, но вот захотелось подстелить соломки... С SSDT я работал, на другой базе, маленькой, но вот большую перевести не получилось на тот момента (года 3 назад), слишком много было ошибок связанных с выборкой из xml, связями с другими базами, логинами и еще чем то, и не решил вопрос с пре и пост деплоями. Перекрестные ссылки как разбирать не понятно, при сильной связанности, dacpac может делать, а не живую базу... Я не понял, если есть Database Reference, то зачем использовать slqcmd параметры $(AnotherDB)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 10:04 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
вот интересная статья про организацию пре и пост деплоя, осталось только придумать что бы сохранять их в TFS и они вызывались только на своих релизах... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 10:23 |
|
Анализ базы на синтаксические ошибки из командной строки
|
|||
---|---|---|---|
#18+
Zelius у нас написана тулза, которая собирает релизные скрипты, проекты в SSMS вести удобно, объединяю в проекты по задачам, но вот захотелось подстелить соломки... Такая ситуация: допустим вы добавили новое поле в таблицу. Как ваша тулза будет генерить change script - через drop / create, что ли? Или вы храните не единственный create table, а всю цепочку альтеров в скрипте создания таблицы? Представляю, как будет выглядеть такой скрипт после добавления пары десятков столбцов. В SSDT такой проблемы нет, она все это понимает и умеет. В проекте хранятся именно что скрипты создания объектов, а как именно будет выглядеть change script, переводящий базу из произвольного состояния в состояния проекта, генерится на ходу. Zelius С SSDT я работал, на другой базе, маленькой, но вот большую перевести не получилось на тот момента (года 3 назад), слишком много было ошибок связанных с выборкой из xml, связями с другими базами, логинами и еще чем то, и не решил вопрос с пре и пост деплоями. Насчет ошибок при выборке из xml - не понял. В старых версиях были моменты, когда SSDT не понимала какой-то легальный синтаксис, сталкивался с этим, но это все фиксится . Также не очень понял, что именно вы называете пре- и пост-деплоями. В SSDT это есть , но они работают только при развертывании через publish profile, а Schema Compare их игнорирует. Что вы туда собираетесь помещать такого, чтоб прям каждый раз выполнять надо было? Zelius Перекрестные ссылки как разбирать не понятно, при сильной связанности, dacpac может делать, а не живую базу... У меня был один случай, когда горе-девелоперы сделали кучу циклических ссылок между основной и дополнительной БД. Ну, историю про Гордиев узел помните? Вот как-то так. Zelius Я не понял, если есть Database Reference, то зачем использовать slqcmd параметры $(AnotherDB)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 13:13 |
|
|
start [/forum/topic.php?fid=46&msg=40030806&tid=1685252]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 19ms |
total: | 168ms |
0 / 0 |