MS SQL data export/import
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Возвращаясь к этому вопросу...
Если нужно воссоздать точную копию существующей базы из текст файлов, можно ли сделать так:
1) прогнать скрипт, создающий все таблицы;
2) импортировать данные ( в том числе lookup data)
3) посадить на это constraints (FK, etc.) ?
Если таблицы создать сразу с constraints, то импортировать всю базу одним махом соответственно не получиться. Хочу сделать так как описано выше, но не уверена, что при таком раскладе нет каких-нибудь подводных камней.
Сабина
Если нужно воссоздать точную копию существующей базы из текст файлов, можно ли сделать так:
1) прогнать скрипт, создающий все таблицы;
2) импортировать данные ( в том числе lookup data)
3) посадить на это constraints (FK, etc.) ?
Если таблицы создать сразу с constraints, то импортировать всю базу одним махом соответственно не получиться. Хочу сделать так как описано выше, но не уверена, что при таком раскладе нет каких-нибудь подводных камней.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Еще раз извиняюсь за возврат к этой теме, но мне ОЧЕНЬ нужна помощь с этим вопросом.
В Интернете я ничего толкового найти не могу, ибо большинство народу пользуется import/export тулами и там рассматривается в основном какую кнопку нажать, какую опцию включить, нежели концептуальная сторона вопроса.
У меня есть скрипты, которые создают всю базу from scratch. То есть как создать чистую базу с нуля - понятно.
А как создать копию уже существующей базы с данными?
Я так понимаю нужно создать саму базы и таблицы, не вешая туда никаких constraints. После этого импортировать данные и только потом добавить constraints.
Мой вопрос так ли оно обычно делается, или нет?
Спасибо,
Сабина
В Интернете я ничего толкового найти не могу, ибо большинство народу пользуется import/export тулами и там рассматривается в основном какую кнопку нажать, какую опцию включить, нежели концептуальная сторона вопроса.
У меня есть скрипты, которые создают всю базу from scratch. То есть как создать чистую базу с нуля - понятно.
А как создать копию уже существующей базы с данными?
Я так понимаю нужно создать саму базы и таблицы, не вешая туда никаких constraints. После этого импортировать данные и только потом добавить constraints.
Мой вопрос так ли оно обычно делается, или нет?
Спасибо,
Сабина
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Sabina wrote:А как создать копию уже существующей базы с данными?
А backup/restore почему не походит? Зачем нужно пересоздавать объекты?
Я так понимаю нужно создать саму базы и таблицы, не вешая туда никаких constraints. После этого импортировать данные и только потом добавить constraints.
Можно так, а можно и временно отключить констрейнты пока не закончится импорт, после чего их снова разрешить. Однако если у Вас есть нетривиальная логика или обработка на триггерах, то Ваш вариант становится проблематичным.
Cheers
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 497
- Joined: 20 Aug 2001 09:01
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
irksome wrote:Sabina wrote:tengiz wrote:Sabina wrote:А как создать копию уже существующей базы с данными?
А backup/restore почему не походит? Зачем нужно пересоздавать объекты?
dbschema меняется (таблицы добавлены), а данные надо оставить.
А нельзя новые таблицы создать в новой копии?
Пока так и делаем, но для этого надо кому-то собирать все changes в отдельный update script и ранать. Они хотят чтобы я им написала нечто, чтобы нажал на кнопку и готово.
Я в приниципе написала по тому принципу что выше описала, сейчас буду тестировать. НО мне это все жутко не нравится. Хочется узнать как жругие это делают.
Неужели все делают backup/restore и потом изменеия добавляют? Или никто не делает DBSchema changes после того как в базе уже есть данные ?
Сабина
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Sabina wrote:Неужели все делают backup/restore и потом изменеия добавляют? Или никто не делает DBSchema changes после того как в базе уже есть данные
Самое лучшее, что можно сделать, это не создавать объекты в базе "по-живому", а изменять мастер-скрипты, создающие базу, объекты в базе и заливающие данные. Для чего девелоперы должны чётко осознавать, что если они нарушат эту процедуру (все изменения только в скриптах), то при следующей итерации они всё что наработали "на живую" элементарно потеряют. Такая технология имеет много преимуществ, которые уже давно не нуждаются в обосновании, и под такую манеру работы есть масса стандартных инструментов.
Другой вариант - reverse engineering, который умеют делать страндартные database design инструменты. Однако в мои времена они всего лишь были удобным подспорьем, и ни в коем случае не могли служить полноценной заменой того, что изложено выше.
Так что на мой скромный взгляд, самая большая проблема здесь - это организация эффективного процесса разработки, а не экспорт/импорт. Я бы именно в этом направлении двигался.
Cheers
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Sabina, я наконец понял что у Вас хотят
У нас при разработке делают так
Все изменения sp при релизе отливают просто скопом
А вот изменения структуры делаются скриптами
Я потом эти скрипты собираю, тестирую и формирую скрипт для PREPROD -> PROD
Вы хотите реинжениринг, по старой и новой схеме сгенерить alter tables. Такой тул у меня есть но это очень нетривиально
Задайте своему шефу вопросы
Что делать если колонке в таблице убрали NULL
Что делать если уменшьшили длину verchar - is it ok to truncate data ?
Что делать если таблитцу или колонку переименовали - догадаться ? Или это новые объекты ?
У нас при разработке делают так
Все изменения sp при релизе отливают просто скопом
А вот изменения структуры делаются скриптами
Я потом эти скрипты собираю, тестирую и формирую скрипт для PREPROD -> PROD
Вы хотите реинжениринг, по старой и новой схеме сгенерить alter tables. Такой тул у меня есть но это очень нетривиально
Задайте своему шефу вопросы
Что делать если колонке в таблице убрали NULL
Что делать если уменшьшили длину verchar - is it ok to truncate data ?
Что делать если таблитцу или колонку переименовали - догадаться ? Или это новые объекты ?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Dmitry67 wrote:Sabina, я наконец понял что у Вас хотят?
Да, я наверное не очень понятно изъясняюсь, поскольку имею с этим делом в первый раз. Сорри.
Dmitry67 wrote:У нас при разработке делают так
Все изменения sp при релизе отливают просто скопом
А вот изменения структуры делаются скриптами
Я потом эти скрипты собираю, тестирую и формирую скрипт для PREPROD -> PROD
У нас тоже до прошлой недели изменения структуры делались upgrade скриптами и составляла их одна strong backend programmer, которая на этой неделе ушла.
То есть она собирала все изменения из master scripts и потом вставляла это все в batch и передавала QA, чтобы они это прогнали на своих серверах.
Теперь эта дама ушла, а я работаю из дома. Доступа к QA серверам у меня нет, поскольку если что пойдет не так... Короче я это на себя взять не могу.
QA считает, что если я сделаю им скрипт, который импортирует данные во вновь созданную базу (по обновленным master скриптам), то это будет решением вопроса. Но я чем больше работаю над этим делом, тем меньше верю в надежность такого выхода.
Dmitry67 wrote:Вы хотите реинжениринг, по старой и новой схеме сгенерить alter tables. Такой тул у меня есть но это очень нетривиально
Можно название тула, просто так чтобы знать? У нас не так много изменений, чтобы пользоваться тулом, все можно и в ручную. В крайнем случае я могу писать скрипты, QA их прогонять. Ну и если что не так - поеду в офис за 30 миль
Dmitry67 wrote:Задайте своему шефу вопросы
Что делать если колонке в таблице убрали NULL
Что делать если уменшьшили длину verchar - is it ok to truncate data ?
Что делать если таблитцу или колонку переименовали - догадаться ? Или это новые объекты ?
Мой шеф врядли ответит на этот вопрос
От себя же скажу, что на моем веку (полгода) ни одного из перечисленных вами изменений не было. Было по мелочи, добавить/убрать таблицу/колонку.
Опять же для меня самой чтобы знать, а как вы выходите из ситуации, когда колонка вдруг стала not null, или длину колонки урезали, колонку переименовали? Можно просто ткнуть в URL не объясняя здесь подробно.
Спасибо,
Сабина
Last edited by Sabina on 20 Feb 2004 02:29, edited 1 time in total.
-
- Уже с Приветом
- Posts: 317
- Joined: 16 Feb 2001 10:01
- Location: US
Есть несколько вариантов решения.
1. Организационное.
Девелоперы при изменении чего либо готовят script. Если ето изменение структуры таблицы то соответственно script с ALTER и т.д.
Данные скрипты отправляются DBA. DBA готовит upgrade script затем тестирует на тестовой базе и затем делает upgrade боевой базы.
Tаким образом вы будете иметь upgrade script для каждой версии базы. К тому же еше неплохо писать где-нибудь в саму базу номер текушей версии. Ето опять же можно добавлять в upgrade script.
2. Автоматическое.
http://www.adeptsql.com/
http://www.lockwoodtech.com/index_sqldiff.htm
http://www.red-gate.com/sql_comparison_ ... oolkit.htm
и т.д. Таких tool'oв очень много. Но в етом случае Вы не будете контролировать ситуацию, да и работу каждого из них надо сначала хорошенько проверить
3. Интересное
Написать синхронизацию самому, использовать скриптование и т.д.
Процесс давольно трудоемкий и не во всех случаях простой. Синхронизацию SP, view, UDF можно реализовать достаточно не сложно, а вот изменение структуры таблиц, триггеров, добавление FK, PK, index и т.д. может вызвать сложности.
1. Организационное.
Девелоперы при изменении чего либо готовят script. Если ето изменение структуры таблицы то соответственно script с ALTER и т.д.
Данные скрипты отправляются DBA. DBA готовит upgrade script затем тестирует на тестовой базе и затем делает upgrade боевой базы.
Tаким образом вы будете иметь upgrade script для каждой версии базы. К тому же еше неплохо писать где-нибудь в саму базу номер текушей версии. Ето опять же можно добавлять в upgrade script.
2. Автоматическое.
http://www.adeptsql.com/
http://www.lockwoodtech.com/index_sqldiff.htm
http://www.red-gate.com/sql_comparison_ ... oolkit.htm
и т.д. Таких tool'oв очень много. Но в етом случае Вы не будете контролировать ситуацию, да и работу каждого из них надо сначала хорошенько проверить
3. Интересное
Написать синхронизацию самому, использовать скриптование и т.д.
Процесс давольно трудоемкий и не во всех случаях простой. Синхронизацию SP, view, UDF можно реализовать достаточно не сложно, а вот изменение структуры таблиц, триггеров, добавление FK, PK, index и т.д. может вызвать сложности.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
SkyWalker wrote:3. Интересное
Написать синхронизацию самому, использовать скриптование и т.д.
Процесс давольно трудоемкий и не во всех случаях простой. Синхронизацию SP, view, UDF можно реализовать достаточно не сложно, а вот изменение структуры таблиц, триггеров, добавление FK, PK, index и т.д. может вызвать сложности.
Я такое написал
Не могу не похвастаться
Самое сложное это когда и таблицу переименовали догадаться что это старый объект
А если в ней еще и колонкдновремено перимеовали то совсем сложно
Но я с этим справился
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 497
- Joined: 20 Aug 2001 09:01
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Dmitry67 wrote:Вообще это странно. Современные эе программисты не пишут блок схем. Но почемуто считается что в области баз надо обязательно рисоваь картинки
Exactly. Наверное, модели данных рисуют те, кто и для написания программ (даже несложных) использовали бы блок-схемы. Т.е. сами знаете кто.
Cheers
-
- Уже с Приветом
- Posts: 497
- Joined: 20 Aug 2001 09:01
tengiz wrote:Dmitry67 wrote:Вообще это странно. Современные эе программисты не пишут блок схем. Но почемуто считается что в области баз надо обязательно рисоваь картинки
Exactly. Наверное, модели данных рисуют те, кто и для написания программ (даже несложных) использовали бы блок-схемы. Т.е. сами знаете кто.
А мне кажется, что рисование модели ничего плохого о рисуещем как о проектировщике не говорит Тем более, что в общем случае он общается с людьми разного уровня от начальства, пользователей до ДБА и модели один из способов общения.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Dmitry67 wrote:Sabina, я наконец понял что у Вас хотят
Вы хотите реинжениринг, по старой и новой схеме сгенерить alter tables.
Рассказала я про ваш замечательный тул нашей strong backend programmer (которая ушла, но мы с ней как бы переписываемся), а она все равно настаивает на том, что тот скрипт, который мне дали писать нужен:
the purpose of the import/export is to be able to upload old data into a new schema.
Indudably, if the schema has changed in ways that some column data cannot
be loaded, you customize the differences as an upgrade, which is the usual procedure for schema upgrades, but the script should be able to load the data that has not changed.
короче,
Сабина
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
tengiz wrote:Dmitry67 wrote:Вообще это странно. Современные эе программисты не пишут блок схем. Но почемуто считается что в области баз надо обязательно рисоваь картинки
Exactly. Наверное, модели данных рисуют те, кто и для написания программ (даже несложных) использовали бы блок-схемы. Т.е. сами знаете кто.
А я рисую
И блок-схемы, и схемы баз данных и электрические и электронные и даже схему финансовых потоков однажды рисовал.
Сколько видел коллег, про тех кто, не рисуют схемы, часто невозможно понять, врубается ли он вообще в предмет, или говорит набор слов, близких к осмысленному.
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
Dmitry67 wrote:Я ее так представляю и помню
Предпочитаю скрипты
Вообще это странно
Современные эе программисты не пишут блок схем
Но почемуто считается что в области баз надо обязательно рисоваь картинки
Забавное наблюдение.
Я вот как раз представляю себе базу данных в виде "картинок" - мне так проще. Но я не датабазник, сталкиваюсь с этим только эпизодически, по необходимости.
А вот в софте действительно не выношу всяких там "диаграмм", "сущностей", и господ системных аналистов, рисующих с одухотворёнными физиономиями картинки в розе. Вообще эту ОО-теорию считаю какой-то диверсией, организованной марсианами. Их земной базой является штаб-квартира Rational, но они уже опутали своими нитями всю Землю, их агенты проникли практически в каждую команду системных архитекторов, и земную ИТ-индустрию ждёт неминуемая смерть, если только нам не удастся вовремя опомниться и освободить себя это этой порочной идеологии. Главной нашей опорой несомненно являются скромные ребята кодеры, такие как я, имунные к убаюкивающим словам вроде "UML", "entity", "object", etc.