Работа с log shipping в SQL Server
От: Somescout  
Дата: 25.09.14 09:19
Оценка:
Salutations.

Есть средних размеров база на SQL Server (чуть больше 3TB), для которой время от времени нужно сделать хитрое действие:
1) Сделать копию базы
2) Обработать копию скриптом (при этом база портится)
3) fun&profit...

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

Пока наиболее перспективным вариантом выглядит запуск Log Shipping'а на отдельный сервер. Когда возникает необходимость — делаем шаги 2-3 на этой реплике, а затем запускается полная ресинхронизация.

Вопрос: может есть способ, который позволит избежать полного копирования базы после выполнения действий 2-3? Требование — всё должно происходить не на основном сервере, ибо любой сбой == секир башка...

PS. Возможно я плохо понимаю log shipping, но вроде он работает только пока база находится в recovery, а следовательно если нужно работать с базой то log shipping прерывается.
ARI ARI ARI... Arrivederci!
Re: Работа с log shipping в SQL Server
От: _ABC_  
Дата: 25.09.14 09:52
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Из-за размеров базы это происходит не быстро, хотелось бы в идеале постоянно держать копию базы, при необходимости её обрабатывать и откатывать результаты изменений скрипта без повторной синхронизации.

Скрипт затрагивает все таблицы базы? Если только небольшую часть, то может целесообразнее
просто в портящуюся БД заливать новые данные, портить всё как надо, получать fun&profit, потом откатывать
(например при помощи снэпшота)? И так по кругу при необходимости.
Re[2]: Работа с log shipping в SQL Server
От: Somescout  
Дата: 25.09.14 12:36
Оценка:
Здравствуйте, _ABC_, Вы писали:

_AB>Здравствуйте, Somescout, Вы писали:


S>>Из-за размеров базы это происходит не быстро, хотелось бы в идеале постоянно держать копию базы, при необходимости её обрабатывать и откатывать результаты изменений скрипта без повторной синхронизации.

_AB>Скрипт затрагивает все таблицы базы? Если только небольшую часть, то может целесообразнее
_AB>просто в портящуюся БД заливать новые данные, портить всё как надо, получать fun&profit, потом откатывать
_AB>(например при помощи снэпшота)? И так по кругу при необходимости.

Таблиц много, данные обновляются по множеству из них (заранее неизвестному).

Возможно ли при помощи снапшота или каким-либо другим образом возобновить логшиппинг? т.е. делается снапшот, затем проводится работа, снапшот откатывается и возобновляется логшиппинг.

Есть ещё репликация, но для неё рекомендуют регулярно делать полную синхронизацию.
ARI ARI ARI... Arrivederci!
Отредактировано 25.09.2014 12:37 Somescout . Предыдущая версия .
Re[3]: Работа с log shipping в SQL Server
От: _ABC_  
Дата: 25.09.14 12:45
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Таблиц много, данные обновляются по множеству из них (заранее неизвестному).

S>Есть ещё репликация, но для неё рекомендуют регулярно делать полную синхронизацию.
По существующей постановке задачи, я бы смотрел в сторону периодической подгрузки данных в отчетную
БД и их модифицикации там по необходимости.


S>Возможно ли при помощи снапшота или каким-либо другим образом возобновить логшиппинг? т.е. делается снапшот, затем проводится работа, снапшот откатывается и возобновляется логшиппинг.

Нет. Лог шиппинг по своей сути — это банальное восстановление цепочки логов.
Перевод БД в режим, позволяющий менять данные, автоматически эту цепочку разрушает.
Всё что остается — это полное восстановление из бэкапа и повторный накат всей цепочки логов.
Re[4]: Работа с log shipping в SQL Server
От: Somescout  
Дата: 25.09.14 13:11
Оценка:
Здравствуйте, _ABC_, Вы писали:

_AB>Здравствуйте, Somescout, Вы писали:


S>>Таблиц много, данные обновляются по множеству из них (заранее неизвестному).

S>>Есть ещё репликация, но для неё рекомендуют регулярно делать полную синхронизацию.
_AB>По существующей постановке задачи, я бы смотрел в сторону периодической подгрузки данных в отчетную
_AB>БД и их модифицикации там по необходимости.
А как можно на уровне sql синхронизировать таблицы? т.е. определить минимально необходимый объём данных, которые нужно скопировать в таблицу чтобы привести её к исходной? (Если исходить из того, что я не знаю какие именно таблицы менялись и время должно быть меньше, чем развёртывание бэкапа)
(возможно с помощью стороннего софта)

Либо синхронизация баз с помощью сторонних решений.

_AB>Нет. Лог шиппинг по своей сути — это банальное восстановление цепочки логов.

_AB>Перевод БД в режим, позволяющий менять данные, автоматически эту цепочку разрушает.
_AB>Всё что остается — это полное восстановление из бэкапа и повторный накат всей цепочки логов.
Понятно.
ARI ARI ARI... Arrivederci!
Отредактировано 25.09.2014 13:12 Somescout . Предыдущая версия . Еще …
Отредактировано 25.09.2014 13:11 Somescout . Предыдущая версия .
Re[5]: Работа с log shipping в SQL Server
От: _ABC_  
Дата: 25.09.14 15:30
Оценка:
Здравствуйте, Somescout, Вы писали:

S>А как можно на уровне sql синхронизировать таблицы? т.е. определить минимально необходимый объём данных, которые нужно скопировать в таблицу чтобы привести её к исходной? (Если исходить из того, что я не знаю какие именно таблицы менялись и время должно быть меньше, чем развёртывание бэкапа)

S>(возможно с помощью стороннего софта)
Это зависит от самих данных.
Как вариант — иметь для каждой таблицы колонку-флаг, хранящий статус записи (синхронизирована/нуждается в синхронизации) или хранить время последнего изменения
и загружать всё измененное после определенной точки во времени.
Думаю, что кто-то может предложить и более удачные варианты.

S>Либо синхронизация баз с помощью сторонних решений.

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

S>Понятно.

Увы, простого решения в данном случае нет.
Re[6]: Работа с log shipping в SQL Server
От: igor_ku  
Дата: 23.10.14 06:49
Оценка:
Здравствуйте,

Just thoughts aloud...

А что если так:
1 — делаем репликацию. Т.е. имеем всегда online актуальную копию БД на другом сервере, на котором её (БД) можно портить.
2 — перед тем как начать портить реплицируемую БД делаем следующее:
2а — останавливаем репликацию
2б — делаем снэпшот реплицируемой БД
3 — портим реплицируемую БД, fun&profit, etc.
4 — после окончания порчи:
4а — ресторим реплицируемую БД из снэпшота (это не должно занять много времени и зависит только от кол-ва измененных данных во время порчи)
4б — восстанавливаем репликацию

Там выше писали, что с репликацией якобы есть проблемы. Ну не знаю, не знаю, у нас на прод-серверах работает без проблем, технология стара как мир и лично по моим ощущениям, самая надежная. Не думаю, что с неким кастомным решением синхронизации данных будет меньше проблем, полагаю раз в 10-100 больше.

Я сам делать так, как я написал выше, не пробовал, так что критика приветствуется.
Отредактировано 23.10.2014 6:55 igor_ku . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.