|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Вот совсем уж необъяснимые для меня вещи происходят... Создаю базу из скрипта и в IBExpert сразу сравниваю её же с исходным скриптом. Типа скрипт на базу только что созданную хочу накатить. Сравниваю с включённой галкой в опциях компарера Characters sets and collations. И получаю по этим только что созданным из этого же скрипта свеженьким объектам 500+ расхождений по всем строковым делам. source (скрипт): Код: plsql 1. 2.
target (только что созданная из этого скрипта база): Код: plsql 1. 2.
Не было бы выделенного комментария, пририсованного при извлечении компарером метаданных из базы, чую, не было бы и расхождений. Собственно, и IBEScript.dll (2019.1.29.1) генерирует ложные ALTER по этому же, видимо, поводу (и я продолжаю сидеть на IBEScript от 2013 года, ибо он мне по этой причине более симпатичен и генерирует компактные скрипты без ложных срабатываний). Вот типа такого по приведенному же примеру. Код: plsql 1. 2.
Хотя, шило на мыло ведь явно. -- "И это пройдет" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2019, 15:57 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Я уже много раз говорил, что для практических целей надо всегда сравнивать базу с базой, а не базу со скриптом. База - это 100% информации о ней, а скрипт - только часть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 05:25 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Зачем тогда вообще тогда надо продолжать поддерживать возможность сравнения базы данных со скриптом, если на выходе получается заведомо избыточный результат сравнения, который порой приводит к простою в работе систем в десятки раз большему, нежели было раньше?! У меня получилась ооочень неприятная ситуация, когда я клиента остановил в рабочее время не на пять минут как планировал, а на более получаса по той причине, что компареру (IBExpert от 17.03.2019) в результате сравнения скрипта с базой "показалось", что надо дропнуть 30 индексов и потом создать их заново! Я такой подлянки не ожидал, чесслово. Ладно б всякое PSQL'ное - дропнулось и заново создалось. Но индексы - это долго!!! Скрин с фрагментом экрана во вложении. Описание индексов в скрипте-источнике и в базе совпадет до символа. И я теперь скорее либо зарекусь использовать новый компарер в режиме "не глядя" вообще, либо буду использовать IBExpert 2012 года для такого рода сравнений. Как минимум буду рекомендовать местным админам вернуть его обратно (а я молча обновляю IBExpert по мере возможности, если лично попадаю на клиентские серверы). Но тут дело ещё осложняется и тем, что разработка уже плавно перетекает на FB 4.0. Со старым инструментом бы не хотелось работать, а столь нужная И УДОБНАЯ, И БЫСТРАЯ фича в текущей версии IBExpert поломана напрочь. Я ж о своём насущном всё... Под три сотни серверов и треть как минимум из них на ADSL в глухих районах. Текстовые скрипты перегонять туда - самое милое дело, а не бэкапы и тем более базы. До кардинальной переделки компарера несколько лет назад ну всё ведь было просто замечательно. Ситуации-то такого вот рода на практике возникают: клиенту надо срочно поправить что-то в бизнес-логике и надо накатить на него текущие метаданные с базы разработки. И по закону подлости это будет кто-нибудь на USB-свистке мобильного оператора, в яме, с пингом 800 мс и скоростью передачи 150кбит/с. Много больше 10 лет я делал это (и продолжаю делать, пока с этим справляется IBEScript не моложе 2013 года) перегонкой на удаленный сервер скрипта с текущими метаданными, генерацией на удалённом сервере клиента разностного скрипта именно сравнением своих метаданных (как источника) с базой клиента (как с целью) и выполнением этого разностного скрипта для модификации базы клиента. Нет, я могу, конечно, всю свою автоматику переделать на сравнение с эталонной базой, заморочиться с выкачиванием из своего репозитория архива с БАЗОЙ, а не скрипта с текстом, разворачиванием базы из архива, последующим сравнением эталонной базы, а не эталонного скрипта с клиентской базой... Но мне непонятна ценность комментирования "автоматически" извлекаемых метаданных, когда они извлекаются компарером именно в ходе операции сравнения скрипта с базой. Я ж не собираюсь глазками читать там эти комментарии о дефолтном чарсете на символьных полях. Хорошо, пускай они автоматически комментируются, бог с ними - с этими комментариями по чарсетам. Но тогда можно было б и таким же образом их комментировать и при обычном извлечении метаданных из базы в скрипт (а я именно так готовлю эталонные скрипты для деплоя). Выходит, что извлечение метаданных в скрипт само по себе и извлечение метаданных из базы в компарере перед сравнением скрипта с базой работает по-разному?! Или всё же что-то в компарере не так, если он выдаёт ложные срабатывания, приводящие даже к DROP-CREATE одинаково описанных индексов в скрипте и в базе (а база только что была создана из этого скрипта, напоминаю)? Цель использования компарера (через IBExpert ли, через выполнение ли блока через IBEScript - не важно) лично для меня - получить разностный скрипт. И он нормальный получался до затеянных глобальных переделок компарера. И с годами ситуация сравнения скрипта с базой становится всё хуже и хуже. О чём я и информирую. Я периодически пытаюсь использовать новый компарер для своих привычных целей, но каждый раз получаю эпически провальный результат. И чем дальше, тем более страшный. Понимаю и то, что проблемы индейцев шерифа не волнуют, что по какому-нибудь хорошо если ADSL 512 килобитному каналу при таком, как я описал, срочном апгрейде придётся перегонять не два мегабайта текста, а 30+ мегабайт (пускай и пустой ) базы. И это реально сожрёт рабочее время и моё, и аборигенов-сисадминов. Польза от данной фичи (сравнение скрипта с базой) начинает стремиться к нулю, особенно учитывая такие заявления, что "я уже много раз говорил, что для практических целей надо всегда сравнивать базу с базой". Следует ли из этого заявления, что на данный функционал мне нет нужды закладываться вовсе и правиться ничего по этой части не будет? Имеется ли какая-то теоретическая польза от сравнения скрипта и базы, когда практически результат сравнения в виде разностного скрипта содержит сотни ложных срабатываний по модификации чего-то неизменного, мне не ведомо. Придётся тогда, видимо, до упора держаться IBEScript (2013) со старой реализацией компарера, который не даёт ложных срабатываний в разностном скрипте и в свободное время переписывать логику дистрибуции изменений с использования сравнения эталонного скрипта на использование для сравнения эталонной базы. Тем не менее описанный пример скрипта и пустую базу, из него созданную, готов для тестов предоставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 10:22 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
o_v_aНо мне непонятна ценность комментирования "автоматически" извлекаемых метаданных, когда они извлекаются компарером именно в ходе операции сравнения скрипта с базой. Я ж не собираюсь глазками читать там эти комментарии о дефолтном чарсете на символьных полях. Хорошо, пускай они автоматически комментируются, бог с ними - с этими комментариями по чарсетам. Но тогда можно было б и таким же образом их комментировать и при обычном извлечении метаданных из базы в скрипт (а я именно так готовлю эталонные скрипты для деплоя). Выходит, что извлечение метаданных в скрипт само по себе и извлечение метаданных из базы в компарере перед сравнением скрипта с базой работает по-разному?! Или всё же что-то в компарере не так, если он выдаёт ложные срабатывания, приводящие даже к DROP-CREATE одинаково описанных индексов в скрипте и в базе (а база только что была создана из этого скрипта, напоминаю)? Причем тут комментарии? Комментарии в данном случае игнорируются и ни на что не влияют. А вот то, что в CREATE DOMAIN D$GRAGD AS VARCHAR(10) нет ни чарсета, ни коллейта - это принципиально. Если изменился тип или коллейт - индексы по полям на этом домене подлежат пересозданию. Так понятно? С коллейтами есть и другая сложность: в БД дефолтовые коллейты для чарсета лежат в соответствующей системной таблице, а вот в скрипте их тупо нет. Так понятно? В чем сложность со сравнением БД с образцовой БД, а не со скриптом? Не вижу я тут сложностей, ты их сам придумал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 10:45 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Сложности - они в трудозатратах на переделку того, что раньше нормально работало, но перестаёт нормально работать по причине изменения алгоритма работы компарера. Ну и во времени на передачу возросшего объёма данных на медленных каналах. А с индексами-то что не так? Почему компарер возбудился на индексы по текстовым полям? Только по той причине, что он посчитал что поля требуют изменения, он принял и решение индексы, их использующие, пересоздать? Но по факту-то они незатронуты. Я не трогал дефолтного чарсета на базе, о нём тем более ничего и не знает скрипт. С чего б компареру за меня принимать какие-то решения по части дефолтного чарсета? Если нет в скрипте дефолтного коллейта и чарсета, то зачем притягивать их за уши при извлечении метаданных из базы при сравнении? Может, опцию прикрутить получится для обхода? Ведь компарер практически-то используется не на произвольном множестве баз, а как правило в рамках каких-то смежных релизов ПО. Быстренько отличия посмотреть. Тут ключевое слово - "быстренько". А заставляя из метаданных слепить базу и сравнивать уже базу с базой - это уже не быстренько. Может выйдет как-то дать возможность разработчику "наплевательски" отнестись к чарсетам при сравнении скрипта с базой? Да, есть и сейчас галка, отвечающая за анализ чарсетов и коллейтов. Буду её отключать и это спасает. Но что делать, если на каком-то поле, или домене, или параметре хранимки и/или функции действительно изменили (как правило добавили, если его не было) чарсет? Тогда это изменение останется незамеченным (не проверял)? Полагаться впредь только на сравнение базы с базой - это я понял. Как-то ожидается, что при сравнениии эталонного скрипта с базой клиента "как всегда и было" получится разностный скрипт на пару процедурок и пяток триггеров. А в результате с включенной галкой "Character sets and collations" в опциях компарера теперь и всё текстовое идёт под замену, и индексы, в которых есть текстовые поля, в придачу. Грабли расставлены, я учту, что мне теперь придётся на работы, которые занимали ранее 10-15 минут, в случае работы с актуальной версией IBExpert затрачивать вдвое больше. Но инструмент вроде как должен упрощать жизнь, а вышло, что он усложняет. Да, сейчас можно начать придираться, что это "мои проблемы". Но компарером для техподдержки удалённых систем раньше было ОЧЕНЬ УДОБНО пользоваться, а теперь стало СОВСЕМ НЕУДОБНО . Как-то очень большая разница в ощущениях при практическом применении. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 11:56 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Вот к чему это всё приведёт в конце концов (и, думается, я не одинок). Было: - слить метаданные в скрипт (или вынуть нужные метаданные из CVS-репозитория - мы версируем метаданные для истории изменений, но, впрочем, базы тоже есть) - передать на клиента этот эталонный скрипт с метаданными - сгенерировать разностный скрипт сравнением эталонных метаданных с базой клиента - накатить разностный скрипт на базу клиента - прочее Станет: - слить метаданные с эталонной базы в скрипт (или вынуть эти метаданные из CVS) или как вариант: выполнить бэкап только метаданных, если эталонная база есть физически - создать из скрипта пустую эталонную базу (или из бэкапа с только метаданными выкатить её) - передать на клиента эталонную базу ( плюс архивация-разархивация ) - сгенерировать разностный скрипт сравнением эталонной базы с базой клиента - накатить разностный скрипт Вот они, дополнительные действия. Выделены. На них придётся и затрачивать дополнительное время при ручных операциях, и менять алгоритмы своих программ автоматического распространения обновлений. Стало проще? Нет не стало. Стало сложнее. Стоило ли менять так кардинально алгоритмы, в результате чего привычные действия по работе с компарером серьёзно усложняются? Разработчикам виднее. Наверное, это оправдано. Понятно, что и поменять привычки и запрограммировать можно всё что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 12:22 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
o_v_aВот они, дополнительные действия. Выделены. Именно это я и называю надуманными проблемами. Бэкап с ключом metadata only и последующий рестор делается и автоматизируется не сложнее генерации скрипта. Архивировать-разархивировать - если ты не делаешь этого со скриптом, то нет никаких причин делать это и с файлом БД. Но самое главное ты таки предпочел проигнорировать. Со скриптами мы имеем двойное преобразование: сначала БД в скрипт, затем из скрипта компарер там себе унутре строит представление БД, кое-что додумывая. При каждом преобразовании возможны, скажем так, нюансы. На один из таких нюансов - для домена в скрипте явно не указаны чарсет с коллейтом - ты и напоролся. Можешь ждать, когда у меня дойдут руки до рихтования таких нюансов - приоритет ниже плинтуса. А можешь таки внять голосу разума и не использовать скрипт как образец в продакшене. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 14:40 |
|
Comparer - сравнение базы со скриптом сразу после создания
|
|||
---|---|---|---|
#18+
Лично меня (пока) устраивает компарер 2013 года. Пока не прижмёт, не буду ничего переписывать под новый. Ибо таскать базы целиком вместо скрипта - трата времени при дохлом канале. А прикручивать архивацию/разархивацию вообще нет выхлопа, ибо это ради сервисных операций раз в год ... Да, у нас далеко не все все релизы без пропусков ставят. Но раз в пару лет уж точно обновляются, законодательство подстёгивает. Или ишак сдохнет, или падишах. Время покажет. Ниже плинтуса так ниже плинтуса. Подождём. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 10:15 |
|
|
start [/forum/topic.php?fid=42&msg=39788920&tid=1598745]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 278ms |
0 / 0 |