Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Привет!

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

На ум приходит CHECKSUM(), но сразу возникают следующие вопросы, будет ли это работать, если:

1) разные установки сервера, к примеру кодовая страница
2) разные установки системы, к примеру установки времени
3) разные версии SQL сервера

особенно беспокоят поля DATETIME и *CHAR*

Какое есть решение для этих условий?
25 апр 12, 17:32    [12470704]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Glory
Member

Откуда:
Сообщений: 104751
tas
Какое есть решение для этих условий?

Не изобретать велосипед, а настроить стандартную репликацию.
25 апр 12, 19:32    [12471289]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Как ее сделать, если:

1) Эти сервера очень далеко друг от друга и никак не связаны (данные уходят на отторгаемых носителях).
2) Серверов, которые используют данные первого, туева куча.
26 апр 12, 09:56    [12472582]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
tas,

1. log shipping
2. merge-репликация
26 апр 12, 10:14    [12472667]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
tas,

а вообще - явно недостаточно информации. Являются ли базы на серверах идентичными? Могут ли изменения вносится только на одном сервере или на нескольких? Каковы объемы данных? А то может вам репликация моментальных снимков более чем подойдет
26 апр 12, 10:17    [12472680]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Еще раз, что нужно сделать:

Есть трехуровневая организация, головной, региональный и территориальный офисы. Информобмен идет от головы в территорию. Т.е. головной имеет только свое, региональный - свое + головное, территориальный - все вместе.

На каждом уровне есть возможность вводить данные в определенную таблицу. Из интерфейса сделано так, что уровни могут только свои собственные данные вводить и изменять.

Для системы имеется модель угроз:

Администратор (злой) на месте может ручками залезть в базу и что-то поправить.

Для решения этой проблемы делается следующее:

C определенной периодичностью головной сервер рассылает запросы, всем региональным и территориальным серверам - "Целы ли мои данные". В свою очередь региональные сервера рассылают такие же запросы территориальным.

В качестве ответа было достаточно да|нет.

Сейчас проблема - как именно сделать этот запрос?

Сначала речь шла о сравнении контрольных сумм таблиц, но потом напоролись на траблы (я точно не знаю, но по моему, если таблица изначально создается CREATE то КС была одна, а если CREATE + UPDATE, то другая). Дополнительно встал вопрос возвращать те записи, которые были изменены, чтобы узнать интересы злого админа.

Теперь задача делать КС построчно. Соответственно встают вопросы см. первый пост...

В качестве ответа необходимо получить измененные данные.

Объем данных в таблице около миллиона строк по 20-50 Кбт на строку.
26 апр 12, 11:07    [12472976]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Так все-таки есть связь между серверами или нет?
26 апр 12, 11:19    [12473034]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Связи скорее нет. Запросы рассылаются вручную оператором. Способ достижения запросом адресата сильно разный, к примеру:

Связь есть, но не прямая (через промежуточный не MSSQL сервер), автоматизация на уровне файлообмена
Связи нет, с этом случае используется отторгаемые носители
26 апр 12, 12:25    [12473472]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Может стоит начать с того что проверять чтоб collation на всех базах одинаковой. Раз сказано что структура одинаковая, то она должна быть совсем одинаковой иначе намучаешься с преобразованиями.
Хорошо б пролоббировать вопрос о том чтоб и версии SQL везде были одинаковыми. Тогда не будет вставать вопрос с использованием datetime2 и т.п.
Вот и выходит две первых проверки: сверка версий SQL'ля, сверка структуры данных. Если это сошлось, то можно спокойно заниматься сверкой данных: CHECKSUM, просто суммы, остатки и пр.

Объем данных в таблице около миллиона строк по 20-50 Кбт на строку.

Ничё себе строчка. :) Или кбт это килобит?
26 апр 12, 12:29    [12473512]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Специльно для tas, 12471289

PS: Есть такие ди... люди, которые когда что-то не понимают, то они не задают вопросов, не говорят, что они что-то не поняли, они просто игнорируют, словно это не говорили. Притом не важно, предложение непонятно или одно слово (т.е. типа нет такого понятия как "ключевой элемент"). Естественно, что после они не говорят "не помню", они уверенно говорят "вы не говорили".
PPS: Таких много, очень много.
PPPS: Эти PS сказаны "в воздух" а не кому-то конкретно.
26 апр 12, 12:31    [12473523]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
ZOOKABAKODER
Объем данных в таблице около миллиона строк по 20-50 Кбт на строку.

Ничё себе строчка. :) Или кбт это килобит?


Килобайт - там есть пара полей, где бинарная информация хранится в base64.

К сожалению я не могу повлиять на сервера, их настройки и версии. Эти сервера уже работают, мало того - эти базы уже существуют. Все, что мне доступно, это управление в рамках одной таблицы. Можно на ее уровне выставить все, что можно, чтобы по максимуму нивелировать влияние внешних (система, сервер, база) настроек.

Mnior
Специльно для tas, 12471289



Не понял к чему этот оффтоп? Мне указали очевидное решения а я его категорически проигнорировал? Если знаете, как решить эту проблему, не гоняя 20 ГБт данных каждый раз, то лучше напишите здесь...
26 апр 12, 12:53    [12473669]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
tas
Объем данных в таблице около миллиона строк по 20-50 Кбт на строку.
20-50 Gb табличка.
Копия по всем регионам? или в головном ещё больше?

Обычно ответы такие - "ну да, знаем что косяк. Так получилось" или "Ласапед не мой".

А что для репликации кодировка сервера важна?
На сколько большая оперативная доступность серверов? Можно и выровнять этот бардак,
тихой сапой, не спеша ...
конфигурю сервера. ;)
26 апр 12, 13:03    [12473759]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
tas
ZOOKABAKODER
пропущено...

Ничё себе строчка. :) Или кбт это килобит?


Килобайт - там есть пара полей, где бинарная информация хранится в base64.

Клево, да, а можно ее еще в картинку превратить, а потом картинку опять в base64, и повторять пока размер посолиднее не наберется. Ведь тип binary явно не тру.

tas
К сожалению я не могу повлиять на сервера, их настройки и версии. Эти сервера уже работают, мало того - эти базы уже существуют. Все, что мне доступно, это управление в рамках одной таблицы. Можно на ее уровне выставить все, что можно, чтобы по максимуму нивелировать влияние внешних (система, сервер, база) настроек.

Mnior
Специльно для tas, 12471289



Не понял к чему этот оффтоп? Мне указали очевидное решения а я его категорически проигнорировал? Если знаете, как решить эту проблему, не гоняя 20 ГБт данных каждый раз, то лучше напишите здесь...

Ага, причем указали два раза. Но если вам нравится изобретать велосипеды с квадратными колесами для лазанья по деревьям - удачи, зачем же душить прекрасные порывы.
26 апр 12, 13:04    [12473764]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
tas
гоняя 20 ГБт данных каждый раз
Это с какого бодуна?
26 апр 12, 13:06    [12473778]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
tas, ссори, немного невнимателен.
Но продолжаем про репликацию.
26 апр 12, 13:18    [12473883]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Mnior
tas
Объем данных в таблице около миллиона строк по 20-50 Кбт на строку.
20-50 Gb табличка.
1) Копия по всем регионам? или в головном ещё больше?

Обычно ответы такие - "ну да, знаем что косяк. Так получилось" или "Ласапед не мой".

2) На сколько большая оперативная доступность серверов?


1) Копия от центра вниз, серверов получателей около 500
В головном вводится 95% всей информации. В регионах 5%. На территориях крохи.
База самая большая в территориальных серверах, ибо там консолидированная информация.

2) Оперативной доступности из центра вниз нет никакой. Там свои админы, свои правила, мне неизвестные. Информобмен возможет только на уровне выгрузки и загрузки. Поэтому и появился "злой админ" в модели угроз.

iljy
tas
пропущено...
Килобайт - там есть пара полей, где бинарная информация хранится в base64.

Клево, да, а можно ее еще в картинку превратить, а потом картинку опять в base64, и повторять пока размер посолиднее не наберется. Ведь тип binary явно не тру.


Это типа мозговой штурм в вашем исполнении... Если сказать по делу нечего, может осчастливите всех своим отсутствием...
26 апр 12, 13:23    [12473912]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
tas,

Связи между серверами нет -- стандартная репликация в пролете. Если площадки, где сервера расположены, имеют доступ в интернет, то связь можно организовать.

Если ответы на ваши запросы формирует тот же самый злой админ, то вся ваша схема бесполезна. От админа вообще нет защиты.
26 апр 12, 13:26    [12473944]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
tas
Mnior
пропущено...
20-50 Gb табличка.
1) Копия по всем регионам? или в головном ещё больше?

Обычно ответы такие - "ну да, знаем что косяк. Так получилось" или "Ласапед не мой".

2) На сколько большая оперативная доступность серверов?


1) Копия от центра вниз, серверов получателей около 500
В головном вводится 95% всей информации. В регионах 5%. На территориях крохи.
База самая большая в территориальных серверах, ибо там консолидированная информация.

2) Оперативной доступности из центра вниз нет никакой. Там свои админы, свои правила, мне неизвестные. Информобмен возможет только на уровне выгрузки и загрузки. Поэтому и появился "злой админ" в модели угроз.

Копия "от центра вниз" - под это идеально ложиться модель log shipping + database snapshot. И злому админу будет гораздо сложнее повлиять на данные при этом. А если админ рельно злой и грамотный, то никакие его изменения вы без доступа к серверам не выявите.

tas

iljy
пропущено...

Клево, да, а можно ее еще в картинку превратить, а потом картинку опять в base64, и повторять пока размер посолиднее не наберется. Ведь тип binary явно не тру.


Это типа мозговой штурм в вашем исполнении... Если сказать по делу нечего, может осчастливите всех своим отсутствием...

Нет, это всего лишь закономерное развитие ваших идей. А, поскольку ваше личное счастье отнюдь не является моим жизненным приориетом, уж придется вам потерпеть. По делу же я вам сказал сразу.
26 апр 12, 13:32    [12473993]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
invm
tas,

Связи между серверами нет -- стандартная репликация в пролете. Если площадки, где сервера расположены, имеют доступ в интернет, то связь можно организовать.

Если ответы на ваши запросы формирует тот же самый злой админ, то вся ваша схема бесполезна. От админа вообще нет защиты.


Есть! Запросы идут не открытые, они шифруются железом и подписывается ЭЦП ответственного лица. Над каждым сервером есть так называемая точка присутствия, куда доступ админу заказан. В общем все, что связано с окружением проработано и работает, осталось выбрать самый оптимальный способ проверки неприкасаемости данных.
26 апр 12, 13:33    [12474005]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
tas
invm
tas,

Связи между серверами нет -- стандартная репликация в пролете. Если площадки, где сервера расположены, имеют доступ в интернет, то связь можно организовать.

Если ответы на ваши запросы формирует тот же самый злой админ, то вся ваша схема бесполезна. От админа вообще нет защиты.


Есть! Запросы идут не открытые, они шифруются железом и подписывается ЭЦП ответственного лица. Над каждым сервером есть так называемая точка присутствия, куда доступ админу заказан. В общем все, что связано с окружением проработано и работает, осталось выбрать самый оптимальный способ проверки неприкасаемости данных.

Вы серьезно считаете, что это вас хоть от чего-то защитит? Вот вам в лоб обход вашей суперсистемы: для ваших проверок храниться снимок (либо копия) чистой базы, а пользователи работают с другой базой (возможно даже на другом экземпляре скуля). И никогда вы этого не узнаете.
26 апр 12, 13:41    [12474063]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
tas, вас не поймешь: то связь есть, то связи нет. Или всегда есть связь только с непосредственно нижележащим уровнем?
Тогда смотрите в сторону переиздающих подписчиков -- Republishing Data
26 апр 12, 13:44    [12474088]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
Связи между серверами нет -- стандартная репликация в пролете.
Это как это нет связи?! Это же ключевое, вопрос бы не возник.
tas
Есть трехуровневая организация, головной, региональный и территориальный офисы. Информобмен идет от головы в территорию.
Для репликации и не нужно прямой связи, хоть по почте, хоть дискетками.

Репликация транзакций
26 апр 12, 13:47    [12474101]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
[quot iljy]
tas
пропущено...
Вы серьезно считаете, что это вас хоть от чего-то защитит? Вот вам в лоб обход вашей суперсистемы: для ваших проверок храниться снимок (либо копия) чистой базы, а пользователи работают с другой базой (возможно даже на другом экземпляре скуля). И никогда вы этого не узнаете.


За это админа живым где-нить прикопают :)

Если серьезно, не хочется скатываться на обсуждение модели угроз, ближе к теме, плиз ...
26 апр 12, 13:53    [12474151]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
tas
Member

Откуда: Москва
Сообщений: 95
Mnior
Для репликации и не нужно прямой связи, хоть по почте, хоть дискетками.

Репликация транзакций


Спасибо!

Сейчас смотрю, может ли мне помочь вот это: http://msdn.microsoft.com/ru-ru/library/bb933994%28SQL.105%29.aspx
26 апр 12, 13:56    [12474176]     Ответить | Цитировать Сообщить модератору
 Re: Как отследить изменения данных на разных серверах?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
tas
Какое есть решение для этих условий?
Возможно, подойдёт функция BINARY_CHECKSUM

Но вообще CHECKSUM для таких целей применять не очень правильно, т.к. она может возвращать одинаковые значения для разных данных.

Лучьше использовать HashBytes, хотя для него и придётся преобразовывать данные явно в массив байтов. Зато будет гарантия правильного преобразвания.

Или вообще считать контрольную сумму на клиенте, или отдельной программой.

ЗЫ. Не слушайте никого, стандартные репликации в таких условиях неприменимы :-)
26 апр 12, 14:08    [12474260]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить