miércoles, 31 de octubre de 2012

Gestionar SharePoint con Bases de Datos creadas por el departamento de DBA.

Hola de nuevo, hoy he tenido una reunión con en la que participaban el departamento de bases de datos y el de administración de SharePoint.  Discutíamos sobre quién tiene que hacer qué y qué permisos tiene que tener quién.

Muchas veces, a los dba no les gusta que metan la mano en sus instancias, y el SharePoint es una aplicación que lo hace mucho.  Para evitar eso, os dejo unos pasitos para que el dba os cree las bases de datos y así, no necesiteis tener permisos de más en el SQL.

NOTA: Esto sólo vale para crea bases de datos de contenido nuevas, no bases de datos de service applications ni, por ejemlo, la base de datos de configuración al crear una granja.

[DBA] se refiere al adminstrador de la instancia de SQL.

[SharePoint] Se refiere al Administrador del SharePoint.

1. [DBA] Creaa la base de datos vacía con el collation sequence LATIN1_CI_AS_KS_WS y pone el usuario Administrador de la Granja como (dbo).

2. [SharePoint]  Asignar la base de datos en blanco a una aplicación Web desde la Administración Central o desde PowerShell. Con Mount-SPContentDatabase.

Mount-SPContentDatabase –name “NombreBaseDatos” –WebApplication “NombreWebApplication”

Así de sencillo.

miércoles, 24 de octubre de 2012

Backup de la Base de datos de Configuración – ¿Se puede? ¿no se puede?

       Últimamente hay mucha confusión con las mejoras de SharePoint 2010 respecto al backup de la configuración.  En 2007 no estaba soportado el restore de la base de datos de configuración, salvo algunas excepciones.  En 2010 sigue igual.

        La confusión viene por un cmdlet existente en la SharePoint Management Shell que se llama Backup-SPConfigurationDatabase.  Este cmdlet no hace backup de la base de datos de configuración sino sólo de parte de la configuración.  ¿Qué parte?
 
¿Qué guarda? Bueno pues settings de:
  • Antivirus
  • Information Rights Management (IRM)
  • Correo entrante/saliente
  • Soluciones desplegadas (wsp)
  • Configuración de los logs de diagnósitico
  • Configuración de cambio automático de contraseña para “managed accounts”.
  • Configuración de Infopath Services
  • Plantillas de Quota
  • Configuración de conexión del Active directory Domain Services
  • Rutas administradas (managed paths) para los host-named site collections.
  • Configuración del User code service (sandboxed).
¿Para qué sirve?
 
Por ejemplo, habéis hecho un piloto o una prueba de concepto de SharePoint en un sólo servidor, teneis todo lo anterior configurado y os toca ir a producción. Obviamente no vais a desplegar el SharePoint en producción en un sólo servidor, deberíais instalar una granja,  pero.. ¿otra vez a configurar todo?  NO.
Entonces serviría para copiar configuraciones entre granjas, por enjemplo, entr una granja de producción y una de contingencia, para copiar la configuracion de una instalación en un sólo servidor e ir a una topología de granja, etc…
 
¿Cómo se hace?
 
La configuración se respalda como parte de un backup Full de una granja o, si sólo queremos hacer backup de la configuración.  Con el siguiente cmdlet de PowerShell (ejecutarlo en SharePoint management Shell)


Backup-SPConfigurationDatabase -Directory \\NombreServidor\Carpetacompartida -DatabaseServer NombreServidorDB -DatabaseName NombreDBConfiguracion"

 - Recordad que este backup es de la configuración solamente no de la base de datos de configuración.

Y ¿Cómo se restaura?
 
Pensaréis que es con Restore-SPConfigurationDatabase, pues no, no existe.   Se restaura como casi todo con :

"Restore-SPFarm -Directory \\NombreServidor\Carpetacompartida\nombredelbackup.bak  -Restoremethod overwrite -ConfigurationOnly" 

Al existir el parámetro ConfigurationOnly nos permite indicar en -Directory la ubicación de un backup completo de la granja o un backup sólo de la configuración.

_______________________________________________
PS: Próximamente comentaré en qué tipos de escenarios se puede hacer un restore de la base de datos de configuración.
_______________________________________________
Referencias:
http://technet.microsoft.com/en-us/library/ee428326.aspx
http://technet.microsoft.com/en-us/library/ee428320.aspx

martes, 27 de julio de 2010

An update conflict has ocurred, and you must re-try this action

This error would appear after a disaster recovery of a whole farm, including the Configuration Database.

The point is that you have to rebuild all the Sharpoint Jobs Definition, which are stored in System Drive:\Documents and settings\all users\application data\Microsoft\Sharepoint\config\GUID Where GUID is the Configuration Database ID, if there's no GUID folder, you must create it. You can check the GUID in HKLM\Software\Microsoft\Shared Tools\Web Server Extensions\12.0\Secure\ConfigDB.


To rebuild all the Jobs Definition you should do the following:

1. stop the Windows Sharepoint Timer Service
2. Delete all existing XMLs in SystemDrive\documents and settings\all users\application data\microsoft\Sharepoint\config\GUID, if does not exist create it as shown before.

3. Start te Windows Sharepoint Timer Service.

You should see now all the XMLs refreshed.

domingo, 13 de junio de 2010

Sharepoint 2007 Explorer view not shown

When trying to access a Sharepoint list's Windows Explorer view through \\yourtWebapp.com\yourSite\yourlist\ returns Network name cannot be found, or something similar. That's because your machine is trying to use SMB instead of WebDAV, by default this option is disabled to use in the Microsoft windows server family. First of all, you should try starting WebClient service.

- Go to Start --> Run Write services.msc --> OK
- Look for the WebClient service, it should be disabled.
- Enable and start it.
- Try again.

It should be working now.

lunes, 31 de mayo de 2010

Value was either too large or too small for a UInt32.

If you received the error "Value was either too large or too small for a UInt32." When trying to browse a Sharepoint List, it seems that you have corrupt data in a content Database, for me it was a negative value in the tp_ItemCount of one of our lists.

To check this, run the following query pointing to the Content DB of the Site which is giving the error:

Select (select webs.FullUrl from webs where webs.Id = tp_WebId) as [url], *

From AllLists

Where tp_ItemCount <>

Order by tp_ItemCount


In order to solve this you should contact Microsoft support as modifying data directly in the content database is not supported. As for me was a DEV environment, I count the items and enter the value by myself. You should count as items documents and folders as well. I repeat, this is not supported, modify this at your own risk.

viernes, 28 de mayo de 2010

Search a value in every field of every table of a Data Base

In order to find a values in any filed of any table on a database you should execute the procedure I've pasted at the bottom. This is very useful when trying to verify any data in Sharepoint Content Databases, such as user attributes, email, etc...

CLOSE TABLES
DEALLOCATE TABLES

SELECT *
FROM #t

DROP TABLE #t

DECLARE @value VARCHAR(64)
DECLARE @sql VARCHAR(1024)
DECLARE @table VARCHAR(64)
DECLARE @column VARCHAR(64)

SET @value = 'Insert value here'


CREATE TABLE #t (
tablename VARCHAR(64),
columnname VARCHAR(64)
)

DECLARE TABLES CURSOR
FOR

SELECT o.name, c.name
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)
ORDER BY o.name, c.name

OPEN TABLES

FETCH NEXT FROM TABLES
INTO @table, @column

WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '
--SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) = ''' + @value + ''') '
SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') '
SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''
SET @sql = @sql + @column + ''')'

EXEC(@sql)

FETCH NEXT FROM TABLES
INTO @table, @column
END

CLOSE TABLES
DEALLOCATE TABLES

SELECT *
FROM #t

DROP TABLE #t


Hope it wold be helpful.

viernes, 19 de diciembre de 2008

Sharepoint 2007 Unknown Error

To continue with the last topic, in order to disable the famous "Unknown error" so you can know what's happening.

- Open the web.config file of the Web Application you're receiving the error, it's located in the toor path of the Web App.

- Set the callstack value to ="true".
- Set the customErrors value ="Off"
- Repeat the operation that was giving the error, you should see now a descriptive error and its stack pile.