2013-11-08 2 views
2

У нас есть базовая база данных цены на основе sql-сервера, поставляемая третьей стороной, которая обновляется раз в месяц.Обновите базу данных readonly с минимальным временем простоя

Это в основном три очень больших справочных стола.

Существует множество приложений, которые обращаются к этому db.

Из-за характера цен все они меняются так, что это не полезно.

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

Как мы можем заменить данные при минимизации простоев?

(погуглить этот вид вопроса вернулся с большим количеством шума. - извинения, если это было дублируется много раз)

+0

Я делал это в прошлом с помощью Log-Shipping: zero down-time. Конечно, вам необходимо стороннее сотрудничество в этом. – RBarryYoung

ответ

2

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

  1. имеет два копии базы данных на том же сервере (скажем, db1 и db2). Затем центральная база данных, к которой подключается ваше приложение, которая просто содержит представления и/или синонимы (возможно, в хранимых процедурах). Предположим, что db1 в настоящее время активен, на конец месяца вы создаете резервную копию обновленной производственной базы данных, восстанавливаете ее с заменой, восстанавливаете как db2, а затем изменяете представления и синонимы, указывая на db2.

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

  3. Аналогичный процесс, но с двумя копиями каждой таблицы в отдельных схемах (или разметке и переключении). Я не буду слишком распространять этот вариант, как I've written about it и posted a follow-up, но основная посылка такая же: вы выполняете всю работу в фоновом режиме, которая не влияет на пользователя, а затем вы вводите новые данные, которые операция метаданных и должна быть почти мгновенной, когда она начинает свою очередь в последовательности транзакций. На моей предыдущей работе мы делали это каждые x минут (в зависимости от данных), и это никогда не было проблемой.

+0

Мне нравится звук варианта 1, никогда не думал об использовании представлений/синонимов. Это может занять некоторое время, чтобы попробовать! Пожалуйста, будьте терпеливы, прежде чем я дам вам зеленый тик! :-) –

+0

@KevinPluck Не беспокойтесь, не спешите. Вы никогда не должны стремиться предоставить галочку. Вы должны быть уверены, что решение работает, и вы можете его реализовать. –

+0

Должно ли упоминаться, что мы используем sql azure, который запрещает синонимы cross-db. Чтобы не волноваться, я теперь читаю ваши 3-х опционные ссылки ... –

1

Если большинство цен меняются, и все цены представлены в новом файле, может быть лучший способ - удалить все таблицы с помощью TRUNCATE. Чтобы снова вставить все данные из нового файла. Вы можете сделать это со сценарием. Примечание. Все необходимые данные должны быть представлены в новом файле импорта.

+0

Спасибо, богданов, это кажется правдоподобным как решение. Я буду экспериментировать с этим подходом. –

Смежные вопросы