|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
AmKaddbpatchну и в чем именно я не прав? попробуй развернуть свою ээээ.... мысль, а то все телепаты ушли в отпуск, и догадаться что ты там подразумеваешь в виде отличий "такой бред" от "не такой бред", "бред, но не такой" никак не есть возможно.Ты говоришь, что liquibase несовместим с VCS и вместо package.sql ревизий 1, 322, 2251 он предлагает иметь sql000001.sql, sql000322.sql и sql002251.sql. Я говорю тебе, что ты не прав. Какие тут еще нужны пояснения? в чем именно я не прав? как именно он предлагает хранить версии пакетов, просветишь нас тут всех, нет? с ссылкой на документацию оного, мне аж интересно стало. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:23 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
dbpatchкак именно он предлагает хранить версии пакетов, просветишь нас тут всех, нет? с ссылкой на документацию оного, мне аж интересно стало.Давай сначала определимся, какой сценарий использования версий пакетов мы обсуждаем: 1) История версий нужна для отслеживания изменений (функционал VCS, например для просмотра diff). 2) В процессе наката требуется скомпилить и запустить несколько разных версий одного пакета. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:33 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
Ну или могу сформулировать вопрос по-другому: в рассаматриваемом кейсе тебе реально нужно компилить и запускать несколько версий одного пакета, либо достаточно работать с последней версией пакета, но иметь историю его изменений в VCS? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:36 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
AmKaddbpatchкак именно он предлагает хранить версии пакетов, просветишь нас тут всех, нет? с ссылкой на документацию оного, мне аж интересно стало.Давай сначала определимся, какой сценарий использования версий пакетов мы обсуждаем: 1) История версий нужна для отслеживания изменений (функционал VCS, например для просмотра diff). 2) В процессе наката требуется скомпилить и запустить несколько разных версий одного пакета. даже не пытайся подвести меня под AlwaysRun и хранить пакет всегда в одном файле. это в принципе нарушает концепцию ChangeSet, подобное откровение откровенно не интересно, по той простой причине, что я не хочу каждый раз накатывать over 9000 пакетов. я прекрасно понимаю, что ты не осилил ни документацию и концепции liquebase, ни книгу Прамодкумара, и твои попытки сохранить лицо ничего, кроме улыбки, сейчас не вызывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:40 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
dbpatchдаже не пытайся подвести меня под AlwaysRun и хранить пакет всегда в одном файле.Ну вот, а делал вид, что не понимаешь. dbpatchчто я не хочу каждый раз накатывать over 9000 пакетовТолько сейчас все еще делаешь вид, как будто не знаешь про свойство runOnChange. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:28 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
AmKaddbpatchдаже не пытайся подвести меня под AlwaysRun и хранить пакет всегда в одном файле.Ну вот, а делал вид, что не понимаешь. Цитирую еще раз: я прекрасно понимаю, что ты не осилил ни документацию и концепции liquebase, ни книгу Прамодкумара уже в третий раз. ну ок, ты молодец, купил BMW X5 и возишь в нем картошку, и думаешь, что это круто. хвалю. на этом закончим? AmKaddbpatchчто я не хочу каждый раз накатывать over 9000 пакетовТолько сейчас все еще делаешь вид, как будто не знаешь про свойство runOnChange. в общем случае оно не совместимо с понятием миграций данных (каждая миграция может требовать свою версию пакета и их зависимостей), и опять и снова - с концепией ChangeSet. мы что, играем в infinite loop? это все уже обсуждалось на предыдущей странице. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:39 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
dbpatchliquebaseСпециально коверкаешь? dbpatchна этом закончим?Да, пожалуй хватит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:47 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
И все таки, liqubase и подобные тулы от лукавого Хотя и должен признать, что _иногда_ удобно пропускать выполненные скрипты, но только нужно иметь в виду, что Эти тулы не имеют смысла для боевой базы. Их можно применять для тестовых сред, но нужно быть готовым восстановиться из бэкапа в случае ошибок в changeset'е. И что мешает в таком случае наладить удобное восстановление базы из бэкапа и накатывать весь дистрибутив? Тем более, что установка полноценного дистрибутива, это тест максимально приближенный к установке на боевую базу. Тулы не предназначены для работы с хранимым кодом. И в случае вызовов этого кода из changeset'ов появляется куча возможностей выстрелить себе в ногу. С этими тулами вы естественно лишаетесь sqlplus со всеми его плюшками. > 1) Данный патч не имеет возможности "повторного наката". только при условии, что патч не идемпотентный но и в случае liqubase, если внутри changeset-а возникла ошибка, то его поворотно уже не накатишь пример со стартовой страницы http://www.liquibase.org/index.html Код: html 1. 2. 3.
Если во время выполнения второго statment'а возникнет ошибка, то changeset становится невалидным. А хранить каждый statment в отдельном changeset-е очень неудобно. > 3) Если после наката патча кто-то шаловливыми ручками поправит "неповторяемый" changeset, то ... Приведу более реальный пример. На этапе разработки в changeset'е выполнили "drop table a;". На этапе тестирвания поняли, что это была ошибка. И естественно меняют "неизменяемый" changeset. > 4) В liquibase я могу единожды выполнить настройку, которая будет запускать при каждом накате на dev и test-контурах unit-тесты, и игнорировать их запуск на проде тоже самое можно сделать в sqlplus > И обязать всех вместо "create or replace" писать либо "create", либо "replace" согласен, что процедуры и подобные объекты, можно делать в виде идемпотентных скриптов, но только при условии, что каждый храниться в "нормальном" файле и конфликты мерджа решаются через СКВ если же помещать идемпотентные скрипты, в changeset'ы, то можно потерять изменения пример, в котором процедура из JIRA-002 будет перетерта версией из JIRA-001 Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2017, 23:20 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
выше 20091159 привел пример с Иваном и Петром и хочу ответить какие у них есть проблемы 1) проблема с файлом patch.sql этот файл есть на обеих ветках с большой вероятностью при слиянии будут конфликты причем конфликты ненужные, не отлавливающие реальных проблем в примере Иван и Петр изменили первую строку и соответственно будет конфликт, хотя им не важно чей патч применится первым а если предположить, что на проекте сотня файлов и десяток разработчиков, то становится совсем плохо 2) могла бы быть проблема с потерей изменений например JIRA-002.sql изменил состав столбцов индекса I1 JIRA-001.sql изменил уникальность I1 после выполнения patch.sql изменения JIRA-002.sql потеряны 3) недоступна история изменений таблиц, индексов и т.п. чтобы решить проблему 1) нужно генерировать patch.sql автоматически для этого нужно знать порядок, в котором применить файлы, а этого можно добиться, указав внутри файлов зависимости от других файлов чтобы решить проблему 2) необходимо поддерживать два вида патчей первый - обычный, который переводит из версии N в версию N+1 второй - "полный", который делает установку с "нуля", т.е из 0 в N+1, и в котором есть только команды типа create, insert, grant (либо исключения должны быть обоснованы, типа "create or replace functon". Хотя если написать "create &REPLACE. functon" и устанавливать эту переменную перед деплоем, то даже это ограничение можно снять ) и нет команд drop, alter, rename, revoke, delete, update и т.п. в таком случае после слияния веток, БД сообщит об ошибке при попытке создать вторую версию I1 или же во время слияния возникнет конфликт (если правильно организовать хранение объектов в файлах) Чтобы это заработало, нужно организовать автоматический накат и сравнение баз в обоих режимах (естественно на неком вспомогательном сервере, например на CI) Чтобы решить проблему 3) достаточно каждый объект создавать одним DDL и разумно организовать разбиение по файлам. Например, создание таблицы - отдельный файл, констрейнты - отдельный файл, индексы - отдельный файл. Такое разбиение, помимо истории изменений, дает возможность повторного использования кода. Например, в релизе меняется тип секционирования таблицы. Можно сделать патч вида JIRA-001.sql: Код: sql 1. 2. 3. 4. 5. 6.
в случае же оформления через changeset'ы, пришлось бы продублировать все команды по созданию таблицы, индексов и т.п. Не говоря про то, что если кто-то на соседнем бранче добавил новую колонку, то c changeset'ами возникнут проблемы. учитывая, что на мой взгляд эти проблемы не решаются существующим тулами, то сделал скрипт (150 строк на bash), который позволяет формировать патчи в двух форматах с учетом зависимостей между скриптами https://github.com/SergeyRudyshin/gtbuild сделал шаблон для использования этого скрипта в применении к бд Оракл https://github.com/SergeyRudyshin/gtbuild_ora_template и сделал пример, в котором можно в виртуальной машине посмотреть как оно все вместе работает в бд Оракл https://github.com/SergeyRudyshin/gtbuild_ora_walkthrough если кого-то заинтересует, буду рад ответить на вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 13:50 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
Rudyshin Sergeyсогласен, что процедуры и подобные объекты, можно делать в виде идемпотентных скриптов, но только при условии, что каждый храниться в "нормальном" файле и конфликты мерджа решаются через СКВ если же помещать идемпотентные скрипты, в changeset'ы, то можно потерять изменения пример, в котором процедура из JIRA-002 будет перетерта версией из JIRA-001 Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9.
Камрад, ну не хочешь понять ты как работать с liquibase. Сhangeset-ы умеют дружить с файлами. Сhangeset - это логический объект, а файл - физический. У меня весь хранимый код хранится по файлам - отдельный .sql-файл для каждого объекта (исключения пакеты: там один файл на спеку, второй - на тело), да и вообще для каждого типа объектов - свой каталог. Это что касается физики хранения. А теперь на каждый из этих файлов натравлено по changeset-у (с выставленным либо runAlways или runOnChange). То есть при накате changeset выполняет (pl/)sql-код из файла, на который ссылается. Это что касается логики вызова. При необходимости изменить код какого-либо объекта меняется содержимое соответствующего файла (а не добавляются новые). Это значит, что не будет описанного тобой сценария с перезатиранием объекта, а всю историю изменений объекта ты всегда можешь увидеть по СКВ. Если же при накате тебе нужно управлять несколькими версиями объекта (пишу об этом уже N-ый раз), то тут нужно будет создать несколько файлов (и желательно для каждого отдельный changeset) - для каждой необходимой версии. Ну и описать логику управления этими версиями - а эта задача возникает вне зависимости того, каким средством ты накатываешь. Rudyshin Sergey2) могла бы быть проблема с потерей изменений например JIRA-002.sql изменил состав столбцов индекса I1 JIRA-001.sql изменил уникальность I1 после выполнения patch.sql изменения JIRA-002.sql потеряныЭта проблема вне контекста выбора системы патчей. На наших проектах мы всегда выбираем ответственного за модель данных и все изменения ее структуры идут через него. А также стараемся избегать ситуаций, когда двое и более разработчиков одновременно работают над одним и тем же объектом. Все остальные аргументы про слияние веток игнорирую - они вне контекста выбора системы патчей. Rudyshin Sergeyв случае же оформления через changeset'ы, пришлось бы продублировать все команды по созданию таблицы, индексов и т.п.Повторяю, changeset - логический объект, файл - физический. Связь можно выстраивать любую. Скрипт генерации таблицы (или даже всей схемы целиком) можно бить на .sql-файлы как угодно. И конечно же можно вызывать один и тот же .sql-файл в разных changeset-ах. Нет такой проблемы, все дело в непонимании принципа работы liquibase. Rudyshin Sergeyучитывая, что на мой взгляд эти проблемы не решаются существующим тулами, то сделал скрипт (150 строк на bash), который позволяет формировать патчи в двух форматах с учетом зависимостей между скриптами https://github.com/SergeyRudyshin/gtbuild сделал шаблон для использования этого скрипта в применении к бд Оракл https://github.com/SergeyRudyshin/gtbuild_ora_template и сделал пример, в котором можно в виртуальной машине посмотреть как оно все вместе работает в бд Оракл https://github.com/SergeyRudyshin/gtbuild_ora_walkthrough если кого-то заинтересует, буду рад ответить на вопросыИзвини, но мне это пока неинтересно. Ты и liquibase забраковал, до конца с ним не разобравшись, а полез изобретать собственный велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 20:52 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
AmKadИзвини, но мне это пока неинтересно. Ты и liquibase забраковал, до конца с ним не разобравшись, а полез изобретать собственный велосипед. а с чего ты решил(а) что тебя кто-то собрался заинтересовывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2017, 00:00 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
спросим девчушкуAmKadИзвини, но мне это пока неинтересно. Ты и liquibase забраковал, до конца с ним не разобравшись, а полез изобретать собственный велосипед.а с чего ты решил(а) что тебя кто-то собрался заинтересовывать?Можешь выкинуть первое предложение, основной посыл - во втором. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2017, 00:09 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
> все дело в непонимании принципа работы liquibase скорее в непонимании, зачем для того, чтобы иметь таблицу DATABASECHANGELOG, тянуть в свой проект зависимость в 100 тыс строк! Код: powershell 1. 2.
из всех "фич", которые декларируется, возможно Diff был бы интересен http://www.liquibase.org/documentation/diff.html но на странице есть оговорка Код: html 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2017, 22:30 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
Rudyshin Sergeyскорее в непонимании, зачем для того, чтобы иметь таблицу DATABASECHANGELOG, тянуть в свой проект зависимость в 100 тыс строк!Управление таблицей DATABASECHANGELOG - это все, что ты смог найти? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 00:24 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
AmKadспросим девчушкупропущено... а с чего ты решил(а) что тебя кто-то собрался заинтересовывать? Можешь выкинуть первое предложение, основной посыл - во втором. Ты постарайся не говорить, что (можно) делать другим, и глядишь - другие перестанут тебе говорить, куда тебе прям сейчас стоит пройти (с) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 11:22 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
Rudyshin Sergey> все дело в непонимании принципа работы liquibase скорее в непонимании, зачем для того, чтобы иметь таблицу DATABASECHANGELOG, тянуть в свой проект зависимость в 100 тыс строк! Отбрасывая в сторону вопрос пагубности/православности концепции миграций ActiveRecord в Java (и практически полного отсуствия штатной реализации оной в известных ORM) - есть ли пример чего-то более продвинутого в части API встроенных рефакторингов ? И да, зачем в проект тянуть исходник? Что мешает просто линковать готовый .jar? Если бы Oracle RDBMS EE поставлялась в open-source, вы бы ее тоже каждый раз пересобирали? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 17:38 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
> есть ли пример чего-то более продвинутого в части API встроенных рефакторингов ? А какие есть примеры не продвинутых встроенных рефакторингов? Не совсем понимаю о чем речь. > И да, зачем в проект тянуть исходник? мой комментарий был о сложности проекта. Естественно, можно и нужно использовать готовый jar. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 21:52 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
> единственно правильным является Oracle XDF/ODF фреймфорк почитал документацию https://docs.oracle.com/cd/E26401_01/doc.122/e22961/T302934T609784.htm и насколько понял, XDF это XML файл, в котором сохраняются метаданные главного объекта и его зависимостей. Есть утилита XDFGEN, которая генерирует эти файлы. И есть xdfcmp, которая умеет сравнивать XDF файлы с базой и "накатывать" их. Если мое понимание верно и подход заключается в том, чтобы оперировать XML файлами полученными автоматически, а именно хранить их в системе контроля версий и передавать эти файлы для установки и т.д. то на мой взгляд, это как минимум неудобно Правильным, как раз скорее является подход, которого Оракл придерживается с начала времен, и я сильно сомневаюсь, что они используют XDF или Liquibase как пример смотрю на файл @?/rdbms/admin/catalog.sql и его зависимости По истории изменений видно, что файл был создан почти 30 лет назад и до сих пор меняется Код: html 1. 2. 3.
если смотреть на сами скрипты, то видно, что они меняются вручную, а не генерируются (по крайней мере с первого взгляда). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2017, 00:09 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
Rudyshin SergeyПравильным, как раз скорее является подход, которого Оракл придерживается с начала времен, и я сильно сомневаюсь, что они используют XDF или Liquibase как пример смотрю на файл @?/rdbms/admin/catalog.sql и его зависимости По истории изменений видно, что файл был создан почти 30 лет назад и до сих пор меняется Код: html 1. 2. 3.
если смотреть на сами скрипты, то видно, что они меняются вручную, а не генерируются (по крайней мере с первого взгляда).И у оракла бывают проблемы. На днях ставил Oracle 11.2 XE на свою виндовую локальную тачку. По завершению инсталлер говорит что все ОК - а на деле базы-то и нет. Решал по аналогии 14769174 . Я уж не говорю про проблемы при обращении к v$-вьюхам, например к v$session. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2017, 19:14 |
|
СУБД. История изменений
|
|||
---|---|---|---|
#18+
> И у оракла бывают проблемы и не мало. Например, одна из тех, с которыми приходилось сталкиваться: catalog.sql отрабатывает с ошибкой если переменная SQLBLANKLINES установлена в ON. > На днях ставил Oracle 11.2 XE на свою виндовую локальную тачку. По завершению инсталлер говорит что все ОК - а на деле базы-то и нет. Решал по аналогии 14769174 Возможно это действительно так. Но никогда нет полной уверенности, пока установка делается вручную. Некоторое время назад познакомился с утилитой https://www.packer.io, которая нарезает образы для VM из дистрибутивов. вот тут https://github.com/boxcutter/windows можно найти конфигурации, которые создают образы Windows. Нам бы в FAQ добавить что-то подобное, чтобы запустив одну команду создавался бы образ VM с установленным Ораклом под винду... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2017, 21:47 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1881669]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 187ms |
0 / 0 |