Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Ondayl Member Откуда: Сообщений: 221 |
Доброго времени суток. Столкнулся с таким вопросом: Есть две базы, размер из примерно одинаковый 300 гб (вторая скорее всего сжата). Надо определить одинаковые ли в них данные или нет. В голову приходит только посчитать md5, но мне кажется это будет долго для таких объемов. Или кроме как подсчетом количества строк в таблице больше никак не узнаешь ? Заранее спасибо. |
31 окт 16, 11:21 [19840667] Ответить | Цитировать Сообщить модератору |
buser Member Откуда: Санкт-Петербург Сообщений: 4537 |
И это тоже не гарантия... просто если количество разное, то контент можно не сравнивать... |
||
31 окт 16, 11:38 [19840765] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
buser, контент так он так скажем, "однородный". Т.е даже не сразу удастся понять одинаково или нет. |
31 окт 16, 11:41 [19840788] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
Ondayl, а структура одинаковая или её тоже надо сравнивать? |
31 окт 16, 11:47 [19840833] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
Alexander Us, структура точно одинаковая. Можно сравнить каким то дб форджем ? |
31 окт 16, 11:48 [19840840] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
Ondayl, Базы на одном сервере или хотя бы на прилинкованном сервере? Что вы имеете ввиду под "дб форджем"? |
31 окт 16, 12:05 [19840972] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
Ondayl, Если базы на одном сервере или хотя бы на прилинкованном сервере: 1) сравните по количеству строк. Если разное, то и данные отличаются 2) сравните толко по primary key. Если разные, то и данные отличаются 3) сравните данные: - посчитать md5 не такой уж плохой вариант - или используйте сторонние тулы, их много (тут не могу посоветовать, никогда не использовал сам) - или используйте потаблично прямое сравнение с помощью процедуры приведённой ниже, но 300GB разом она не потянет :
|
|
31 окт 16, 12:33 [19841197] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Да ладно! Не учите человека плохому! После этого "Есть две базы, размер их примерно одинаковый 300 гб (вторая скорее всего сжата). " вы считаете, что у них сойдутся контрольные суммы??? |
||
31 окт 16, 12:44 [19841280] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
SQL2008, Конечно же к фалам это тут непименимо. Я должен был подробнее обЪяснить что имею ввиду: считать MD5 для каждой таблицы - вначале построчно, затем общую. |
31 окт 16, 12:51 [19841309] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||
31 окт 16, 13:05 [19841400] Ответить | Цитировать Сообщить модератору |
buser Member Откуда: Санкт-Петербург Сообщений: 4537 |
|
||
31 окт 16, 13:10 [19841437] Ответить | Цитировать Сообщить модератору |
vanezy Member Откуда: Ekaterinburg->Moscow->Frankfurt Сообщений: 122 |
Ondayl, если структура одинаковая и всё таки будете потаблично сравнивать вручную можно так: select * from tbl1 except select * from tbl2 -- то что есть только в первой табличке select * from tbl2 except select * from tbl1 -- то что есть только во второй табличке но тут тоже конечно не всё так просто, если например есть какие то особенные типы данных, например real или бинарные ... |
31 окт 16, 13:29 [19841561] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
Вобще то я привёл процедуру которой сам сравниваю данные. Плюсы: бесплатно, сравнение прямо на сервере. Она конечно не потянет разом огромную таблицу, но можно для начала сравнить ключи, и толко если они одинаковы, кусками сравнивать сами данные. |
31 окт 16, 13:32 [19841587] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
К сожалению, базы на разных серверах. Ладно, для начала сверю построчно, они скорее всего окажутся одинаковыми. Спасибо за советы. А вот подскажите следующее: Я вот по USB 3.0 скопировал БД на другой компьютер. Или по SMB. Как проверить что результирующая копия рабочая и без ошибок ? |
1 ноя 16, 08:12 [19844392] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
DBCC CHECKDB |
||
1 ноя 16, 09:59 [19844643] Ответить | Цитировать Сообщить модератору |
Alexander Us Member Откуда: Сообщений: 1153 |
тогда соедините сервера с помощю linked server (это несколько медленне) или восстановите из бэкапа базу второго сервера на первом или смотрите в сторону тулов для сравнения баз/таблиц тут некоторые описаны. вроде даже бесплатная версия visual studio 2015 может сравнивать. |
||
1 ноя 16, 10:22 [19844742] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
SQL2008, т.е там куда я ее перекопировал, должен быть установлен SLQ Server и при том не экспресс ? Другого способа нет ? |
1 ноя 16, 11:55 [19845321] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
*SQL |
1 ноя 16, 11:56 [19845327] Ответить | Цитировать Сообщить модератору |
ппп-пп
Guest |
Ondayl, Вы бы для начала просто сравнили количество строк в таблицах. Ну если найдете различия - то базы точно разные. Волшебой кнопки Вам никто не придумает. |
1 ноя 16, 11:58 [19845342] Ответить | Цитировать Сообщить модератору |
Ondayl Member Откуда: Сообщений: 221 |
ппп-пп, в смысле для начала ? Копирование и сравнение это разные операции. Или я Вас не понял. |
1 ноя 16, 12:56 [19845707] Ответить | Цитировать Сообщить модератору |
ппп-пп
Guest |
Пишите запрос, который выгружает количество строк в каждой таблице. Формируете текстовый файлик с результатами по каждой БД и сравниваете потом (да хоть в Excel). Или я не совсем понимаю что вам надо. |
||
1 ноя 16, 14:22 [19846357] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
можно сразу так SELECT @@ServerName AS Server , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(p.object_id) AS SchemaName , OBJECT_NAME(p.object_id) AS TableName , i.Type_Desc , i.Name AS IndexUsedForCounts , SUM(p.Rows) AS Rows FROM sys.partitions p JOIN sys.indexes i ON i.object_id = p.object_id AND i.index_id = p.index_id WHERE i.type_desc IN ( 'CLUSTERED', 'HEAP' ) -- This is key (1 index per table) AND OBJECT_SCHEMA_NAME(p.object_id) <> 'sys' GROUP BY p.object_id , i.type_desc , i.Name ORDER BY SchemaName , TableName; |
||||
1 ноя 16, 14:28 [19846410] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |