powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Когда liquibase вызывает rollback ?
21 сообщений из 21, страница 1 из 1
Когда liquibase вызывает rollback ?
    #39682008
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал
https://habr.com/post/251617/

Вот пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--liquibase formatted sql

--changeset User1:1 
create table test1 (
    id int primary key,
    name varchar(255)
);
--rollback drop table test1;



Не смог понять при каком условии будет выполнен rollback. Он как-то явно при сборке выполняется, если указать или в случае фэйла?
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682017
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный вопрос. Rollback для того и пишется чтобы выполняться в случае ошибок. Потому что DDL не транзакционный. И если у тебя апдейт создаёт три таблицы а на третьей падает, то первые две не удалятся. И следующая попытка их создания тоже упадёт, ведь 2 таблицы уже есть.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682019
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

А как может упасть create table ?
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682033
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА как может упасть create table ?
Пипец ты буквоед. Не важно что падает. Важно то что нужно откатить. Это же пример просто. Ты пример не можешь экстраполировать на реальный круг задач?
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682050
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА как может упасть create table ?

Oracle
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> create table test ( id number );
 
Table created

SQL> create table test ( id number );
 
create table test ( id number )
 
ORA-00955: name is already used by an existing object
 
SQL> 
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682054
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА как может упасть create table ?"already exist", "syntax error", "incompatible options".
Проблема не в том, что неприятности случаются, а в том, что иногда (обычно) они случаются внезапно.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682058
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ кончилось место на диске, в процессе выполнения пропала сеть/потерялась связь с сервером (но тут фиг с клиента откатишь), не хватило оперативной памяти в PGA/SGA или process'ов, повреждены файлы, ORA-600 (внутренняя ошибка) и так далее

Вообще, я бы смотрел на механизмы конкретной СУБД. В M$ SQL точно можно DDL объединять в пакеты-транзакции, в Oracle вроде тоже.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682083
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerА как может упасть create table ?
Пипец ты буквоед. Не важно что падает. Важно то что нужно откатить. Это же пример просто. Ты пример не можешь экстраполировать на реальный круг задач?
Я до этого работал с flyway. Там вроде бы такого не было. Действительно, мне не понятно зачем это надо. Судя по гуглу можно rollback вызывать явно через liquibase плагин в мавене
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682085
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevquestionerА как может упасть create table ?

Oracle
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> create table test ( id number );
 
Table created

SQL> create table test ( id number );
 
create table test ( id number )
 
ORA-00955: name is already used by an existing object
 
SQL> 



Ну и зачем удалять в этом случае?
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682086
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev+ кончилось место на диске, в процессе выполнения пропала сеть/потерялась связь с сервером (но тут фиг с клиента откатишь), не хватило оперативной памяти в PGA/SGA или process'ов, повреждены файлы, ORA-600 (внутренняя ошибка) и так далее

Вообще, я бы смотрел на механизмы конкретной СУБД. В M$ SQL точно можно DDL объединять в пакеты-транзакции, в Oracle вроде тоже.
Вопрос про liquibase
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682090
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНу и зачем удалять в этом случае?Выполняется DDL на цать операций и где-то посередине получаем ошибку.

Чисто риторический вопрос что лучше:
1. Отменить всё ранее сделанное, чтобы разобраться ровно с одно проблемой
или
2. Ничего не делать, (как-то) исправить одну ошибку, повторить DDL-сценарий и получить кучу наведённых ошибок
?

P.S.
Я, честно говоря, одного не понимаю - где находятся такие изолированные башни из слоновой кости, где реальный мир остаётся туманным призраком?...
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682102
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovquestionerНу и зачем удалять в этом случае?Выполняется DDL на цать операций и где-то посередине получаем ошибку.

Чисто риторический вопрос что лучше:
1. Отменить всё ранее сделанное, чтобы разобраться ровно с одно проблемой
или
2. Ничего не делать, (как-то) исправить одну ошибку, повторить DDL-сценарий и получить кучу наведённых ошибок
?

P.S.
Я, честно говоря, одного не понимаю - где находятся такие изолированные башни из слоновой кости, где реальный мир остаётся туманным призраком?...

Ну мы ж запомнили где свалились. Можно просто всё снести и с самого начала накатить изменения до этой ошибки.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682104
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerвсё снестиВ терминах СУБД "это" называется rollback (откат, не путать коррупцией).
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682578
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПотому что DDL не транзакционный.
Разве что только в MySQL.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682583
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettРазве что только в MySQL.
И в ещё в десятке не топовых RDBMS таких как Derby, H2, HSQLDB и т.п.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682588
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczHettРазве что только в MySQL.
И в ещё в десятке не топовых RDBMS таких как Derby, H2, HSQLDB и т.п.

да вроде можно в derby

авторDerby permits schema and data manipulation statements (DML) to be intermixed within a single transaction. If you create a table in one transaction, you can also insert into it in that same transaction. A schema manipulation statement (DDL) is not automatically committed when it is performed, but participates in the transaction within which it is issued. Because DDL requires exclusive locks on system tables, keep transactions that involve DDL short.


https://db.apache.org/derby/docs/10.0/manuals/develop/develop63.html

но в общем-то оффтоп.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39682893
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

у вас что не пост, так обязательно ментальный онанизм. rollback - это свойство changeset, а не отдельного sql, еще читаете какую-то порнографию вместо официальной документации, а в официальной документации пишут, что основной формат чейджлога - xml, а то что можно заколхозить через SQL - так это просто возможность, которую можно (но не нужно) использовать только при искоренении бардака в голове.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39683152
mrWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфиловосновной формат чейджлога - xml, а то что можно заколхозить через SQL - так это просто возможность, которую можно (но не нужно) использовать только при искоренении бардака в голове.
Да, но вот попробуйте задать check constraint каким либо способом кроме sql.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39683195
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrWolfДа, но вот попробуйте задать check constraint каким либо способом кроме sql.Вы тоже похоже не особо любитель документации... в liquibase есть такие сущности:
- чейнлджлог
- чейнджесет
- чейндж

вот formatted sql - это про чейнджлоги, а создать констрейн - это чейндж (и не нужно забывать про оракловый плагин, который таки умеет описывать констрейны через xml/json)
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39683243
mrWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилова создать констрейн - это чейндж (и не нужно забывать про оракловый плагин, который таки умеет описывать констрейны через xml/json)
Мой поинт в том, что задать констрейн чейндж и сам ликвибэйс может(unique, foreign и т.д.), но вот конкретно CHECK нет, и приходится вставки на SQL городить. Я если честно про оракловый плагин не в курсе, поищу на досуге.
...
Рейтинг: 0 / 0
Когда liquibase вызывает rollback ?
    #39683401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНу мы ж запомнили где свалились. Можно просто всё снести и с самого начала накатить изменения до этой ошибки.
Несколько мыслей.

1) Liquibase используется для непрерываного цикла накатки обновлений на продуктивные БД.
Поэтому вариант всё снести - это конечно вариант. Но только для девелоперских баз. В общем - ничего сносить нельзя. Нужно действовать step-by-step.

2) Liquibase - это софт который бесплатен. И не имеет каких-то особых гарантий в плане DDL некоторых DBMS. Вообще откат операции наподобие drop column даже для меня (бывшего DBA) представляет собой дилемму. Тут надо подумать о том куда складывать данные которые удалились. Не все DBMS (а точнее очень мало) поддерживают откат DDL. Что делать если вдруг закончилось место в Undo-segment или в сегменте данных. Некоторые DDL вообще затрагивают
90% всех данных. Реструктуризация таблиц там... на знаю.

Тоесть идеология liquibase постулирует о том что есть просто какие-то степы. И для них есть
накат изменений и есть откат (который мы кодим вручную). И с откатом реально существуют
проблемы. Чисто технически всё зависит от квалификации админов со стороны заказчика.
Смогут ли они сами без вас урегулировать упавший патч или нет? Бывает так что сидят
индусы которые только исполняют инструкции. И максимум что вы от них дождетесь
- это фрагмент лога в письме о том что установить не удалось.

3) Liquibase не контролирует никак целостность схемы. Он слепой в этом смысле. Единственное
куда он смотрит это его табличка schema_versions и статусы изменнений. Удалось. Не удалось.
Типичный сценарий. На тест БД добавили вручную индекс. И потом чтоб не забыть добавили
скриптики в liquibase а потом при установке этого-же индекса - "стрельнуло". Ни взад ни вперед. Для проверок conditions существует обходной менёвр. Есть секция <preConditions>
которая формально решает вопрос проверок. Но кодить ее - такой-же гимор как роллбек.
Да еще и есть ненулевая вероятность допустить ошибку.



Есть платные версии софта похожие на liquibase. Там наверне есть какие-то гарантии.
Но в жесткой привязке к конкретной DBMS и диалекту SQL.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Когда liquibase вызывает rollback ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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