Сравнение баз данных
#1
Отправлено 24 мая 2007 - 11:57
Подскажи, пожалуйста, существующие инструменты (желательно free) для сравнения записей в нескольких базах данных.
Например, в одной базе 20000 записей, в другой 30000 (вторая база содержит в т.ч. и записи из первой - т.е. базы разсинхронизированы). Вот и хочется проверить какая запись в базе1 соответствует записи в базе2, либо в базе1 она есть, а во второй вообще нет. Мэппинг.
Заранее большое спасибо за содействие
#3
Отправлено 24 мая 2007 - 12:39
Если Oracle, то проще всего построить DB-link с одной на другую и выполнить приблизительно такой запрос:
select * from table
minus
select * from table@remote_db
Конкретную реализацию в других базах не подскажу, но то что такой механизм должен быть, это точно.
PS Можно еще просто выгрузить содержимое таблиц в плоский файл и сравнить их любым доступным способом.
руководитель отдела тестирования,
Объединенная компания «Афиши» и «Рамблера»
http://www.rambler.ru/jobs/
#5
Отправлено 24 мая 2007 - 16:20
#7
Отправлено 25 мая 2007 - 07:17
Что за дифф, простите?
Имеется в виду юниксовая команда diff. В windows аналог называется fc (file compare). Имеются также GUI-шные реализации, например в Windows Commander и в составе, я думаю всех, систем контроля версий.
Очень интересуют тулы, инструменты для этой реализации
Откуда такой интерес к тулам? Вы с их покупки свою выгоду имеете? ;)
Посмотрите про OPENROWSET в документации MSSQL. Может всё-таки понравится?
#8
Отправлено 25 мая 2007 - 07:46
Имеется в виду юниксовая команда diff. В windows аналог называется fc (file compare). Имеются также GUI-шные реализации, например в Windows Commander и в составе, я думаю всех, систем контроля версий.
Откуда такой интерес к тулам? Вы с их покупки свою выгоду имеете? ;)
Посмотрите про OPENROWSET в документации MSSQL. Может всё-таки понравится?
Спасибо!
Напомню, что есть необходимость в сравнение следующих:
1. MS SQL Server 2005-2007
2. Oracle 8.1.7 - 9i
3. Bitrieve
А от покупки тулов материальной выгоды не имею) и сейчас меня интересуют free-tools.
#9
Отправлено 25 мая 2007 - 10:11
Если нужно фри тулз, делаете так:А от покупки тулов материальной выгоды не имею) и сейчас меня интересуют free-tools.
1. Любимый язык программирования (под Windows многим нравится VBScript, попробуйте)
2. Библиотеки доступа к нужной БД (чаще всего идут с клиентом соответствующей БД)
3. Любая реализация diff/compare/...
4. Используя (1) и (2), пишете скрипт, выгружающий базу в текстовый файл
5. Используя (3), сравниваете два дампа.
#10
Отправлено 25 мая 2007 - 10:32
На первый взгляд получаются так
Вариант 1.
Как уже писали раньше, можно выгрузить содержимое таблицы из каждой СУБД в отдельный файл. Далее натравить на эти файлы diff и увидеть чем они отличаются. Сделать одинаковые по структуре файлы средствами заявленных вами СУБД, врядли получится. Поэтому, чтобы получить эти файлы, вам придется написать самим простенького клиента к каждой СУБД. Этот клиент обеспечит одинаковый формат файла на выходе.
Вариант можно использовать, если на практике таблицы "не сильно" рассинхронизированы. Иначе, что потом делать с диффом в XX мегабайт?
Вариант 2.
Завести отдельную БД на оракле или MS SQL сервере. В этой базе данных создать 3 одинаковых по структуре таблицы. Написать клиента, который перельет данные в эти таблицы из Btrieve, оракла и MSSQL. Далее средствами того сервера, на который вы слили данные, сравниваете содержимое таблиц.
Перелив данных может занять много времени, надо посмотреть, возможно нужно сравнивать не все поля таблицы, тогда их и переливать не нужно. Вобщем, тут есть простор для оптимизации.
Попутный вопрос, а что дальше? Достаточно зафиксировать разницу или нужно синхронизировать таблицы?
#11
Отправлено 28 мая 2007 - 05:47
СУБД слишком разные, значит средствами одной из них задачу не решить.
На первый взгляд получаются так
Вариант 1.
Как уже писали раньше, можно выгрузить содержимое таблицы из каждой СУБД в отдельный файл. Далее натравить на эти файлы diff и увидеть чем они отличаются. Сделать одинаковые по структуре файлы средствами заявленных вами СУБД, врядли получится. Поэтому, чтобы получить эти файлы, вам придется написать самим простенького клиента к каждой СУБД. Этот клиент обеспечит одинаковый формат файла на выходе.
Вариант можно использовать, если на практике таблицы "не сильно" рассинхронизированы. Иначе, что потом делать с диффом в XX мегабайт?
Вариант 2.
Завести отдельную БД на оракле или MS SQL сервере. В этой базе данных создать 3 одинаковых по структуре таблицы. Написать клиента, который перельет данные в эти таблицы из Btrieve, оракла и MSSQL. Далее средствами того сервера, на который вы слили данные, сравниваете содержимое таблиц.
Перелив данных может занять много времени, надо посмотреть, возможно нужно сравнивать не все поля таблицы, тогда их и переливать не нужно. Вобщем, тут есть простор для оптимизации.
Попутный вопрос, а что дальше? Достаточно зафиксировать разницу или нужно синхронизировать таблицы?
Спасибо за помощь! Основная задача - создание единой базы.
#12
Отправлено 28 мая 2007 - 05:48
Если нужно фри тулз, делаете так:А от покупки тулов материальной выгоды не имею) и сейчас меня интересуют free-tools.
1. Любимый язык программирования (под Windows многим нравится VBScript, попробуйте)
2. Библиотеки доступа к нужной БД (чаще всего идут с клиентом соответствующей БД)
3. Любая реализация diff/compare/...
4. Используя (1) и (2), пишете скрипт, выгружающий базу в текстовый файл
5. Используя (3), сравниваете два дампа.
Спасибо!
#14
Отправлено 29 мая 2007 - 16:08
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных