Перейти к содержимому

Фотография

Сравнение баз данных


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 24 мая 2007 - 11:57

Добрый день!

Подскажи, пожалуйста, существующие инструменты (желательно free) для сравнения записей в нескольких базах данных.

Например, в одной базе 20000 записей, в другой 30000 (вторая база содержит в т.ч. и записи из первой - т.е. базы разсинхронизированы). Вот и хочется проверить какая запись в базе1 соответствует записи в базе2, либо в базе1 она есть, а во второй вообще нет. Мэппинг.

Заранее большое спасибо за содействие
  • 0

#2 a66at

a66at

    Постоянный участник

  • Members
  • PipPipPip
  • 184 сообщений
  • ФИО:Victor Ichalov

Отправлено 24 мая 2007 - 12:39

для сравнения записей в нескольких базах данных.

Просмотр сообщения

А что за СУБД используются? FULL OUTER JOIN методом HASH через database link или linked server не подходит?
  • 0

#3 BaAbaKa

BaAbaKa

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • ФИО:Андрей Кузьмичев
  • Город:Россия, Москва

Отправлено 24 мая 2007 - 12:39

Ты бы хотя бы написал какая база...

Если Oracle, то проще всего построить DB-link с одной на другую и выполнить приблизительно такой запрос:
select * from table
minus
select * from table@remote_db

Конкретную реализацию в других базах не подскажу, но то что такой механизм должен быть, это точно.

PS Можно еще просто выгрузить содержимое таблиц в плоский файл и сравнить их любым доступным способом.
  • 0
Кузьмичев Андрей,
руководитель отдела тестирования,
Объединенная компания «Афиши» и «Рамблера»
http://www.rambler.ru/jobs/

#4 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 24 мая 2007 - 14:31

для сравнения записей в нескольких базах данных.

Просмотр сообщения

А что за СУБД используются? FULL OUTER JOIN методом HASH через database link или linked server не подходит?

Просмотр сообщения


1. MS SQL Server 2005-2007
2. Oracle 8.1.7 - 9i
3. Bitrieve
  • 0

#5 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 24 мая 2007 - 16:20

... ~20к-30к записей ? тогда ИМХО проще посортировать по ключу и в файлы. а потом натравить дифф.
  • 0

#6 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 25 мая 2007 - 06:40

... ~20к-30к записей ? тогда ИМХО проще посортировать по ключу и в файлы. а потом натравить дифф.

Просмотр сообщения


Данное количество записей было указано для примера. На самом деле их около 600 000. Что за дифф, простите?

Очень интересуют тулы, инструменты для этой реализации
  • 0

#7 a66at

a66at

    Постоянный участник

  • Members
  • PipPipPip
  • 184 сообщений
  • ФИО:Victor Ichalov

Отправлено 25 мая 2007 - 07:17

Что за дифф, простите?

Просмотр сообщения


Имеется в виду юниксовая команда diff. В windows аналог называется fc (file compare). Имеются также GUI-шные реализации, например в Windows Commander и в составе, я думаю всех, систем контроля версий.

Очень интересуют тулы, инструменты для этой реализации

Просмотр сообщения


Откуда такой интерес к тулам? Вы с их покупки свою выгоду имеете? ;)
Посмотрите про OPENROWSET в документации MSSQL. Может всё-таки понравится?
  • 0

#8 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 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.
  • 0

#9 rlabs

rlabs

    Специалист

  • Members
  • PipPipPipPipPip
  • 660 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 25 мая 2007 - 10:11

А от покупки тулов материальной выгоды не имею) и сейчас меня интересуют free-tools.

Просмотр сообщения

Если нужно фри тулз, делаете так:
1. Любимый язык программирования (под Windows многим нравится VBScript, попробуйте)
2. Библиотеки доступа к нужной БД (чаще всего идут с клиентом соответствующей БД)
3. Любая реализация diff/compare/...
4. Используя (1) и (2), пишете скрипт, выгружающий базу в текстовый файл
5. Используя (3), сравниваете два дампа.
  • 0

#10 ichthys

ichthys

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Рыбаков Алексей

Отправлено 25 мая 2007 - 10:32

СУБД слишком разные, значит средствами одной из них задачу не решить.
На первый взгляд получаются так
Вариант 1.
Как уже писали раньше, можно выгрузить содержимое таблицы из каждой СУБД в отдельный файл. Далее натравить на эти файлы diff и увидеть чем они отличаются. Сделать одинаковые по структуре файлы средствами заявленных вами СУБД, врядли получится. Поэтому, чтобы получить эти файлы, вам придется написать самим простенького клиента к каждой СУБД. Этот клиент обеспечит одинаковый формат файла на выходе.
Вариант можно использовать, если на практике таблицы "не сильно" рассинхронизированы. Иначе, что потом делать с диффом в XX мегабайт?

Вариант 2.
Завести отдельную БД на оракле или MS SQL сервере. В этой базе данных создать 3 одинаковых по структуре таблицы. Написать клиента, который перельет данные в эти таблицы из Btrieve, оракла и MSSQL. Далее средствами того сервера, на который вы слили данные, сравниваете содержимое таблиц.
Перелив данных может занять много времени, надо посмотреть, возможно нужно сравнивать не все поля таблицы, тогда их и переливать не нужно. Вобщем, тут есть простор для оптимизации.

Попутный вопрос, а что дальше? Достаточно зафиксировать разницу или нужно синхронизировать таблицы?
  • 0

#11 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 28 мая 2007 - 05:47

СУБД слишком разные, значит средствами одной из них задачу не решить.
На первый взгляд получаются так
Вариант 1.
Как уже писали раньше, можно выгрузить содержимое таблицы из каждой СУБД в отдельный файл. Далее натравить на эти файлы diff и увидеть чем они отличаются. Сделать одинаковые по структуре файлы средствами заявленных вами СУБД, врядли получится. Поэтому, чтобы получить эти файлы, вам придется написать самим простенького клиента к каждой СУБД. Этот клиент  обеспечит одинаковый формат файла на выходе.
Вариант можно использовать, если на практике таблицы "не сильно" рассинхронизированы. Иначе, что потом делать с диффом в XX мегабайт?

Вариант 2.
Завести отдельную БД на оракле или MS SQL сервере. В этой базе данных создать 3 одинаковых по структуре таблицы. Написать клиента, который перельет данные в эти таблицы из Btrieve, оракла и MSSQL. Далее средствами того сервера, на который вы слили данные, сравниваете содержимое таблиц.
Перелив данных может занять много времени, надо посмотреть, возможно нужно сравнивать не все поля таблицы, тогда  их и переливать не нужно. Вобщем, тут есть простор для оптимизации.

Попутный вопрос, а что дальше? Достаточно зафиксировать разницу или нужно синхронизировать таблицы?

Просмотр сообщения


Спасибо за помощь! Основная задача - создание единой базы.
  • 0

#12 Gismo

Gismo

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Алексей Ходыкин

Отправлено 28 мая 2007 - 05:48

А от покупки тулов материальной выгоды не имею) и сейчас меня интересуют free-tools.

Просмотр сообщения

Если нужно фри тулз, делаете так:
1. Любимый язык программирования (под Windows многим нравится VBScript, попробуйте)
2. Библиотеки доступа к нужной БД (чаще всего идут с клиентом соответствующей БД)
3. Любая реализация diff/compare/...
4. Используя (1) и (2), пишете скрипт, выгружающий базу в текстовый файл
5. Используя (3), сравниваете два дампа.

Просмотр сообщения


Спасибо!
  • 0

#13 a66at

a66at

    Постоянный участник

  • Members
  • PipPipPip
  • 184 сообщений
  • ФИО:Victor Ichalov

Отправлено 28 мая 2007 - 06:03

СУБД слишком разные, значит средствами одной из них задачу не решить.

Просмотр сообщения

Ну вообще-то OLE DB провайдеры для всех указанных БД, насколько я понимаю есть. Соответственно, можно иметь доступ к их таблицам из MSSQL через linked server или OPENROWSET.
  • 0

#14 Bishop_

Bishop_

    Новый участник

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Дмитрий


Отправлено 29 мая 2007 - 16:08

Привет. Не понимаю зачем все это выгружать в файлы?! Не проще ли сравнивать все это напрямую? Подконектиться к одной базе, к другой, сделать запрос по первой таблице в одну и вторую базу и сравнивать напрямую. Результат сравнения записать в файл. Сравнение делается как на неправильные значения, так и на количевство записей. Я такое делал, на java писал, если умеете пользоваться java, могу помочь.
  • 0
<span style='font-size:8pt;line-height:100%'>Luxoft UA</span>


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных