Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение структур 2-х баз данных


salexn ©   (2005-02-24 13:29:00) 

Есть 2 базы данных в MSSQL. Нужно их сравнить ПО СТРУКТУРЕ и сделать скрипт для того, чтобы "выровнять" их. Может кто подскажет как или утилиту посоветует?


aus   (2005-02-26 14:46:00) [1]

Ольга   (25.02.05 17:08) [14]
а потом мужественно их преодолеваешь.


А почему не женственно? )))


Ольга   (2005-02-25 17:08:00) [2]

А у нас наоборот: разработчиков мало, куча баз...
Но это, конечно, никак нас не оправдывает.
Надо, надо все скриптовать. А то сначала создаешь себе проблемы, а потом мужественно их преодолеваешь.


Danilka   (2005-02-25 16:38:00) [3]

[12] Ольга   (25.02.05 13:39)
> Но, как подсказывает практика, трудноосуществимо, самодисциплины
> не хватает что ли.

У нас в конторе вполне осуществимо, т.к. разработчиков куча, в рабочую базу никто ничего не прокатывает - все скрипты отдают внедренцам, они проверяют, решена-ли задача, нигде ничего не вылезло, и затем только в рабочей прокатывают. :)
А для себя, дома, сначала ленился, потом, как отгреб, такую-же практику завел - любые изменения в базе только скриптами. :)


Ольга   (2005-02-25 13:39:00) [4]

[8]
Мне и в голову не приходило, чтобы это делать ручками. Естественно программно. С помощью этих запросов получаешь список отличий и диномически создаешь скрипты для обновления.
Правда, перед выполнением скрипта я все же прошу пользователя подтвердить намерение. Даже если таблиц 300 (не в каждой же были изменения) - это не утомительно.
[11]
Да, для убойных случаев это не подходит. Но в основном бывают случаи рядовые.

> Надо было изначально, любые изменения в структуре базы организовывать
> скриптами

Это правильно. Но, как подсказывает практика, трудноосуществимо, самодисциплины не хватает что ли.


Danilka   (2005-02-25 10:58:00) [5]

А работать-то будет? :)
Допустим, была какая-то таблица, в которую добавили поля, также эти поля проапдейтили откуда-то, для обеспечения нормальной работы.
Или, например, таблицу разделили на две, провели нормализацию, вообще убойный случай. Простым сравнением ты определишь, что появилось две новых таблицы и одна удалилась, что ты сделаешь, грохнешь ту одну со всеми данными и добавишь еще две пустые?

Надо было изначально, любые изменения в структуре базы организовывать скриптами, и сохранять эти скрипты, с комментариями: кто, когда поменял и зачем. Тогда и проблем-бы не было - собрать для любой старой скрипт на ее изменение до новой.


Desdechado   (2005-02-25 10:49:00) [6]

выгрузи метаданные в скрипт из каждой БД, найди разницу с помощью команды FC, из нее сотвори скрипт для "выравнивания"


salexn   (2005-02-25 10:31:00) [7]

>Ольга
Не проблема, если база не большая. а если 300 таблиц, как у меня. Ручками надоест однако :-)


salexn   (2005-02-25 10:28:00) [8]

>Ольга
Не проблема, если база не большая. а если 300 таблиц, как у меня. Ручками надоест однако :-)


Ольга   (2005-02-24 17:59:00) [9]

"Выравнить" базы по наличию таблиц, полей, процедур, функций - это не проблема. Нужно проанализировать системные таблицы:

Например:
@BaseETO - имя базы эталона
@BaseTEST - имя тестируемой базы

select * from '+ @BaseTEST+'..sysobjects obj1
where not exists( select * from '+@BaseETO+'..sysobjects obj2
where obj2.name=obj1.name) order by name

select obj1.name, col1.* from '+@BaseTEST+'..syscolumns col1
inner join '+@BaseTEST+'..sysobjects obj1 on col1.id=obj1.id where not exists(select * from '+@BaseETO+'..syscolumns col2
inner join '+@BaseETO+'..sysobjects obj2 on col2.id=obj2.id  
where obj2.name=obj1.name and col1.name=col2.name) order by obj1.name

А вот с внешними ключами и индексами - дело утомительное и неблагодарное.


Johnmen   (2005-02-24 14:09:00) [10]

>salexn   (24.02.05 13:49) [5]
>вместе с данными :-) круто!

А где в вопросе ты говорил про данные ? Что-то я не вижу... А ты ?

Создать нового, перелить данные, убить отстающего...:)


salexn   (2005-02-24 13:49:00) [11]

вместе с данными :-) круто!
>KSergey
Я конечно дико извеняюсь, но может у вас есть в наличие. Что-то не одна ссылка не работает. Если есть, то киньте на мыло
salexn@tut.by


Johnmen   (2005-02-24 13:46:00) [12]

>salexn  

Убить отстающего. А вместо него создать нового...:)


salexn   (2005-02-24 13:41:00) [13]

>Johnmen
базы ОДИНАКОВЫЕ по своей сути, так сказать от одной и той же программы. Но с течением времени БД изменялась. Необходимо догнать БД до той, которая теперь. Вот и все.


Johnmen   (2005-02-24 13:34:00) [14]

Забавно...
Вот если в одной есть индекс на поля F1 и F2 в к.-л. таблице, а во второй - на F2 и F3, то как предполагается "выравнивать" ?
:)))


KSergey   (2005-02-24 13:32:00) [15]

MS SQL Sync Toolkit


Наверх

Титульная страница Поиск, карта сайта Написать письмо