Не-DBA спрашивает: как безболезненно скопировать / переместить экземпляр SQL Server на другой сервер с помощью резервного копирования / восстановления?

11

У нас только что появился новый сервер, поэтому мне нужно скопировать существующий экземпляр SQL Server 2008 из старого поля базы данных.

Обычно я делаю это, копируя файлы .mdf и log-файлы и прикрепляя их, но я не могу отключить dbs, так как они используются круглосуточно, поэтому я создал резервные копии баз данных и восстановил их на новом машина. Однако я столкнулся с несколькими проблемами, одна из которых связана с осиротевшими пользователями . Итак, что я ищу, так это безотказный процесс, чтобы переместить все с минимальной суетой / беспокойством / головной болью. Я разработчик .Net с достаточным количеством SQL под моим пристальным вниманием, но внутренняя работа SQL Server во многом для меня загадка, и я нахожу документацию MS болезненной для траления.

Пожалуйста помоги.

5arx
источник
1
Вы можете найти некоторые идеи в этом предыдущем вопросе . Но предыдущие ответы довольно объяснительны. Я думаю, что лучшей идеей было бы установить зеркалирование и разорвать его после, или доставку журналов (можно сделать только из мастера) для всех БД и просто восстановить необходимые резервные копии журналов, но если вы говорите, что вы не администратор базы данных , тогда, вероятно, метод резервного копирования лучше.
Marian

Ответы:

10

Если вы не можете перевести базы данных в автономный режим, необходимо выполнить резервное копирование / восстановление. Я бы предложил следующее:

  1. Установите SQL 2008 на новом блоке, используя ту же структуру файлов, что и старый блок для файлов MDF и LDF.
  2. Сделайте резервные копии всех баз данных на старой коробке.
  3. Восстановите мастер из старого блока в новый, запустив SQL в однопользовательском режиме. Восстановить основной метод
  4. Восстановите каждую базу данных из старого поля в новое поле с параметром NORECOVERY, чтобы иметь возможность применять будущие резервные копии Diff или T-log.
  5. Восстановите msdb из старого ящика в новый.

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

Я понятия не имею, насколько велики ваши базы данных, поэтому этот метод может занять много времени. Самое простое, что можно сделать, это закрыть старый блок и скопировать файлы MDF и LDF, а затем (после восстановления master) вам потребуется только перезапустить SQL, чтобы ваши базы данных были в сети. Но вы заявили, что это не вариант, поскольку базы данных не могут быть отключены.

SQLRockstar
источник
3
Не забудьте скопировать любые изменения данных, сделанные после создания резервных копий. Вы можете создать резервную копию diff или tlog и применить ее к новому серверу после его запуска, но перед переключением.
Эрик Хамфри - LotsAhelp
хороший момент, я забыл упомянуть об этом. возможно я должен включить конфигурацию зеркала БД, которая могла быть сломана впоследствии?
SQLRockstar
1
Я думаю, у кого-то уже есть обширная статья о различных способах миграции серверов. Кроме того, вот статья о переносе имен входа на новый сервер: support.microsoft.com/kb/246133
Эрик Хамфри - lotsahelp
8

Вы упомянули работу в режиме 24/7, поэтому лучший способ сделать это - создать зеркало базы данных в новой системе, тогда вы можете просто переключиться с минимальным, возможно, нулевым, в зависимости от того, как структурировано ваше приложение, - время простоя с использованием клиента. боковой редирект. Основные шаги:

  1. Убедитесь, что ваша основная база данных работает в режиме полного восстановления .
  2. Сделайте резервную копию основного и восстановите его на зеркале WITH NORECOVERY
  3. Создайте «конечные точки» на обоих серверах и обеспечьте подключение (например, правила брандмауэра), правильно задав порт и IP-адрес), например:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
  4. Настройте зеркальное отображение на зеркало, указывая на основное:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
  5. А на основной, указывающей на зеркало (просто другое имя базы данных и IP-адрес.

  6. Затем, когда придет время, просто переключитесь с основного на зеркало:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO

Примечание: я предполагаю, что эти два сервера находятся в одной сети, поэтому будет нормально работать в синхронном режиме. Если это по каналу WAN, используйте асинхронный режим.

Gaius
источник