如何更改数据库服务器服务器场中的SharePoint

摘要

在SharePoint服务器场中,您可能需要将数据库从一台运行数据库的服务器SQL Server另一台服务器。 如果在 SharePoint 安装过程中不使用 SQL Server 客户端别名,或者出于各种原因(例如 (在安全漏洞) 之后)需要重命名 数据库服务器,请按照本文中的步骤更改 数据库服务器。

通过良好的规划和高可用性,您可以在生产环境中执行这些步骤,而无需停止所有服务。

更改数据库服务器

本文假定所有SharePoint数据库都托管在一个SQL Server实例上。 根据需要,为环境调整这些步骤中的参数。

在启动之前,请创建配置数据库的备份以进行疑难解答,以防SharePoint步骤时无法访问服务器场。

重要

在开始之前,请确保您了解此行动计划。 如果SharePoint服务器场变得完全无法访问,或者配置数据库已损坏,您必须从最新的服务器场备份中还原功能。

步骤 1:在服务器场SQL所有 SharePoint服务器上创建新的别名

为此,请按照下列步骤操作:

  1. 确保使用作为以下成员的成员的用户帐户:
    • Administrators 组
    • db_owner 固定数据库角色
  2. 启动SQL Server客户端网络实用工具 (cliconfg.exe) 。 此实用工具通常位于 C:\Windows\SysWOW64 (32 位) 或 C:\Windows\System32 (64 位) 文件夹中。
  3. 在“常规”选项卡上,确认 TCP/IP 已启用。
  4. 在“别名”选项卡上,单击“添加”。
    注意 将显示 "添加网络库配置 "窗口。
  5. 在"服务器别名"框中,输入新别名SQL Server的名称。
  6. 在“网络库”区域,单击“TCP/IP”。
  7. In the Server name box in the Connection parameters area, enter the Fully Qualified Domain Name of the new server that's running SQL Server, and then click OK.
  8. 在连接到承载数据库的 SharePoint 实例的所有 SQL Server 重复步骤 2 至 7。

步骤 2:将SharePoint数据库指向新的SQL别名

此步骤将更改SQL Server数据库上的实例SharePoint指针。 如果要将数据库存储在不同的实例SQL Server,请相应地修改脚本。

重要

配置SharePoint管理中心内容数据库必须位于同一个SQL Server实例。
若要更改SQL Server指针,在提升的命令行管理程序窗口中SharePoint PowerShell 脚本:

$SPDBs = Get-SPDatabase  
 ForEach ($DB in $SPDBs)  
 {  
     $DB.ChangeDatabaseInstance('SPSQLRenamed')  
 }  

若要验证更改,在提升的命令行管理程序窗口中SharePoint PowerShell cmdlet:

Get-SPDatabase | Select Name,Server  

应收到与以下示例类似的结果:

在提升的命令行管理程序窗口中运行相关 PowerShell cmdlet 后SharePoint屏幕截图。

步骤 3:将 Web 应用程序的默认数据库实例指向新的SQL Server实例

此步骤是必需的,以便当您创建数据库而不指定数据库服务器数据库时,它们不会连接到旧 SQL Server 实例。

下面的操作计划将所有数据库指向SQL Server数据库 (配置数据库实例的同一) 。 修改此脚本以匹配您的要求。

在提升的命令行管理程序窗口中SharePoint PowerShell 脚本:

$ConfigDB = Get-SPDatabase | ?{$_.Name -eq 'SharePoint_Config'}  
 $WebApps = Get-SPWebApplication -IncludeCentralAdministration  
 ForEach ($WebApp in $WebApps)  
 {  
     $WebApp.Parent.DefaultDatabaseInstance = $ConfigDB.ServiceInstance  
     $webapp.Parent.Update()  
     $webapp.Update()  
 }  

若要验证更改,在提升的命令行管理程序窗口中SharePoint PowerShell cmdlet:

$webapps = Get-SPWebApplication -IncludeCentralAdministration  
 foreach ($webapp in $webapps)  
 {  
     Write-host "WebAppUrl: $($webapp.DisplayName)`tDefaultDatabaseInstance: $($webapp.Parent.DefaultDatabaseInstance.DisplayName)"  
 }  

您应收到与以下示例类似的结果:

在提升的命令行管理程序窗口中运行相关的 PowerShell cmdlet 后,数据库实例输出SharePoint屏幕截图。

步骤 4:更改分布式缓存群集配置

重要

此步骤介绍如何直接修改SharePoint数据库。 大多数与数据库相关的数据库通常SharePoint直接数据库修改。 此处指定的操作仅允许用于此特定目的。 我们不会授予使用这些步骤进行任何其他更改的权限。

为此,请按照下列步骤操作:

  1. 使用下面的查询从运行 SQL Server 服务器获取当前SQL对象:

    SELECT [ID],[Properties]  
    FROM [SharePoint_Config].[dbo].[Objects]  
    WITH (NOLOCK)  
    WHERE Properties like '%_cacheConfigStorageLocation%'  
    
  2. 查询返回一个包含两列的行。 一列用于配置项的 GUID,另一列用于配置项的内容,如以下示例所示:

    <object type="Microsoft.SharePoint.DistributedCaching.Utilities.SPDistributedCacheClusterInfo, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=Token"><fld type="Microsoft.SharePoint.DistributedCaching.Utilities.SPDistributedCacheClusterConfigStorageLocation, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=Token" name="_cacheConfigStorageLocation"><object type="Microsoft.SharePoint.DistributedCaching.Utilities.SPDistributedCacheClusterConfigStorageLocation, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=Token"><sFld type="String" name="_provider">SPDistributedCacheClusterProvider</sFld><sFld type="String" name="_connectionString">Data Source=SPSQLRenamed;Initial Catalog=SharePoint_Config;Integrated Security=True;Persist Security Info=False;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;PoolBlockingPeriod=Auto;Asynchronous Processing=False;Connection Reset=True;MultipleActiveResultSets=False;Replication=False;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;Load Balance Timeout=0;Packet Size=8000;Type System Version=Latest;Application Name=".Net SqlClient Data Provider";User Instance=False;Context Connection=False;Transaction Binding="Implicit Unbind";ApplicationIntent=ReadWrite;MultiSubnetFailover=False;TransparentNetworkIPResolution=True;ConnectRetryCount=1;ConnectRetryInterval=10;Column Encryption Setting=Disabled</sFld></object></fld><sFld type="String" name="_clusterSize">medium</sFld><sFld type="Boolean" name="_enableHA">False</sFld><sFld type="Boolean" name="_isInitialized">True</sFld><sFld type="Boolean" name="_isDataCacheSecurityEnabled">False</sFld><sFld type="Boolean" name="m_DeploymentLocked">False</sFld><fld type="System.Collections.Hashtable, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=Token" name="m_UpgradedPersistedFields" /><fld name="m_Properties" type="null" /><sFld type="String" name="m_LastUpdatedUser">SP2016\Administrator</sFld><sFld type="String" name="m_LastUpdatedProcess">psconfigui (3536)</sFld><sFld type="String" name="m_LastUpdatedMachine">SP16APP1</sFld><sFld type="DateTime" name="m_LastUpdatedTime">Time</sFld><fld name="m_LastUpdatedStackTrace" type="null" /><sFld type="Int32" name="m_LastUpdatedThreadId">31</sFld><sFld type="Guid" name="m_LastUpdatedCorrelationId">CorrelationId</sFld></object>.
    
  3. 将结果复制到记事本,然后将以下内容替换为新的SQL Server实例:

    Data Source=SPSQLRenamed;Initial Catalog=SharePoint_Config;
    
  4. 运行以下 SQL 命令以更新配置对象:

    UPDATE Objects  
    SET Properties = '[content in Notepad]'  
    WHERE ID = '[GUID of the configuration object in the query result]'  
    

步骤 5:在所有分布式缓存服务器上重新设置分布式缓存服务

为此,请按照下列步骤操作:

  1. 在一个分布式缓存服务器上,通过提升的 PowerShell 提示符运行以下 PowerShell cmdlet,正常关闭服务:

    Use-CacheCluster  
    Stop-CacheHost -Graceful -CachePort 22233 -ComputerName $env:COMPUTERNAME  
    
  2. 等待服务停止。 可以使用以下 PowerShell cmdlet 监视状态:

    Get-CacheHost  
    

    服务停止后,应该会收到与以下示例类似的结果:

    在提升的 PowerShell 提示符中运行相关的 PowerShell cmdlet,在服务停止后缓存主机输出的屏幕截图。

  3. 通过运行以下 PowerShell cmdlet 从分布式缓存群集中删除本地服务器:

    Remove-SPDistributedCacheServiceInstance  
    
  4. 通过运行以下 PowerShell cmdlet 将本地服务器还原到分布式缓存群集:

    Add-SPDistributedCacheServiceInstance  
    
  5. 打开注册表编辑器,然后验证 HKLM\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration 项的 ConnectionString 值已更新。 下面是一个示例:

    注册表编辑器的屏幕截图,验证 HKLM\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration 项的 ConnectionString 值是否已更新。

  6. 在分布式缓存群集中的所有其他服务器上重复步骤 1 到步骤 5。

步骤 6:删除对旧服务器的引用

为此,在提升的命令行管理程序窗口中SharePoint PowerShell cmdlet:

$OldServer = Get-SPServer | ?{$_.Address -eq '<The name of the SQL Server to be removed>'}  
 $OldServer.Delete()  

步骤 7:验证更改

若要验证是否数据库服务器更改,请运行以下 cmdlet:

Get-SPServer  

您应收到与以下示例类似的结果:

运行相关 cmdlet 以验证是否成功更改数据库服务器的屏幕截图。

更多信息

仍然需要帮助? 请转到 SharePoint 社区