elwood
Дата: 01.03.2010 12:32:10
Пишу утилиту для переноса данных JBoss portal'a с embedded H2 db на mysql / mssql.
Сценарий использования приблизительно такой :
1. У нас есть базука на H2, на которой крутится JBoss portal. Мы переключаем портал на свежесозданную базуку в mssql /mysql, перезапускаем JBoss, и при запуске хибернейт создает схему новой базы.
2. Теперь нужно взять данные из H2 и скопировать в новую базу, предварительно очистив то, что хибер туда накидал по дефолту.
Так как схема создается хибером автоматом, то мне нужно лишь перенести в нужном порядке данные. По JDBC через метадату я могу получить список таблиц, а также их referential contstraint'ы.
После этого сортирую таблицы таким образом, чтобы данные копировались с учетом их FOREIGN KEYS. На небольшой базе в 14 таблиц (JBoss forums) проблем не возникло, однако в самом портале нашлись таблички, которые завязаны друг на друга. Причем в схеме mysql прописано, что при удалении или апдейте действия не CASCADE, а NONE.
Подскажите, как мне теперь данные в таких таблицах перенести с помощью более или менее стандартного SQL ?
(я в этом не про, и поэтому никак не могу понять, как вообще данные инсертятся в такие таблицы, ведь если по очереди их инсертить - сначала в одну таблицу, потом в другую, - то constraint ведь не даст этого сделать ?.. то же и с удалением )
WarAnt
Дата: 01.03.2010 12:47:16
elwood,
Дак ведь это JBoss создавал у него и спросите, как он планировал это делать:)
ps. грохайте констрайнты переносите данные потом восстанавливайте констрейнты
elwood
Дата: 01.03.2010 13:03:34
MsDatabaseru |
сначала структуру таблиц потом данные потом констрейны |
Так не получится, к сожалению, потому что JBoss сам создает структуру.
Если бы Jboss мог сначала создать таблицы с дефолтными данными, а потом опционально накинуть констрейнты, тогда я бы мог в середине этого процесса прокачать данные.
elwood
Дата: 01.03.2010 13:08:37
WarAnt |
Дак ведь это JBoss создавал у него и спросите, как он планировал это делать:)
ps. грохайте констрайнты переносите данные потом восстанавливайте констрейнты |
Да они, редиски, думают, что переезжать никогда никому не понадобится.
Ведь нет же тулуз, которые позволяют данные трансферить между произвольными базуками.
Вот и приходится изворачиваться :)
По поводу грохнуть констрейнты, а потом заново восстановить - такое возможно в mssql / mysql ?
Glory
Дата: 03.03.2010 10:48:15
BOL - ALTER TABLE
...
{ CHECK | NOCHECK } CONSTRAINT
Specifies that constraint_name is enabled or disabled. This option can only be used with FOREIGN KEY and CHECK constraints. When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.