SharePoint 2010: миграция SQL Server 2008 на SQL Server 2012

Дано: допустим у организации развернут SharePoint Foundation 2010 на СУБД Microsoft SQL Server 2008 R2.
Задача: переместить базу данных на SQL Server 2012 (на 2014 нельзя, т.к. SharePoint 2010 ее не поддерживает).

Разобьём решение на несколько шагов.

1) очистка базы данных с целью уменьшить ее объем.
Очищаем все корзины на сайтах SharePoint (Внимание: делаем это действие, только если Вы убедились, что пользователям не понадобится ничего восстанавливать).
Делаем это либо вручную, если сайтов не много, либо можно использовать PowerShell скрипт (если в качестве URL указать сайт верхнего уровня, то будут очищены корзины также всех подсайтов):

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint");
$url = $args[0]; #адрес SP сайта
$site = new-object microsoft.sharepoint.spsite($url);
for ($i=0;$i -lt $site.allwebs.count;$i++)
{
  write-host $site.allwebs[$i].url "...deleting" $site.allwebs[$i].recyclebin.count "item(s).";
  $site.allwebs[$i].recyclebin.deleteall();
}
write-host $site.url "...deleting" $site.recyclebin.count "item(s).";
$site.recyclebin.deleteall();
$site.dispose();

Можно также посмотреть, какой сайт SharePoint сколько места занимает, перейдя в "Параметры сайта" (сайт верхнего уровня) - ссылка "Метрики хранилища" (например, с целью очистить ненужный контент):


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

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$SPsite = new-object Microsoft.SharePoint.SPSite("SHAREPOINT SITE URL")
foreach ($SPweb in $SPsite.AllWebs)
{ 
   write-host $SPweb.url 
   foreach ($SPlist in $SPweb.Lists) 
   { 
      if (($SPlist.BaseType -eq "DocumentLibrary") -and ($SPlist.EnableVersioning)) 
      { 
         $SPlist.MajorVersionLimit = 2 
         $SPlist.Update() 
         foreach($SPitem in $SPlist.Items) 
         { $SPitem.SystemUpdate($false) } 
      } 
   } 
}
$SPweb.Dispose();
$SPsite.Dispose();

2) Останавливаем веб-приложения SharePoint в IIS

Либо вручную каждый сайт (IIS - Site - Manage Web Site - Stop):


Либо все сайты сразу командой в консоли (cmd): iisreset /stop


3) Останавливаем сервисы SharePoint в системе. Необходимо остановить следующие сервисы (Administrative Tools - Services - Service - Stop):

  • SharePoint 2010 Administration
  • SharePoint 2010 Timer
  • SharePoint 2010 Tracing
  • SharePoint 2010 User Code Host
  • SharePoint 2010 VSS Writer
  • SharePoint Foundation Search V4
  • World Wide Web Publishing Service


4) уменьшение базы данных и файлов логов SQL Server.
После этого можно сделать попытку уменьшить размер баз данных SQL Server при помощи функции Shrink (Tasks - Shrink - Database или Files):



Показатель Available free space показывает на сколько можно уменьшить базу с помощью этой процедуры.
Также можно сделать усечение журнала транзакций при помощи SQL скрипта:

use DBName
go
dbcc shrinkdatabase('DBName', TRUNCATEONLY)
GO

Если не помогло, то следующий скрипт:

use [SharePoint_AdminContent_GUID]
go
ALTER DATABASE [SharePoint_AdminContent_GUID] SET RECOVERY SIMPLE
DBCC SHRINKFILE ('SharePoint_AdminContent_GUID_log', 10)
ALTER DATABASE [SharePoint_AdminContent_GUID] SET RECOVERY FULL

Например, после выполнения этого скрипта на базе SharePoint_AdminContent, ее журнал уменьшился на 7 гигабайт.

5) Делаем Detach всех баз данных на старом SQL Server 2008 (либо можно сделать BackUp): DataBase - Tasks - Detach.

Базы данных:

  • SharePoint_AdminContent_GUID
  • SP_Config
  • SP_Content
  • SP_Logging
  • SP_Search_<ServerName>
  • WSS_Search_<ServerName>


6) Копируем все файлы баз данных (.mdf, .ldf, .ndf ) на новый сервер в желаемую папку.

7) На новом сервере (SQL Server 2012) создаем логины (пользователей БД), такие же как были на старом сервере, например:

Логин ORG\MSSP_explorer для базы WSS_Search_<ServerName>:



Логин ORG\MSWSS_starter для всех баз:



Логины БД можно создать вручную, либо, например, таким SQL-скриптом:

USE [master]
GO
CREATE LOGIN [ORG\MSWSS_starter] FROM WINDOWS WITH DEFAULT_DATABASE=[master],
 DEFAULT_LANGUAGE=[us_english]
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [ORG\MSWSS_starter]
GO
ALTER SERVER ROLE [securityadmin] ADD MEMBER [ORG\MSWSS_starter]
GO
ALTER SERVER ROLE [dbcreator] ADD MEMBER [ORG\MSWSS_starter]
GO

8) Делаем attach всех скопированных баз данных на новой версии SQL Server 2012

Вручную или SQL скриптом:

sp_attach_db 'DBName','C:\MSSQL\DATA\DBName.mdf','C:\MSSQL\DATA\DBName_log.ldf'

9) Проверяем, проассоциировались ли пользователи баз данных с созданными ранее логинами.


Если нет, то выполняем следующий скрипт для каждой базы для "линковки" юзеров базы и логина:

use DBName
go
EXEC sp_change_users_login 'Update_One', 'DBUser', 'Login'
go

10) Указание нового алиаса. На сервере, где расположено веб-приложение SharePoint, запускаем утилиту "SQL Server Client Network Utility", на вкладке Alias редактируем имеющуюся строку, где прописываем адрес нового сервера, где установлена база данных:


11) Обратно запускаем сервисы, которые были остановлены на шаге 3.

12) Стартуем сайты SharePoint в IIS. Вручную или командой: iisreset /start

13) Пробуем открыть сайт SharePoint в браузере и радуемся, если всё получилось :)

(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет :

Отправить комментарий