Доступность базы данных во время обновления базы данных - PullRequest
1 голос
/ 11 ноября 2010

У меня есть база данных от третьего лица.Они предоставляют инструмент для обновления базы данных еженедельно.Инструмент довольно старый и использует ODBC.Обновления могут быть инкрементными или могут удалить все данные базы данных, а затем воссоздать данные.Обновление может занять несколько часов.Для обеспечения высокой доступности было предложено иметь 2 базы данных SQL и сохранить параметр «активная база данных» в другой базе данных, чтобы определить, какую из двух баз данных следует использовать приложениям (в то время как другую можно было бы обновлять).

Одна проблема, с которой мы сталкиваемся: как ссылаться на активную базу данных в хранимых процедурах в других базах данных?

Это правильный подход?Есть ли простой, возможно, основанный на инфраструктуре подход?(Должно ли это быть опубликовано на ServerFault?)

Примечание. Базы данных доступны только для чтения, кроме инструмента обновления.

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Если базы данных находятся на разных серверах, вы можете создать псевдоним для сервера, который будет перенаправлять на другой сервер в диспетчере конфигурации SQL Server. Под Конфигурацией SQLNative Client 10.0 (или 9.0, если вы находитесь в SQL Server 2005) вы можете добавить новый псевдоним.

В противном случае вы всегда можете переименовать базы данных, используя sp_dbrename, чтобы ваши клиентские приложения всегда использовали базу данных1, когда вы обновляете базу данных2.

1 голос
/ 12 ноября 2010

Если вы хотите использовать разные базы данных внутри хранимой процедуры, вам нужно:

  1. Дублировать все звонки. Некрасиво. Вы бы закончили с большим количеством:

    if @firstDatabase=1
      select * from database1..ExampleTable where ...
    else
      select * from database2..ExampleTable where ...
    
  2. Использовать динамические запросы. Менее некрасиво:

    set @sqlQuery='select * from '+@currentDatabase+'..ExampleTable where...'
    exec sp_executesql @sqlQuery
    

Я признаю, что ни одно из решений не является идеальным ...

0 голосов
/ 11 ноября 2010

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

...