Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Comparer - сравнение базы со скриптом сразу после создания / 8 сообщений из 8, страница 1 из 1
19.03.2019, 15:57
    #39788526
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Вот совсем уж необъяснимые для меня вещи происходят...

Создаю базу из скрипта и в IBExpert сразу сравниваю её же с исходным скриптом. Типа скрипт на базу только что созданную хочу накатить.
Сравниваю с включённой галкой в опциях компарера Characters sets and collations.

И получаю по этим только что созданным из этого же скрипта свеженьким объектам 500+ расхождений по всем строковым делам.

source (скрипт):
Код: plsql
1.
2.
CREATE DOMAIN D$GRAGD
AS VARCHAR(10);



target (только что созданная из этого скрипта база):
Код: plsql
1.
2.
CREATE DOMAIN D$GRAGD
AS VARCHAR(10) /* COLLATE WIN1251 - default */;


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

Собственно, и IBEScript.dll (2019.1.29.1) генерирует ложные ALTER по этому же, видимо, поводу (и я продолжаю сидеть на IBEScript от 2013 года, ибо он мне по этой причине более симпатичен и генерирует компактные скрипты без ложных срабатываний).
Вот типа такого по приведенному же примеру.
Код: plsql
1.
2.
ALTER DOMAIN D$GRAGD
  TYPE VARCHAR(10);


Хотя, шило на мыло ведь явно.


--
"И это пройдет"
...
Рейтинг: 0 / 0
20.03.2019, 05:25
    #39788741
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Я уже много раз говорил, что для практических целей надо всегда сравнивать базу с базой, а не базу со скриптом.
База - это 100% информации о ней, а скрипт - только часть.
...
Рейтинг: 0 / 0
20.03.2019, 10:22
    #39788845
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Зачем тогда вообще тогда надо продолжать поддерживать возможность сравнения базы данных со скриптом, если на выходе получается заведомо избыточный результат сравнения, который порой приводит к простою в работе систем в десятки раз большему, нежели было раньше?!

У меня получилась ооочень неприятная ситуация, когда я клиента остановил в рабочее время не на пять минут как планировал, а на более получаса по той причине, что компареру (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) со старой реализацией компарера, который не даёт ложных срабатываний в разностном скрипте и в свободное время переписывать логику дистрибуции изменений с использования сравнения эталонного скрипта на использование для сравнения эталонной базы.

Тем не менее описанный пример скрипта и пустую базу, из него созданную, готов для тестов предоставить.
...
Рейтинг: 0 / 0
20.03.2019, 10:45
    #39788861
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
o_v_aНо мне непонятна ценность комментирования "автоматически" извлекаемых метаданных, когда они извлекаются компарером именно в ходе операции сравнения скрипта с базой. Я ж не собираюсь глазками читать там эти комментарии о дефолтном чарсете на символьных полях.
Хорошо, пускай они автоматически комментируются, бог с ними - с этими комментариями по чарсетам.
Но тогда можно было б и таким же образом их комментировать и при обычном извлечении метаданных из базы в скрипт (а я именно так готовлю эталонные скрипты для деплоя).
Выходит, что извлечение метаданных в скрипт само по себе и извлечение метаданных из базы в компарере перед сравнением скрипта с базой работает по-разному?!
Или всё же что-то в компарере не так, если он выдаёт ложные срабатывания, приводящие даже к DROP-CREATE одинаково описанных индексов в скрипте и в базе (а база только что была создана из этого скрипта, напоминаю)?


Причем тут комментарии? Комментарии в данном случае игнорируются и ни на что не влияют. А вот то, что в
CREATE DOMAIN D$GRAGD AS VARCHAR(10) нет ни чарсета, ни коллейта - это принципиально. Если изменился тип или коллейт - индексы по полям на этом домене подлежат пересозданию. Так понятно?

С коллейтами есть и другая сложность: в БД дефолтовые коллейты для чарсета лежат в соответствующей системной таблице, а вот в скрипте их тупо нет. Так понятно?

В чем сложность со сравнением БД с образцовой БД, а не со скриптом? Не вижу я тут сложностей, ты их сам придумал.
...
Рейтинг: 0 / 0
20.03.2019, 11:56
    #39788920
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Сложности - они в трудозатратах на переделку того, что раньше нормально работало, но перестаёт нормально работать по причине изменения алгоритма работы компарера. Ну и во времени на передачу возросшего объёма данных на медленных каналах.

А с индексами-то что не так? Почему компарер возбудился на индексы по текстовым полям?
Только по той причине, что он посчитал что поля требуют изменения, он принял и решение индексы, их использующие, пересоздать? Но по факту-то они незатронуты. Я не трогал дефолтного чарсета на базе, о нём тем более ничего и не знает скрипт. С чего б компареру за меня принимать какие-то решения по части дефолтного чарсета?

Если нет в скрипте дефолтного коллейта и чарсета, то зачем притягивать их за уши при извлечении метаданных из базы при сравнении? Может, опцию прикрутить получится для обхода? Ведь компарер практически-то используется не на произвольном множестве баз, а как правило в рамках каких-то смежных релизов ПО. Быстренько отличия посмотреть.
Тут ключевое слово - "быстренько". А заставляя из метаданных слепить базу и сравнивать уже базу с базой - это уже не быстренько.

Может выйдет как-то дать возможность разработчику "наплевательски" отнестись к чарсетам при сравнении скрипта с базой?
Да, есть и сейчас галка, отвечающая за анализ чарсетов и коллейтов. Буду её отключать и это спасает.
Но что делать, если на каком-то поле, или домене, или параметре хранимки и/или функции действительно изменили (как правило добавили, если его не было) чарсет? Тогда это изменение останется незамеченным (не проверял)?
Полагаться впредь только на сравнение базы с базой - это я понял.

Как-то ожидается, что при сравнениии эталонного скрипта с базой клиента "как всегда и было" получится разностный скрипт на пару процедурок и пяток триггеров. А в результате с включенной галкой "Character sets and collations" в опциях компарера теперь и всё текстовое идёт под замену, и индексы, в которых есть текстовые поля, в придачу.

Грабли расставлены, я учту, что мне теперь придётся на работы, которые занимали ранее 10-15 минут, в случае работы с актуальной версией IBExpert затрачивать вдвое больше. Но инструмент вроде как должен упрощать жизнь, а вышло, что он усложняет.
Да, сейчас можно начать придираться, что это "мои проблемы". Но компарером для техподдержки удалённых систем раньше было ОЧЕНЬ УДОБНО пользоваться, а теперь стало СОВСЕМ НЕУДОБНО . Как-то очень большая разница в ощущениях при практическом применении.
...
Рейтинг: 0 / 0
20.03.2019, 12:22
    #39788945
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Вот к чему это всё приведёт в конце концов (и, думается, я не одинок).

Было:
- слить метаданные в скрипт (или вынуть нужные метаданные из CVS-репозитория - мы версируем метаданные для истории изменений, но, впрочем, базы тоже есть)
- передать на клиента этот эталонный скрипт с метаданными
- сгенерировать разностный скрипт сравнением эталонных метаданных с базой клиента
- накатить разностный скрипт на базу клиента
- прочее

Станет:
- слить метаданные с эталонной базы в скрипт (или вынуть эти метаданные из CVS)
или как вариант: выполнить бэкап только метаданных, если эталонная база есть физически
- создать из скрипта пустую эталонную базу (или из бэкапа с только метаданными выкатить её)
- передать на клиента эталонную базу ( плюс архивация-разархивация )
- сгенерировать разностный скрипт сравнением эталонной базы с базой клиента
- накатить разностный скрипт

Вот они, дополнительные действия. Выделены.
На них придётся и затрачивать дополнительное время при ручных операциях, и менять алгоритмы своих программ автоматического распространения обновлений.

Стало проще? Нет не стало. Стало сложнее.
Стоило ли менять так кардинально алгоритмы, в результате чего привычные действия по работе с компарером серьёзно усложняются? Разработчикам виднее. Наверное, это оправдано.
Понятно, что и поменять привычки и запрограммировать можно всё что угодно.
...
Рейтинг: 0 / 0
20.03.2019, 14:40
    #39789073
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
o_v_aВот они, дополнительные действия. Выделены.


Именно это я и называю надуманными проблемами. Бэкап с ключом metadata only и последующий рестор делается и автоматизируется не сложнее генерации скрипта. Архивировать-разархивировать - если ты не делаешь этого со скриптом, то нет никаких причин делать это и с файлом БД.

Но самое главное ты таки предпочел проигнорировать. Со скриптами мы имеем двойное преобразование: сначала БД в скрипт, затем из скрипта компарер там себе унутре строит представление БД, кое-что додумывая. При каждом преобразовании возможны, скажем так, нюансы. На один из таких нюансов - для домена в скрипте явно не указаны чарсет с коллейтом - ты и напоролся.
Можешь ждать, когда у меня дойдут руки до рихтования таких нюансов - приоритет ниже плинтуса. А можешь таки внять голосу разума и не использовать скрипт как образец в продакшене.
...
Рейтинг: 0 / 0
25.03.2019, 10:15
    #39790795
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Comparer - сравнение базы со скриптом сразу после создания
Лично меня (пока) устраивает компарер 2013 года.
Пока не прижмёт, не буду ничего переписывать под новый.
Ибо таскать базы целиком вместо скрипта - трата времени при дохлом канале. А прикручивать архивацию/разархивацию вообще нет выхлопа, ибо это ради сервисных операций раз в год ... Да, у нас далеко не все все релизы без пропусков ставят. Но раз в пару лет уж точно обновляются, законодательство подстёгивает.
Или ишак сдохнет, или падишах. Время покажет.
Ниже плинтуса так ниже плинтуса. Подождём.
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Comparer - сравнение базы со скриптом сразу после создания / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]