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

Откуда: Lithuania
Сообщений: 7007
Есть две одинаковые по структуре большие таблицы с большим количеством полей. В первой некоторые значения могут быть изменены, есть ли способ как эти изменения наиболее оптимально внести во вторую?
14 окт 13, 18:38    [14969018]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
способов много...всё зависит от версии и редакций SQL Server. Где расположены таблицы? На одном сервере? Должны ли быть доступны данные во второй таблице, какие требования к задержке синхронизации и т.д.
14 окт 13, 21:33    [14969611]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
kill_zdm
Member

Откуда:
Сообщений: 1406
Knyazev Alexey
способов много...всё зависит от версии и редакций SQL Server. Где расположены таблицы? На одном сервере? Должны ли быть доступны данные во второй таблице, какие требования к задержке синхронизации и т.д.

А тема кстати очень интересная (автор, извините пожалуйста за вмешательство)

А расскажите Алексей о Ваших наблюдениях?

Анализируемая БД средствами движка СУБД отработает быстрее чем чистый бэкап/ресто? (Естественно, если мы говорим об односторонней синхронизации)
14 окт 13, 21:53    [14969688]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
версии и редакций SQL Server.
SQL 2005 Pro (точнее сказать сейчас не могу, в любом случае sp если и нет но надо - можно накатить.

Где расположены таблицы?
Хрен их знает, в каких-то файлах в секондари гроуп (а может и праймари)....

На одном сервере?
База1 и База2 на одном, База3 на втором. Изменения вносятся только в База1. Синхронизацию надо сделать между первой и второй базой.

Должны ли быть доступны данные во второй таблице
Да, отсюда они пойдут в Baza3.

какие требования к задержке синхронизации и т.д.
<= 15 мин. Гипотетически изменения могут быть только в первых Н миллионах записей, их надо каждые 15 минут чекить, а вот полная синхронизация может выполняться реже (если это конечно возможно и что-то даст).
14 окт 13, 22:01    [14969716]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
kill_zdm
чистый бэкап/ресто?
А свази при этом не будут нарушаться?
14 окт 13, 22:06    [14969752]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
для начала прочитайте про репликацию транзакций...хотя, мне кажется, тут достаточно и триггеров + асинхронную очередь...
жаль, что не 2008-ой SQL Server, а то ChangeTracking напрашивается
14 окт 13, 22:11    [14969778]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
kill_zdm
Member

Откуда:
Сообщений: 1406
Cheerful Calf,

Может в меня полетят камни, но я не нашел в свое время ответов и поступал методом жестоких эксперементов.
1. Отключить identity
2. Бэкапнуть
3. Создать БД на новом сервере
4. Рестор
5. Включить identity

и был удивлен даже, правда... SQL Server сообразил и продолжил присваивать ID полям с типом счетчик (identity), к слову, в FB у меня так не прокатывало. ... Все связи сохранились, подъем за мгновние ока. Стал уважать после этого Ms SQL
14 окт 13, 22:15    [14969793]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
kill_zdm
Member

Откуда:
Сообщений: 1406
Knyazev Alexey,

Алексей, (я уже просил прощения у автора, но мне правда то-же очень интерес этот вопрос). Про триггеры я подумал первым делом, но!!! не могу сообразить, как реализовать триггер если мы говорим об одной таблице, которая будет вызывать видимо этот триггер бесконечно - первая ошибка программера - написать триггер на update той таблицы, на которую и пишется триггер, не?
14 окт 13, 22:19    [14969808]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
Knyazev Alexey,

Прошу прощения, не уточнил - базу трогать нельзя, будет право только читать данные, так что триггера увы.
14 окт 13, 22:19    [14969809]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
kill_zdm
Member

Откуда:
Сообщений: 1406
Cheerful Calf,

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

По факту, структура будет не затруната, бэкап/рестор - точная копия при остановленонй бд. Попробуйте просто симитировать ситуацию на какой нибудь виртуальной машине
14 окт 13, 22:25    [14969840]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
Knyazev Alexey
для начала прочитайте про репликацию транзакций...
Почитал. Если правильно понял - Базу2 будет колбасить как и первую , что не есть в моём случае гуд из-за low IO. Мне бы именно н-раз в час извлекать те данные, которые стали не такими как в другой..
kill_zdm
Cheerful Calf,

про триггеры мне интересен ответ, надеюсь Вы не обиделись, что я влез с параллельными вопросами, но черт возьми как? если сделать триггер на апдейт таблицы, в той-же , которой мы хотим обновлений - это будет бесконечный апдейт!!!
Ничего не понял, но если про то, что при двусторонней синхронизации они будут вызываться циклично - то перед вставкой записей триггером одной таблицы можно отключить триггер другой.
15 окт 13, 03:29    [14970502]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Roman_sib
Member

Откуда:
Сообщений: 10
добрый день,
Самый быстрый вариант - это сделать репликацию транзакциями.
Укажите там фильтр, например по дате, т.е. промежуток времени, в который будут входить эти n млн записей (что-нибудь вроде >getdate()-1000), или по другому признаку отфильтруйте - вам виднее.. Задайте в шедуллере интервал 15 минут и всё будет так, как вам нужно. Будет работать достаточно стабильно, тем более на одном и том же сервере.
Кстати, третью базу тоже можно включить в подписку, если я правильно понял задачу..
15 окт 13, 07:52    [14970596]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Cheerful Calf
Если правильно понял - Базу2 будет колбасить как и первую
Будет. Возможно даже сильнее первой.
Cheerful Calf
Мне бы именно н-раз в час извлекать те данные, которые стали не такими как в другой.
Вам, для начала, нужно определиться: можно ли в принципе или нельзя что-либо менять в База1 для решения поставленной задачи.
15 окт 13, 10:14    [14971050]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить записи в таблице?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
invm
для начала, нужно определиться: можно ли в принципе или нельзя что-либо менять в База1
нельзя
15 окт 13, 12:02    [14971811]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить