Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
Всем Привет!

мигрирую приложение с MSSQL на ORACLE

для миграции данных использую
MSSQL bcp - для выгрузки данных из MSSQL в файлы
ORACLE SQL*Loader для загрузки данных из файлов в базу ORACLE

нужно подтвердить что данные перенесены успешно
т.е. данные идентичны в базе MSSQL и ORACLE

есть мысли делать так:
для каждой таблицы проверять
1) количество строк
2) контрольную сумму для каждой колонки

потом сравнивать для каждой таблицы вычисленные значения

есть нюансы:
как вычислять контрольную сумму для text, image, datetime в MSSQL?

не хотелось бы изобретать велосипед

может есть стандартные методы сравнения?
19 июл 05, 09:34    [1714838]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
ни у кого никаких соображений?
19 июл 05, 11:26    [1715345]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, к примеру, слинковать их, а потом select да с иннер джоином по всем колонкам...
19 июл 05, 11:55    [1715537]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
кого куда слинковать?

одна база на MSSQL, вторая на ORACLE

между ними сотни км и все секурно

доступа у одной базы к другой нет
19 июл 05, 12:40    [1715772]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, тогда напишите рхп, которая будет считать каую-нибудь контрольную сумму (на основе какого-нибудь циклического кода, к примеру Рида-Соломона) и посчитать потом контрольную сумму по этим суммам. Последние суммы сравнить.
19 июл 05, 13:06    [1715929]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
В виду различий между СУБД (к примеру, в Oracle есть понятие вложенных таблиц), такая задача вряд ли имеет общее решение. Поэтому имеет смысл написать свой код для проверки. Скажем, можно было бы сделать экспорт “простых” полей в CSV файлы из обеих СУБД и сравнить полученные файлы. Для записей типа CLOB/BLOB можно было бы сделать экспорт в двоичные файлы и сравнивать их… Разумеется, придётся поработать…
19 июл 05, 14:34    [1716417]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
В виду различий между СУБД (к примеру, в Oracle есть понятие вложенных таблиц), такая задача вряд ли имеет общее решение.


Конечно СУБД различаются. Нужна проверка правильности переноса данных. Структура - один в один. На кой использовать в Оракле "вложенные таблицы" если в MSSQL их не было?

Поэтому имеет смысл написать свой код для проверки.


сижу и пишу :)

Скажем, можно было бы сделать экспорт “простых” полей в CSV файлы из обеих СУБД и сравнить полученные файлы.


Зачем сравнивать результаты импорта/экспорта (которые могут отличаться от данных в базе вследствие возможных преобразований при импорте/экспорте),
когда можно сравнить уже сами данные в базах?

Для записей типа CLOB/BLOB можно было бы сделать экспорт в двоичные файлы и сравнивать их… Разумеется, придётся поработать…


вместо экспорта - пробежаться по всему полю и посчитать сумму юникодовских кодов символов (CLOB) или сумму кодов байтов (BLOB)

получить контрольную сумму и сравнить


произошел затык в другом - в MSSQL не найду функций работы с ntext
т.е. - пробежать по нему и просуммировать unicode() от каждого
как написано выше

Похоже не работает MSSQL с этими полями !?!
Только хранит
19 июл 05, 14:54    [1716517]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SUBSTRING
19 июл 05, 14:56    [1716524]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
спасибо про SUBSTRING
19 июл 05, 14:58    [1716542]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Ionah
вместо экспорта - пробежаться по всему полю и посчитать сумму юникодовских кодов символов (CLOB) или сумму кодов байтов (BLOB)


Да? И что это будет за контрольная сумма, позвольте осведомиться? Длиной 2 байта?

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

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
19 июл 05, 17:04    [1717249]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
BusyMan
Member

Откуда: Москва
Сообщений: 4927
1) ВОПРОС К ЗНАТОКАМ:
SELECT top 2 BINARY_CHECKSUM (*) FROM Documents
При расчете BINARY_CHECKSUM поля типа ТЕКСТ, ИМАДЖ и т.п. берутся во внимание???

2) https://www.sql.ru/forum/actualthread.aspx?tid=66946&hl=%ea%ee%ed%f2%f0%ee%eb%fc%ed%f3%fe+%f1%f3%ec%ec%f3+text#479038

P.S. Можно просто Бизик admin@busyman.ru ICQ# 131833549
Картинка с другого сайта.
19 июл 05, 18:37    [1717757]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
2BusyMan

1) Судя по всему нет. Так как SELECT BINARY_CHECKSUM (*) FROM MyTable для случая MyTable с полем типа image и без него вернул один и тот же результат.

2) На BINARY_CHECKSUM полагаться нельзя, как ясно из постов.
19 июл 05, 19:01    [1717876]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
jimmers

Да? И что это будет за контрольная сумма, позвольте осведомиться? Длиной 2 байта?


это будет decimal(38) который будет содержать сумму всех символов или байтов
20 июл 05, 09:11    [1718755]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Ionah
jimmers

Да? И что это будет за контрольная сумма, позвольте осведомиться? Длиной 2 байта?


это будет decimal(38) который будет содержать сумму всех символов или байтов


Ну и что такая сумма даёт? Если при перекачке в Oracle два соседних байта в поле BLOB поменялись местами такая "проверка" бесполезна.
20 июл 05, 10:31    [1719038]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
----------------
Guest
c MS SQL на ORACLE написал

тепер напиши с ORACLE на MS SQL

потом в MS SQL сравниш - можно даже позаписьно, а не контрольными суммами
20 июл 05, 10:39    [1719082]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
jimmers
Ну и что такая сумма даёт? Если при перекачке в Oracle два соседних байта в поле BLOB поменялись местами такая "проверка" бесполезна.


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

предложите свой алгоритм вычисления контрольной суммы с учетом порядка?
20 июл 05, 10:56    [1719187]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в базах MSSQL и ORACLE  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
для пущей уверенности в контрольной сумме можно
умножать код символа (или байт) на порядковый номер или весовой коэффициент
и прибавлять размер поля
20 июл 05, 11:26    [1719409]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить