Перенос базы данных WSUS 3.0 с Windows Internal Database на удалённый экземпляр SQL Server 2008 R2

imageВ процессе развёртывания WSUS 3.0 в конфигурации по умолчанию на сервер устанавливается специальный экземпляр Windows Internal Database, который не даёт возможности подключаться к данным БД WSUS (по умолчанию имя базы - SUSDB) с удалённых компьютеров. Если по какой-то причине возникает необходимость в удалённом подключении к базе данных WSUS, нам потребуется развернуть как минимум SQL Server 2005/2008 Express Edition и перенести SUSDB в этот экземпляр. Экземпляр SQL Server может быть как локальный (установленный на самом WSUS сервере) так и удалённый. Рассмотрим пошагово порядок переноса базы данных WSUS на удалённый экземпляр SQL Server 2008 R2.

Последовательность действий будет такая:

  • На WSUS сервер, работающий на Windows Internal Database, устанавливаем минимальный набор клиентских компонент SQL Server 2008 R2.
  • На WSUS сервере с помощью установленных клиентских компонент отсоединяем базу данных SUSDB.
  • На сервере c SQL Server 2008 R2 присоединяем базу данных SUSDB и настраиваем необходимые разрешения для доступа сервера WSUS к этой базе данных.
  • Настраиваем WSUS сервер на работу с экземпляром SUSDB на удалённом сервере c SQL Server 2008 R2


Шаг #1. Устанавливаем клиентские компоненты
SQL Server на сервер WSUS

Скачиваем пакеты Microsoft SQL Server Native Client и Microsoft SQL Server 2008 R2 Command Line Utilities (sqlcmd) из состава Microsoft SQL Server 2008 R2 Feature Pack в соответствии с платформой нашего WSUS сервера. В нашем случае это будут файлы SqlCmdLnUtils.msi и sqlncli.msi для платформы X64. Сначала устанавливаем клиентские компоненты Microsoft SQL Server Native Client

image

… затем устанавливаем пакет Microsoft SQL Server 2008 R2 Command Line Utilities

image

На самом деле вместо этих двух пакетов можно скачать и установить Microsoft SQL Server 2008 R2 RTM - Management Studio Express и операцию отсоединения БД WSUS произвести в удобном GUI, но при этом размер загружаемого дистрибутива увеличится более чем в 8 раз (с 19,6Mb до 163Mb) поэтому данный вариант мы рассматривать не будем.


Шаг #2. Отсоединяем базу
SUSDB от экземпляра Windows Internal Database

На сервере WSUS останавливаем системные службы Update Services и IIS Admin Service. Быстро сделать это можно, например, с помощью команды:

net stop WsusService & net stop IISADMIN

image

После того как службы успешно остановлены, с помощью утилиты sqlcmd выполняем подключение к локальному экземпляру Windows Internal Database на сервере WSUS и выполняем отсоединение БД WSUS с помощью следующей последовательности команд:

sqlcmd -S np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery

use master

alter database SUSDB set single_user with rollback immediate

go

sp_detach_db SUSDB

go

image

Обратите внимание на то, что на время нашей сессии первой командой мы добавляем в переменные окружения путь к каталогу, в котором расположена утилита sqlcmd (по умолчанию это ‘C:Program FilesMicrosoft SQL Server100ToolsBinn’)


Шаг #3. Присоединяем базу
SUSDB на сервере SQL Server 2008 R2

C сервера WSUS файлы БД SUSDB.mdf и SUSDB_log.ldf (по умолчанию расположены в каталоге C:WSUSUpdateServicesDbFiles) переносим на сервер с установленным SQL Server 2008 R2, после чего на сервере баз данных открываем SQL Server Management Studio и выполняем присоединение скопированных файлов базы SUSDB

image

При присоединении имена файлов и базы данных оставляем без изменений...

image

После того как БД присоединена нам нужно настроить разрешения для возможности удалённого подключения к ней службы Update Services сервера WSUS. Так как эта служба на WSUS сервере по умолчанию работает от имени служебной учетной записи Network Service – нам необходимо добавить разрешение для доменной учетной записи компьютера - сервера WSUS дающее право на удалённое подключение к экземпляру SQL Server. Можно конечно явным образом добавить учетную запись сервера WSUS в список логинов SQL Server, но более правильно будет создать для этих целей специальную доменную группу безопасности. Создадим такую группу…

image

… и включим в эту группу учетную запись компьютера – сервера WSUS.

Далее добавляем на сервере SQL Server в список логинов созданную доменную группу следующей командой SQL:

CREATE LOGIN "DOMAINKOM-AD01-SRV-ADM-WSUS" FROM WINDOWS;

GO

После выполнения команды проверяем то, что в SQL Server Management Studio (Security > Logins) списке логинов отображается добавленная группа безопасности.

image

Далее нам нужно открыть свойства созданного SQL-Логина и на закладке User Mapping, cвязать логин с базой SUSDB и включить его в роль webService

image


Шаг #4. Настраиваем сервер
WSUS

Для присоединения удалённого экземпляра базы данных SUSDB к фронт-энд серверу WSUS нам потребуется на сервере WSUS внести некоторые изменения с системный реестр в ветку HKLMSOFTWAREMicrosoftUpdateServicesServerSetup

  • Значение ключа SqlServerName устанавливаем в SQLSERVERInstanceName
    Обратите внимание на то, что если используется инстанс по умолчанию, то есть MSSQLSERVER то его имя не указывается, а указывается только имя сервера, в противном случае WSUS не сможет подключиться к базе… Необъяснимо но факт :)
  • Значение ключа wYukonInstalled устанавливаем в 0
  • Значение ключа SqlInstanceIsRemote устанавливаем в 1

image

После правки реестра запускаем службы Update Services (WsusService) и IIS Admin Service (IISADMIN) и проверяем возможность корректного открытия и работы консоли WSUS.

После всего, если вы уверены в том, что теперь на сервере WSUS экземпляр Windows Internal Database не используется более никакими приложениями то, в принципе, можете произвести его удаление. Сделать это стандартным способом через оснастку Add/Remove Programs (appwiz.cpl) не получится и поэтому для удаления придётся воспользоваться инструкцией Update Management TechCenter - Uninstalling Windows Internal Database

Дополнительная информация по теме:

Всего комментариев: 20 Комментировать

  1. Rastler /

    спасибо, полезно!

  2. equinox /

    Спасибо! Однозначно в закладки. Скоро мне предстоит подобная операция по переносу базы WSUS, возьму на заметку.

  3. Shadowkeeper /

    Немного нелогичные действия...

    Детачим, значит, через командную строки - типа удобно, а аттачим через GUI?

    Как быть насчет SQL Express?? у мну поставленный из коропки SQL Express 2008 R2 не пущает на себя через MGMT Studio...
    А через sqlcmd - пускает...
    Если уж в командной строке делать - то все...

    1. Алексей Максимов /

      Мне не известно способа деаттачить базу данных Windows Internal Database через гуй, тем более что у него этого гуя попросту нет. Или Вы расскажете нам как это сделать и покажете нам всем этот волшебный гуй? По поводу SQL Express - его послеустановочная настройка это несколько иная тема для разговора и не относится к сути поста.

  4. Shadowkeeper /

    Я к тому, что раз начали через командную строку - через нее и имеет смысл продолжать доделывать... Чтоб кому нужно - потом скриптик дочеркали...
    Про Express спросил - потому что в начале поста вы про него упомянули, что можно к томуж экспресс - бесплатный совсем... А у меня сходу не вышло и в тексте - нету инфо, что могут быть нюансы :)
    Вышло, когда установил дефолтный Instance сразу и смешанную аутентификацию, почему-то... Встроенный MGMTStudio сразу увиделся.

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

    Ввиду крайне рекомендации MS не пользоваться командой sp_attach_db (а через GUI используется она же) - http://technet.microsoft.com/ru-ru/library/ms179877.aspx - я пользую и другим рекомендую более гуманный, прозрачный и предсказуемый способ...

    1. программой wsusutil (обычно лежит в папке c:program filesUpdateServicesTools)
    делается экспорт базы данных.
    wsusutil.exe export d:export.cab d:export.log
    2. Сносим wsus с сервера через GUI оснастку. Чтобы не потерять прокачанные файлы - при удалении указываем (снимаем галочку) чтобы оставил обновления. Базу и логи пусть удаляет. Если не используется ничем другим Windows Internal DB - ее тоже удаляем
    3. Ставим (если еще не установили) Windows 2008R2 SQL Express (Ну или любой другой SQL-сервер. для Express - первым ставим Default Instance и смешанную аутентификацию (у меня только так заработало). К нему - обяязательно комплектный Management Studio
    4. Запускаем установку WSUS через роли, указываем при установке нужный нам SQL-сервер. Место установки - прежнее, чтобы подхватились скачанные файлы.
    5. Не конфигурируя WSUS,делаем
    wsusutil.exe import d:export.cab d:export.log
    6. В будущем - сначала ставим SQL Express (или другой SQL), а потом в него устанавливаем WSUS. и другие службы. И ждем, пока MS соблаговолит проапдейтить Windows Internal Database до SQL2008R2 и позволит туда нормально ставить сторонние служебные базы. А заодно - и нормально работать с ней, а не то чтоб фиг поставишь - фиг удалишь :)

    Можно еще сделать экспорт конфигурации старого WSUS и прикрутить к новому - но искать лениво команды, а мне не особо нужно, сорри. К тому ж он от старой установки все же подхватил настройки...

    И еще раз извиняюсь, что встрял в разрез вашего поста - но все же по теме заголовка :) :) :)

    P.S. А кстати более интересный вопрос есть - можно ли для разных серверов WSUS пользовать одну SUSDB на удаленном сервере? очхотлеосьбы, но рисковать и экспериментировать нет времени... А иначе - смысла уносить SUSDB на удаленный сервер не вижу... Express пользую - потому что Kaspersky AdminKit не лезет в Internal Database, а несколько движков держать - суть зло :) Да и бэкапить контроллируемо можно...

  5. Shadowkeeper /

    Маленькое уточнение к моему предыдущему посту...
    Для SQLExpress режим аутентификации значения не имеет. А вот в недефолтный instance установитьWSUS все же не удалось...

    1. Алексей Максимов /

      <А у меня сходу не вышло и в тексте – нету инфо, что могут быть нюансы

      Нюанс там, если мне не изменяет память, только один - отключенная по умолчанию возможность прослушки портов по TCP/IP.
      Включается через оснастку "SQL Server Configuration Manager" > "SQL Server Network Configuration"
      И с режимом аутентификации это может быть связанно только из-за того, что для встроенной аутентификации Windows - более жёсткие требования при подключении к БД, особенно в доменной инфраструктуре где используются "феньки" Kerberos.
      Но это уже тема для отдельного разговора.

      Кроме того, есть еще нюанс, связанный с тем, что если вдруг у неподготовленного пользователя что-то пойдет не так, а база будет деаттачена – он не сможет корректно удалить роль WSUS через оснастку…

      Ну как Вы могли заметить, передо мной и не стояла задача заниматься всякими там переустановками WSUS.
      Задача заключалась в том, чтобы просто перенести существующую БД на полноценный экземпляр SQL не трогая при этом установленную аппликэйшн часть WSUS.

      Я к тому, что раз начали через командную строку – через нее и имеет смысл продолжать доделывать

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

      Ввиду крайне рекомендации MS не пользоваться командой sp_attach_db

      Ну это Вы батенька уже в крайности бросаетесь. Рекомендация эта для разработчиков DB.
      В текущей версии о которой идёт речь команда работает и никаких проблем не вижу её использовать.

      А кстати более интересный вопрос есть – можно ли для разных серверов WSUS пользовать одну SUSDB на удаленном сервере

      Это вопрос из разряда "как надеть штаны через голову". Совсем непонятна цель такой конфигурации.... сразу вспоминается про то что были ещё "деятели", которые на Linux ставили WSUS в эпоху второй его версии.

      А иначе – смысла уносить SUSDB на удаленный сервер не вижу

      Ну это Вы не видите, а у кого-то, как например у меня, это вполне оправданная определёнными целями задача.

      Express пользую...

      Ну тут уж, как говорится, "кто чем богат" :)

      А в целом, спасибо за содержательный комментарий :)

  6. mix4it /

    Вопрос, зачем отсоединяем БД от Windows Internal Database, если можно просто выключить службы и скопировать?

    1. Алексей Максимов /

      Для того чтобы сделать себе "засечку" о том, как работать с Windows Internal Database.

      1. mix4it /

        Тоесть я ничего не путаю, выключаем службы - копируем базы - меняем реестр, готово.
        После проверки сносим Internal Database.

        Только вот при запуске консоли не хочет подключаться.
        Завтра уже попробую как было написано в коментах выше установить смешанную аутентификацию, есть еще какие-нибудь советы?

  7. Алексей Максимов /

    Хотите совет? Совет один и он простой - не "крутить хвостом", а сделать как написано в посте. Проверено на практике.
    PS: Обратите внимание на ссылки в конце поста. Там есть ссылка на официальный блог команды разрабочиков WSUS, и вы можете убедиться в том, что я ничего не придумал и они сами рекомендуют делать деаттач базы Windows Internal Database.

  8. mix4it /

    Хорошо завтра попробуемc, но тогда вопрос, если что пойдет не так, вернуть все обратно если не ошибаюсь команда:

    sp_attach_db @dbname = 'SUSDB',
    @filename1 = 'D:sqldatasusdb.mdf'
    @filename2 = 'D:sqldatasusdb.ldf'
    GO
    ALTER DATABASE SUSDB SET MULTI_USER WITH NOWAIT
    GO

    Или же она подключится уже не в режиме single?
    не люблю лезть на рожон, не продумав пути к отступлению =)

    1. Алексей Максимов /

      Если сомневаетесь, можно попробовать все операции с WIDB провести через GUI (для наглядности и большей осязаемости). Вот нашёл пример http://blog.augustoalvarez.com.ar/2009/01/25/wsus-30-connecting-managing-and-moving-susdb-as-internal-database/
      Правда сам это не проверял.

      1. mix4it /

        Я читал про это, но у меня WSUS крутится на домен контроллере, не хочу туда ставить SQL. А вот теоритечески ведь можно же подключиться к WSUSу SQL studio через сеть? Надо бы попробовать

  9. Алексей Максимов /

    mix4it :

    но у меня WSUS крутится на домен контроллере

    Вот это уже "не айс"

    mix4it :

    А вот теоритечески ведь можно же подключиться к WSUSу SQL studio через сеть

    Не можно. Об этом сказано в начале поста. Разрешено только локальное подключение через именованные каналы.

    1. mix4it /

      знаю что не айс, вот и хочу перенести, базу SQL в одно место, WSUS в другое.

  10. mix4it /

    Сделали все точь по инструкции, не хочет консоль видеть сервак.
    Кстати для подключения базы обратно, если кому интересно использовал скрипт:

    sp_attach_db 'SUSDB','F:WSUSUpdateServicesDbFilessusdb.mdf','F:WSUSUpdateServicesDbFilessusdb_log.ldf'
    go
    ALTER DATABASE SUSDB SET MULTI_USER
    go

  11. equinoxnet /

    Вчера перенес таким образом базу с одного сервера (под снос который шел) на новый на виртуалке в Hyper-V. Все прошло без проблем, как по статье. Так что рекомендую к применению.

  12. Обратная ссылка: Случай из практики – 7 « RDP dog /

  13. Обратная ссылка: System Center 2012 R2 Configuration Manager — перенос баз данных сервера Primary Site (с учётом SSRS и WSUS) между экземплярами SQL Server | Блог IT-KB /

Добавить комментарий