Mostrando las entradas con la etiqueta SharePoint 2010. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SharePoint 2010. Mostrar todas las entradas

jueves, 25 de mayo de 2017

Secretos mas reconditos en SharePoint: Cadena de conexión de ConfigDB

Siempre me he preguntado y no se si usted también donde se guarda la cadena de conexión de la base de datos de configuración de la granja de SharePoint Server.  Pienso que Esto aplica para 14,15 y 16.

Pues bien necesita irse al registro de windows permedio de regedit y navegar en las carpetas siguiendo la siguiente ruta

HKEY_Local_Machine\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\

De allí depdenderá de la versión de SharePoint.  Por ejemplo si es 2015 encontrará la carpeta 15.0 y luego Secure y dentro de ella ConfigDB y alli adentro una llave llamada dsn

La ruta completa sería:

HKEY_Local_Machine\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\Secure\ConfigDB



Y el valor esperado de la cadena de conexión de la base de datos de configuración de la granja tipicamente nombrada SharePoint_Config es:


Data Source=SPSQLDB;Initial Catalog=SharePoint_Config;Integrated Security=True;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;Connect Timeout=15


Así que ya sabe donde.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

domingo, 25 de diciembre de 2016

Plan de Mantenimiento de las bases de datos para Granja de SharePoint

Aunque solo hay referencia de un Plan de mantenimiento para SharePoint 2010, SharePoint 2016 aún se corre sobre SQL Server y por tanto validar las bases de datos, reindexarlas y hacer un shrink de vez e cuando es algo que puede ayudar a mejorar el rendimiento y la salud de las bases de datos de SharePoint.

Básicamente el mantenimiento de SQL Server para SharePoint cubre los siguientes aspectos:


  1. Comprobación de la integridad de la base de datos
  2. Shrink de base de datos (ocasional cuando sea muy necesario)
  3. Desfragmentación de los índices mediante su reorganización o regeneración


Pero en vez de utilizar el asistente de SQL Server Management Studio les detallare los scripts 

Listado de bases de datos

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

Con este query se puede generar un listado de todas las bases de datos que con excel nos puede servir para generar los comandos  t-sql más facilmente.


Comprobación de la integridad de la base de datos


DBCC CHECKDB ([SharePoint_Config]) WITH PHYSICAL_ONLY 

* Limita la comprobación a la integridad de la estructura física de los encabezados de página y registro y la coherencia de la asignación de la base de datos

https://msdn.microsoft.com/en-us/library/ms176064.aspx

Shrink de base de datos (ocasional cuando sea muy necesario)
Esto aunque no es muy recomendado se hace necesario cuando necesitamos disponer de espacio libre y hay mucho espacio sin ocupar especialmente cuando se ha depurado contenido en el portal de gran volumen.  El Comando es el siguiente:


DBCC SHRINKDATABASE  ([SharePoint_Config],TRUNCATEONLY)
Desfragmentación de los índices mediante su reorganización o regeneración

Este script fue tomado del sitio abajo indicado funciona muy bien y toma como necesario la reindexación si el porcentaje de desfragmentación es mayor al 30% y si tiene más de 1000 páginas la tabla analizada de la base de datos.

-- Ensure a USE statement has been executed first.
use [WSS_Content_GUID]
go
SET NOCOUNT ON

-- adapted from "Rebuild or reorganize indexes (with configuration)" from MSDN Books Online
-- (http://msdn.microsoft.com/en-us/library/ms188917.aspx)

-- =======================================================
-- || Configuration variables:
-- || - 10 is an arbitrary decision point at which to
-- || reorganize indexes.
-- || - 30 is an arbitrary decision point at which to
-- || switch from reorganizing, to rebuilding.
-- || - 0 is the default fill factor. Set this to a
-- || a value from 1 to 99, if needed.
-- =======================================================
DECLARE @reorg_frag_thresh   float        SET @reorg_frag_thresh   = 10.0
DECLARE @rebuild_frag_thresh float        SET @rebuild_frag_thresh = 30.0
DECLARE @fill_factor         tinyint      SET @fill_factor         = 80
DECLARE @report_only         bit                SET @report_only         = 1

-- added (DS) : page_count_thresh is used to check how many pages the current table uses
DECLARE @page_count_thresh    smallint   SET @page_count_thresh   = 1000

-- Variables required for processing.
DECLARE @objectid       int
DECLARE @indexid        int
DECLARE @partitioncount bigint
DECLARE @schemaname     nvarchar(130)
DECLARE @objectname     nvarchar(130)
DECLARE @indexname      nvarchar(130)
DECLARE @partitionnum   bigint
DECLARE @partitions     bigint
DECLARE @frag           float
DECLARE @page_count     int
DECLARE @command        nvarchar(4000)
DECLARE @intentions     nvarchar(4000)
DECLARE @table_var      TABLE(
                          objectid     int,
                          indexid      int,
                          partitionnum int,
                          frag         float,
                                                  page_count   int
                        )

-- Conditionally select tables and indexes from the
-- sys.dm_db_index_physical_stats function and
-- convert object and index IDs to names.
INSERT INTO
    @table_var
SELECT
    [object_id]                    AS objectid,
    [index_id]                     AS indexid,
    [partition_number]             AS partitionnum,
    [avg_fragmentation_in_percent] AS frag,
      [page_count]                           AS page_count
FROM
    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE
    [avg_fragmentation_in_percent] > @reorg_frag_thresh
      AND
      page_count > @page_count_thresh
      AND
    index_id > 0
     

-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR
    SELECT * FROM @table_var

-- Open the cursor.
OPEN partitions

-- Loop through the partitions.
WHILE (1=1) BEGIN
    FETCH NEXT
        FROM partitions
        INTO @objectid, @indexid, @partitionnum, @frag, @page_count

    IF @@FETCH_STATUS < 0 BREAK

    SELECT
        @objectname = QUOTENAME(o.[name]),
        @schemaname = QUOTENAME(s.[name])
    FROM
        sys.objects AS o WITH (NOLOCK)
        JOIN sys.schemas as s WITH (NOLOCK)
        ON s.[schema_id] = o.[schema_id]
    WHERE
        o.[object_id] = @objectid

    SELECT
        @indexname = QUOTENAME([name])
    FROM
        sys.indexes WITH (NOLOCK)
    WHERE
        [object_id] = @objectid AND
        [index_id] = @indexid

    SELECT
        @partitioncount = count (*)
    FROM
        sys.partitions WITH (NOLOCK)
    WHERE
        [object_id] = @objectid AND
        [index_id] = @indexid

    -- Build the required statement dynamically based on options and index stats.
    SET @intentions =
        @schemaname + N'.' +
        @objectname + N'.' +
        @indexname + N':' + CHAR(13) + CHAR(10)
    SET @intentions =
        REPLACE(SPACE(LEN(@intentions)), ' ', '=') + CHAR(13) + CHAR(10) +
        @intentions
    SET @intentions = @intentions +
        N' FRAGMENTATION: ' + CAST(@frag AS nvarchar) + N'%' + CHAR(13) + CHAR(10) +
        N' PAGE COUNT: '    + CAST(@page_count AS nvarchar) + CHAR(13) + CHAR(10)

    IF @frag < @rebuild_frag_thresh BEGIN
        SET @intentions = @intentions +
            N' OPERATION: REORGANIZE' + CHAR(13) + CHAR(10)
        SET @command =
            N'ALTER INDEX ' + @indexname +
            N' ON ' + @schemaname + N'.' + @objectname +
            N' REORGANIZE; ' +
            N' UPDATE STATISTICS ' + @schemaname + N'.' + @objectname +
            N' ' + @indexname + ';'

    END
    IF @frag >= @rebuild_frag_thresh BEGIN
        SET @intentions = @intentions +
            N' OPERATION: REBUILD' + CHAR(13) + CHAR(10)
        SET @command =
            N'ALTER INDEX ' + @indexname +
            N' ON ' + @schemaname + N'.' +     @objectname +
            N' REBUILD'
    END
    IF @partitioncount > 1 BEGIN
        SET @intentions = @intentions +
            N' PARTITION: ' + CAST(@partitionnum AS nvarchar(10)) + CHAR(13) + CHAR(10)
        SET @command = @command +
            N' PARTITION=' + CAST(@partitionnum AS nvarchar(10))
    END
    IF @frag >= @rebuild_frag_thresh AND @fill_factor > 0 AND @fill_factor < 100 BEGIN
        SET @intentions = @intentions +
            N' FILL FACTOR: ' + CAST(@fill_factor AS nvarchar) + CHAR(13) + CHAR(10)
        SET @command = @command +
            N' WITH (FILLFACTOR = ' + CAST(@fill_factor AS nvarchar) + ')'
    END

    -- Execute determined operation, or report intentions
    IF @report_only = 0 BEGIN
        SET @intentions = @intentions + N' EXECUTING: ' + @command
        PRINT @intentions        
        EXEC (@command)
    END ELSE BEGIN
        PRINT @intentions
    END
      PRINT @command

END

-- Close and deallocate the cursor.
CLOSE partitions
DEALLOCATE partitions

GO
--===========================================
--[dbo].[AllDocStreams].[AllDocStreams_CI]:
-- FRAGMENTATION: 19.7798%
-- PAGE COUNT: 557169
-- OPERATION: REORGANIZE
--ALTER INDEX [AllDocStreams_CI] ON [dbo].[AllDocStreams] REORGANIZE;  UPDATE STATISTICS [dbo].[AllDocStreams] [AllDocStreams_CI];
--=============================================
--[dbo].[AllDocVersions].[AllDocVersions_PK]:
-- FRAGMENTATION: 12.833%
-- PAGE COUNT: 21959
-- OPERATION: REORGANIZE
--ALTER INDEX [AllDocVersions_PK] ON [dbo].[AllDocVersions] REORGANIZE;  UPDATE STATISTICS [dbo].[AllDocVersions] [AllDocVersions_PK];
--===================================
--[dbo].[AllLinks].[Links_Forward]:
-- FRAGMENTATION: 26.2066%
-- PAGE COUNT: 48793
-- OPERATION: REORGANIZE
--ALTER INDEX [Links_Forward] ON [dbo].[AllLinks] REORGANIZE;  UPDATE STATISTICS [dbo].[AllLinks] [Links_Forward];
--====================================
--[dbo].[AllLinks].[Links_Backward]:
-- FRAGMENTATION: 25.3887%
-- PAGE COUNT: 44059
-- OPERATION: REORGANIZE
--ALTER INDEX [Links_Backward] ON [dbo].[AllLinks] REORGANIZE;  UPDATE STATISTICS [dbo].[AllLinks] [Links_Backward];
--=======================================
--[dbo].[EventCache].[EventCache_Time]:
-- FRAGMENTATION: 25.687%
-- PAGE COUNT: 1674
-- OPERATION: REORGANIZE
--ALTER INDEX [EventCache_Time] ON [dbo].[EventCache] REORGANIZE;  UPDATE STATISTICS [dbo].[EventCache] [EventCache_Time];
--=========================================
--[dbo].[EventCache].[EventCache_ListId]:
-- FRAGMENTATION: 22.176%
-- PAGE COUNT: 3603
-- OPERATION: REORGANIZE
--ALTER INDEX [EventCache_ListId] ON [dbo].[EventCache] REORGANIZE;  UPDATE STATISTICS [dbo].[EventCache] [EventCache_ListId];
--=================================
--[dbo].[EventLog].[EventLog_Id]:
-- FRAGMENTATION: 32.5723%
-- PAGE COUNT: 16207
-- OPERATION: REBUILD
-- FILL FACTOR: 80
--ALTER INDEX [EventLog_Id] ON [dbo].[EventLog] REBUILD WITH (FILLFACTOR = 80)
--=============================================
--[dbo].[AllUserData].[AllUserData_ParentId]:
-- FRAGMENTATION: 13.7654%
-- PAGE COUNT: 1006816
-- OPERATION: REORGANIZE
--ALTER INDEX [AllUserData_ParentId] ON [dbo].[AllUserData] REORGANIZE;  UPDATE STATISTICS [dbo].[AllUserData] [AllUserData_ParentId];
--=================================
--[dbo].[Workflow].[Workflow_CI]:
-- FRAGMENTATION: 15.8641%
-- PAGE COUNT: 3385
-- OPERATION: REORGANIZE
--ALTER INDEX [Workflow_CI] ON [dbo].[Workflow] REORGANIZE;  UPDATE STATISTICS [dbo].[Workflow] [Workflow_CI];
--=======================================
--[dbo].[AuditData].[AuditData_OnItem]:
-- FRAGMENTATION: 12.085%
-- PAGE COUNT: 243318
-- OPERATION: REORGANIZE
--ALTER INDEX [AuditData_OnItem] ON [dbo].[AuditData] REORGANIZE;  UPDATE STATISTICS [dbo].[AuditData] [AuditData_OnItem];

Bueno eso es todo por ahora, con esto terminamos la serie que tiene que ver con bases de datos y la granja de SharePoint en sus versiones 2010,2013 y 2016.

SharePoint4fun!,

Juan Manuel Herrera Ocheita

lunes, 5 de diciembre de 2016

Con el vencimiento de soporte SQL Server 2008 y R2 se avecinan muchas migraciones de bases de datos y debemos de estar preparados para granjas de SharePoint 2010

Es de conocimiento general que SQL Server 2008  y R2 ya venció su soporte principal y en el 2019 vencerá el extendido, por lo que es usuario que las instalaciones de SharePoint 2010 y algunas instalaciones tempranas de SharePoint 2013 que utilizaron SQL Server 2008 sea necesario migrar por lo menos el o los servidores de SQL Server.



Más información sobre el soporte de SQL Server 2008 y R2 a continuación:

Ahora cual es el procedimiento para migrar el servidor de base de datos de una granja de SharePoint y que cosas debemos de tomar en cuenta.

Primero la referencia oficial de Microsoft:

PREREQUISITOS:


  1. Capacidades de Servidor Destino
  2. Instalación de SQL Server 2012 en Servidor Destino
    1. Características mínimas requeridas por SharePoint Enterprise (SQL Engine, Text Search, SSRS, Analysis Services, Connectivity Tools y SQL Management Studio Complete)
  3. Inventario de cuentas de servicios relacionadas con SQL Server y la granja de SharePoint 2010/3
  4. Listado de Cuentas migradas a SQL Server Nuevo 
    1. https://support.microsoft.com/en-us/kb/918992
  5. Instalación de SSRS en nuevo servidor de bases de datos para integrarlo con SharePoint 2010/3
  6. Listado de base de datos en servidor a migrar
  7. Inventario de las conexiones de Business Connectivity Service
  8. Inventario de conexiones de base de datos del web.config de las aplicaciones web de sharepoint (personalizaciones) (revisar los archivos de configuración de los web sites de los servidores front-end c:\inetpub\wwwroot\wss\...)


PROCEDIMIENTO:


  1. Realización de copias de Respaldo de todas las bases de datos de SharePoint
  2. Copia de backups
  3. Ejecución del script de restauración del Backup del resto de bases de datos.
  4. Script para mapear las cuentas de usuario para las bases de datos restauradas
  5. Cambio de alias para que apuntara al nuevo servidor
  6. Script para cambio de nivel de compatibilidad
  7. Configuración de la base de datos de SSRS
  8. Pruebas del funcionamiento de la granja
PREGUNTAS MAS FRECUENTES:

Si no tenemos actualmente configurado el SQL Alias podemos instalarlo y configurarlo posterior a la migración?

R/ Si, se instala en todos los servidores donde esta instalado SharePoint.

Podemos utilizar el mismo nombre del servidor Antiguo como el Alias del Servidor Nuevo?

R/Si, de otra forma no funciona.  El Alias de SQL Server toma precesencia sobre el DNS de Windows así que no hay conflicto entre el servidor Antiguo y el Nuevo Servidor de SQL Server.

Si el servidor antiguo de SQL Server tiene una instancia nombrada puede ser definida en el SQL Alias?

R/Si, tal cual es el nombre del servidor antiguo asi deberá nombrarse el SQL Server alias.

Cómo debo de definir el SQL Alias en los servidores de SharePoint?

R/
Alias Name: [Nombre del Servidor Antiguo incluyendo la instancia nombrada]
Port: [1433  o el Puerto definido en el servidor Nuevo de SQL Server]
Protocol: TCP/IP
Server:  [Nombre del servidor Nuevo de SQL Server o IPv4 del Servidor Nuevo]


SCRIPTS:

Copia de Respaldo

BACKUP DATABASE  [Nombre de base de datos] TO DISK = 'drive:\backup directory\NombreArchivoBaseDatos.bak'

Restuaración de la copia de Respaldo
RESTORE DATABASE [Nombre de base de datos]
FROM DISK = 'Drive:\backup\DatabaseBackupFile.bak'
WITH REPLACE, MOVE '[Nombre de base de datos]'
TO 'Drive:\Directorio_DATA\[Nombre de base de datos]_Data.mdf',
MOVE '[Nombre de base de datos]_Log' TO
'Drive:\Directorio_LOGS\[Nombre de base de datos]_Log.ldf'

Cambio de Nivel de compatiblidad de las bases de datos migradas a nuevo servidor
ALTER DATABASE [Nombre de base de datos] SET COMPATIBILITY_LEVEL = 110

Asignación de permisos a cuentas de usuarios en servidor nuevo
use [Nombre de la base de datos]
exec sp_addrolemember 'db_owner', 'cuenta de usuario';

CONCLUSIÓN FINAL:
En esta publicación motivados por el vencimiento del soporte de SQL Server 2008 y R2 vimos como migrar servidor de SQL Server de una granja existente a un Servidor nuevo utilizando SQL Alias.

Hasta la próxima, SharePoint4Fun!,


Juan Manuel Herrera Ocheita