|
|
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Приветсвую! в "Java Persistence with Hibernate" P.64 прописано: WARNING: We've seen Hibernate users trying to use SchemaUpdate to update the schema of a production database automatically. This can quickly end in disaster and won't be allowed by your DBA Хотелось бы узнать поподробнее , какие именно траблы/проблемы могут возникнуть (или возможно возникали у кое-кого из участников sql.ru при попытке.... 1. актуализации схемы БД на БД заказчика 2. актуализации схемы БД у разработчиков В чем атомный ужос hibernate.hbm2ddl.auto=update на БД заказчика, если предварительно сия БД была пробекапена и возможно откатиццо на пред. версию в крайнем случае. В новом проекте захотелось прикоснутся к революции в виде ORM Hibernate;-) Разработка ведется на основе ваяния сущьностейя и затем генерирования на их основе табличечег в БД. В БД ручками пока не лезем, все полагаемся на магию Hibernate;-) P. S пока что в проектах вообще по старинке SQL, SQL-deltas накатывали изменения OR / использовали самопальные разработки, где изменения схемы в программе прописывались и потом накатывались Спасиб за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 23:10:02 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Блин, ну сколько можно рассказывать. hbm2dll, лишь, инструмент чернового прототипизирования. Он не умеет создавать все возможные констрейнты и индексы, которые нужны базе. Он не умеет всегда правильно добавлять апдейты, чтобы не удалить существующие данные. И уж, тем более, он не покрывает сотни сценариев, когда апдейт требует специальной логики конвертации. Забудьте про эту фичу hibernate. Смотрите в сторону liquibase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 23:33:11 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
P.S.: если вы не понимаете всю "магию" hibernate, то лучше не трогайте его вообще. Там масса тонкостей, и если вдруг его использовать не так как задумано мануалом, то можно поплатиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 23:34:53 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
BlazkowiczБлин, ну сколько можно рассказывать. hbm2dll, лишь, инструмент чернового прототипизирования. Он не умеет создавать все возможные констрейнты и индексы, которые нужны базе. Не жду магии до такой степени, - Буду Creating custom constraints читать, аннотации сажать. BlazkowiczОн не умеет всегда правильно добавлять апдейты, чтобы не удалить существующие данные. О, это уже весомо конечно, - т.е миграцию данных не прописать (как то хочу шоб данные из "старого" поля вуася (varchar(16) )писались в поле пуопкин (varchar(36) и добавлялось в поле пуопкин еще "это-он" ? BlazkowiczЗабудьте про эту фичу hibernate. Смотрите в сторону liquibase Да уж смотрел. начал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 01:39:49 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Конвертировать базу - в общем случае нет, но посмотрите, а что там за конвертация? В большинстве случаев это добавление новых сущностей или полей, и hibernate с этим вполне справляется, по крайней мере, достаточно точно угадывает - таблицу добавить, поле - может - PK, FK - пожалуйста. Конечно, без каскадов, и понятно почему - не все сервера это умеют. Но в самом hibernate все эти cascade имеются, и если ваше приложение - единственный клиент базы, то какая разница? - индекс создать - тоже пожалуйста. Так что не все так плохо. JBPM, JBoss, JBoss Portal - именно так свои базы и поднимают. Просто надо четко понимать, что происходит с базой при hibernate.hbm2ddl.auto=update. Желательно также предварительно прогнать такое обновление на тренировочной базе с включенной трассировкой SQL. А насчет приведенных предупреждений - опасность действительно есть, например, если в базе используются особенности сервера/конкретного диалекта. - триггеры/процедуры - поля какого-то особого типа, особенно если они используются во вновь создаваемых констрейнтах Плюс переименования/удаления полей/сущностей, но это уже от диалекта не зависит, общая проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 09:51:04 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
ivanra, спасиб за краткий обзор. Сервером будет...tomcat. никиких там вебсфер с джебосами не будет пока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 10:45:37 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
kamenjahrВ БД ручками пока не лезем, все полагаемся на магию Hibernate;-) действительно. Как бы Вообще от БД избавиться. Как класс...Чтобы ей и не пахло. Те кто этого действительно хотят, уже ушли на NoSQL. Остальные - реалисты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 10:58:50 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Petro123kamenjahrВ БД ручками пока не лезем, все полагаемся на магию Hibernate;-) действительно. Как бы Вообще от БД избавиться. Как класс...Чтобы ей и не пахло. Те кто этого действительно хотят, уже ушли на NoSQL. Остальные - реалисты. Если Вы - представитель реалистов, скажите/напишите - Вы дизайните БД, используя подручные средства типа Visual Paradigm али Visual Management Studio (MS SQL Server). MySQL Workbench 5.2 CE - (mysql). Али Вы пишете, что-то типа Код: sql 1. 2. 3. 4. , Код: 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.04.2013, 12:09:17 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
kamenjahr, - если моя должность - Разработчик БД, то общие средства - ErWin + штатные средства БД (оракл - PSQLDeveloper, сиквел - профайлер и т.д.) - если должность Программист, то я готовлю для админа БД заазчика скрипты по версиям в паре (апдейт на старшую, откат на младшую). Все скрипты в папках: 6.0.0 server\ 6.0.2 server\ 6.0.3 server\ 6.0.4 server\ 6.0.5 server\ внутри пара файлов...батник + sql 1.sql start.bat Админ заказчика ничего кроме текстовых скриптов не примет, т.к. башкой отвечает за работоспособность БД после апдейта исполнителя версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 12:58:20 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
В "продакшене" за БД обычно вообще отвечает отдельная команда, могут присутствовать индексы, доп. поля, о которых ваше приложение знать не должно. Удаление полей так же не приветствуется, вдруг там чо. Скрипты апдейта версий гоняют вручную. Автоматом можно разве что в каких-то мелких не-бизнес проектах, где от данных не завист миллионы денег и судьбы некоторого кол-ва живого персонала ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 13:02:07 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Тут с презентации ещё одна тулза проскочила - dbdeploy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 13:06:09 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Лагман, +1 автор(c) Ааз (форум sql.ru - Oracle) Member Откуда: Протвино Сообщений: 4112 =================================================== - Разработчик на своей девелоперской БД (например, очень недавний бэкап промышленной) отладил скрипт. - DBA на тестовой (куда девелоперам доступа нет) тупо запустил скрипт и проверил отсутствие ошибок. Запустил туда админа приложения для проверки функционала. - Запланировали downtime или ограниченную доступность сервисов. DBA подготовил возможность отката (standby с задержкой наката redo подойтёт). - В момент «Ч» DBA прогнал проверенный скрипт и пустил админа приложения проверить основной функционал. Если ОК - пущаем в продакшн. Если не Ок, откатываемся на запасные путя и предоставляем начальству удовольствие оттра**** разработчика или администратора приложений (по выбору). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 13:09:37 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Все верно - если заказчик может содержать не только DBA, а и целую команду - лучше отгрузить им скрипт, и пусть отрабатывают свой хлеб. Такой заказчик и за работу заплатить не пожалеет: отдельно за схему в erwin, отдельно за sql-скрипт, отдельно - за доработку классов/мэппингов. И такой заказчик может быть и рад сделать автоматический апдейт, но не может, так как регламент. Бывают и другие заказчики, которые удавятся за копейку, либо это вообще массовое производство. Таким надо, чтобы за минимальную цену запустил - и заработало. Вот тут как раз hibernate.hbm2ddl.auto=update. Проектируем только объектную модель, и, может быть, индексы для оптимизации, и не делаем двойную/тройную работу по цене 1. В моем опыте был еще и 3 вариант - разворачивание новой базы и перекачка данных. Но это для тех, у кого базы относительно небольшие, либо можно подождать. И все-таки по теме. Хибернейт он что может? Да не так и много Код: plsql 1. 2. 3. Ну, допустим, зарезервировал заказчик имена каких-то полей / таблиц - так тут что hibernate, что скрипт - в одинаковых условиях: если вы про эти поля не знаете заранее, то в любом случае получите ошибку. А в остальном понимаем: если достаточно для апдейта этих команд, так зачем тогда делать лишнюю работу? Что из приведенных выражений может повредить базе? Я вижу только одну опасность: dba или кто там еще был достаточно сообразителен, чтобы написать там процедуры/триггеры/view, но недостаточно сообразителен, чтобы не использовать в них выражения типа Код: plsql 1. 2. Какие тут еще могут быть опасности? Вопрос-то у автора был именно чего следует бояться, а не что может/не может hibernate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 14:00:30 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, тут вот есть таблица с возм.тузлами http://flywaydb.org/ Код: plaintext http://stackoverflow.com/questions/8418814/db-migration-tool-liquibase-or-flyway ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 23:23:53 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
ivanra, Возможно зависит от сложнонавороченности изменений в БД да и самой БД (кол-во таблиц например , кол-во столбцов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 23:25:49 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Petro123kamenjahr, - если моя должность - Разработчик БД, то общие средства - ErWin + штатные средства БД (оракл - PSQLDeveloper, сиквел - профайлер и т.д.) - если должность Программист, то я готовлю для админа БД заазчика скрипты по версиям в паре (апдейт на старшую, откат на младшую). Все скрипты в папках: 6.0.0 server\ 6.0.2 server\ 6.0.3 server\ 6.0.4 server\ 6.0.5 server\ внутри пара файлов...батник + sql 1.sql start.bat Админ заказчика ничего кроме текстовых скриптов не примет, т.к. башкой отвечает за работоспособность БД после апдейта исполнителя версии. Ясно, а теперь представьте себе, что бывают разработки, где программисты вообще не знают и не ведают, что такое sql-скрипт. И че такое таблица там или вьюха -тоже не ведают. Когда надо разработать очередное приложение, то дизайница ER диаграмма на бумаже там или в о ужос ворд-документе (но это чисто для документации концепции/реализации). Затем создаюццо некие абстракции уж в среде разработки (наподобие сущностям /слабым сущностям в БД). При этом однако назначаются PK/FK/BK (бизнес-ключ). А также индексы. Ну и ессно связи с другими сущностями. Затем запускаеццо тузла, которая генерит нечто подобное доменным объектам -ява-классам, а также мепперы т.н. А также классы версий - где отображены аттрибуты сущности в зависимости от версии с.хемы БД. Если по ходу админы вдрух видят, что нужны те-то или те-то индексы - они добавляютццо. Вот такое захотелось иметь, юзая ORM стандартный и начиная разработку с ява.классов хотя бы, а не с дизайна таблицечек в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 23:42:34 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
kamenjahrЯсно, а теперь представьте себе, что бывают разработки, где программисты вообще не знают и не ведают, что такое sql-скрипт. верю что они не занют что такое реестр в винде, HTML и JS. Это ведь тоже не Java. ... - Требуется сделать апдейт поля ФИО одной строкой на 3 поля Ф, И и О. - Требуется выделить из поля Адрес в виде одной строки - сущность в виде класса. Как будем делать не зная что такое скрипты\таблицы\SQL выражения? А первая версия уже в продакшене? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2013, 00:03:36 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
ЛагманВ "продакшене" ... могут присутствовать индексы, доп. поля, о которых ваше приложение знать не должно. А вот это потенциальная жопа. В базу ничего не должно попадать мимо контроля версий, иначе кто будет отвечать если в продакшене возникнут ошибки не воспроизводимые в тестах или у разработчика ? Знаю компанию где на все обновления процедур повешен триггер который сравнивает новый код с svn. Если отличаются, то изменение отбрасывается. На схему правда такой скрипт придумать не смогли, ограничились административными мерами. Команды DROP, CREATE, ALTER в продакшн криминал, если проходят мимо svn. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2013, 08:22:35 |
|
||
|
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123верю что они не занют что такое реестр в винде, HTML и JS. Это ведь тоже не Java. Ну что такое знать-то знают, другое дело, что глубоко и не копают т.к. им это по работе не встало. Зато те, кто прекрасно знают, что такое java script & jquery & Co стайтмент написать смогут вряд ли (вспоминать придеццо) ... [/quot] Petro123- Требуется сделать апдейт поля ФИО одной строкой на 3 поля Ф, И и О. - 1. Проблема решаема без уп. знаний в той разработке, т.к. я уж говорил, что нечто подобное сущностям есть в той разработке. Есть классы мепперы версии ИКС, где Ф.И.О в одном аттрибуте. Программер сгенерировал новую версию ИКС+1 мепперов, где три аттрибута . Ф-, И,.О. Затем он пишет update_ программу для миграции с ИКС=> ИКС+1. Затем он запускает тузлы, которые миграцию выполняют у него локально. Petro123 Требуется выделить из поля Адрес в виде одной строки - сущность в виде класса. Как будем делать не зная что такое скрипты\таблицы\SQL выражения? А первая версия уже в продакшене? 2. В той разработке есть такие темы как субсущность как аттрибут сущности. Схема апдейта та же как и в 1. случае . Теперь про продакш: в той разработке имеются инсталлеры, которые заливают обновления схемы БД исползуя те самые мепперы классов. Ессно первейшее требование - наличие бэкапа со стороны заказчика. P.S но все это: огромный велосипед, который замутили еще в конце 90х 20г0 века. И использовать сей велосипед в других разработках низзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2013, 11:17:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38244990&tid=2129436]: |
0ms |
get settings: |
13ms |
get forum list: |
23ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
59ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
90ms |
get tp. blocked users: |
3ms |
| others: | 289ms |
| total: | 507ms |

| 0 / 0 |
