Configuração de SQL Server para SharePoint Parte 2

Situação: Estou criando uma base de dados diretamente no SQL Server Management Studio, para depois vincular ao SharePoint e esta dando erro de collation.

image

 

Resolução: Como boa prática, sempre instale uma instância de SQL Server para o SharePoint no Collation Latin1_General_CI_AS_KS_WS, para não sofrer deste problema. Este é mais um fator da necessidade de ter uma instância somente para o SharePoint, mas isto irei comentar em outro Post.

Caso tenha este problema crie novamente uma base (Já que é rápido) configurando corretamente o Collation:

image

Incluir ícone para extensões diferentes na biblioteca do SharePoint

Situação: Estou navegando em uma biblioteca do SharePoint 2010, onde possui vários documentos, eu preciso abrir um especifico que é um arquivo PDF, só que não consigo localizar rapidamente porque não aparece o ícone do PDF, o que fazer?

Resolução: Vamos incluir o ícone para aparecer na biblioteca do SharePoint, para isto basta seguir os passos abaixo:

Primeiro saiva quais as extensões que você deseja incluir um ícone, no meu caso vou incluir um ícone para PDF, para isto acesse o endereço “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES”

image

Inclua o ícone neste local, não substitua nenhum, tome cuidado com o nome da imagem, use uma imagem GIF ou PNG de tamanho 16×16.

Neste exemplo foi incluido o arquivo “pdf16x16.gif”. Se você tiver um SharePoint 2013, vá no endereço “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\IMAGES” e copie o ícone chamado “ICPDF.PNG” ICPDF.

Após a inclusão do ícone, acesse o endereço: “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML” para editar o arquivo DOCICON.XML, mas antes faça backup dele.

image

Edite o documento DOCICON.XML e inclua esta tag antes de </ByExtension>:

image

É necessário um IISReset, depois já podes testar.

Isto é necessário para o SharePoint versão 2010, já para o 2013 não precisa, pois os ícones já existem. Segue abaixo exemplo:

image

 

Obs: Várias extensões do Office 2013 não possuem ícone no SharePoint 2010, já no SharePoint 2013 possuem. Segue abaixo exemplos e com seus ícones caso queira fazer download.

<Mapping Key=”vsdx” Value=”icvsdx.gif” EditText=”Microsoft Visio” OpenControl=”SharePoint.OpenDocuments” />ICVSDX

<Mapping Key=”vsdm” Value=”icvsdm.gif” EditText=”Microsoft Visio” OpenControl=”SharePoint.OpenDocuments” />ICVSDM

<Mapping Key=”vstm” Value=”icvstm.gif” EditText=”Microsoft Visio” OpenControl=”SharePoint.OpenDocuments” />ICVSTM

<Mapping Key=”vstx” Value=”icvstx.gif” EditText=”Microsoft Visio” OpenControl=”SharePoint.OpenDocuments” />ICVSTX

 

Fontes:

  1. http://blogs.msdn.com/b/chhopkin/archive/2013/02/14/working-with-visio-2013-files-in-sharepoint-2010.aspx
  2. http://sharepointroot.com/2008/04/08/display-link-with-icon-sharepoint/

Configuração SQL Server para SharePoint Parte 1 (autogrowth)

Situação: Estou tendo problemas com autogrowth das bases do SharePoint, isto esta gerando uma alocação grande de espaço em disco e uma lentidão na hora de redimencionar, qual a melhor prática?

Resolução: Nesta primeira parte irei ensinar uma boa pratica para configurar as bases do SharePoint com relação a parte de tamanho inicial de uma base e a configuração de crescimento da base.

A primeira coisa a se fazer é configurar a sua base Model que é uma System Database:

image

Acesso o SQL Server Management Studio, e se conecte na instância do SQL Server que conterá ou contém as bases de dados do SharePoint:

image

Clique com o botão direito encima da base model e escolha a opção Propriedades:

image

Agora configure o Initial Size (MB) do Rows para 500MB e do Log para 125MB.

Outro detalhe, configure o Autogrowth do row para 250MB em vez de percentual, e o log configure para 70MB.

image

É extremamente importante você não deixar configurado “%” para o crescimento do database:

image

É exatamente isto que irá variar demais com os documentos grandes sendo feito upload para dentro do SharePoint e sua base tendo que crescer muito mais além do que necessário, deixando a base enorme para a alocação de HD que no final das contas a quantidade de conteúdo é pouca.

Isto irá diminuir a taxa de incidentes deste tipo no serviço de Health Analyser:

image

IMPORTANTE: O SharePoint quando cria um database ele só importa a configuração do Model para Initial Size, o Autogrowth você terá que configurar base por base ou criar uma automatização. Não esqueça de fazer isto nas bases de conteúdo do SharePoint.

Fontes:

  1. MVA – Tuning SQL Server 2012 for SharePoint 2013 Jump Start
  2. Training Kit (Exam 70-667): Configuring Microsoft SharePoint 2010 by Dan Holme
  3. Best practices for SQL Server in a SharePoint Server farm

Excluindo bases “Not Responding” do SharePoint

Situação: Estava alterando a nomenclatura das bases do serviço de Search do SharePoint Foundation 2013, quando percebi que as bases “antigas” estavam aparecendo na tela de gerenciamento dos databases da Farm “Manage Databases Upgrade Status”:

image

também usei o Get-SPDatabase para confirmar e olhei o EventViewer:

image

como elas tinham sido excluidas da instância do SQL Server estavam aparencendo como “Not Responding” para o SharePoint até ai tudo correto, mas eu preciso retirar estas bases da Farm e como excluir elas com um script PowerShell?

Resolução: Criar um script PS1 para automatizar, segue abaixo:

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq ‘Microsoft.SharePoint.Powershell’}
if($snapin -eq $null)
{
    Write-Host -foregroundcolor Green “Carregando PowerShell Snapin SharePoint”
    Add-PSSnapin Microsoft.SharePoint.PowerShell
}

$title = “Exclui Bases”
$message = “Você deseja excluir a base?”

$yes = New-Object System.Management.Automation.Host.ChoiceDescription “&Yes”,”Exclui a base”
$no = New-Object System.Management.Automation.Host.ChoiceDescription “&No”, “Nao Exclui a base”

$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)

$dbs = Get-SPDatabase | Where-Object {$_.SchemaVersionXml -eq $Null} | ForEach-Object {
 
$NomeDb = $_.Name
$message = “Você deseja excluir a base $NomeDb ?”
$result = $host.ui.PromptForChoice($title, $message, $options, 0)
 
switch ($result)
{
   0 {
        Write-Host -foregroundcolor Red “Você escolheu Yes”
        $db = Get-SPDatabase | Where-Object {$_.Name -eq $NomeDb}
        $db.Delete()
        Write-Host -foregroundcolor Red “Base excluida com Sucesso”
     }
   1 {Write-Host -foregroundcolor Green “Você escolheu No”}
}
}

Resultado na console:

image

 

Fonte: http://technet.microsoft.com/en-us/library/ff730939.aspx

Distribuição de SiteCollection por Database

Situação: Estou instalando um SharePoint Server 2013 e já tenho informação que será habilitado o MySites para 2500 pessoas, também sei que vou ter no minimo 400MB utilizado para cada MySite, o que irá me totalizar em torno de 976GB consumido de storage. Por conta disto quero criar vários Databases para separar as SiteCollection corretamente e garantir performance e mais segurança para restore ou backup. Conforme as melhores práticas da Microsoft, recomenda-se 200GB por Database e 100GB por SiteCollection. Com estas informações já sei que terei 500 SiteCollection por database o que me dara 5 databases criados neste WebApplication. Como configurar para que entrem somente 500 SiteCollection por databases corretamente?

Resolução: Vamos criar os databases e configurar “Número máximo de sites que podem ser criados neste banco de dados” para 500. Segue abaixo as configurações:

Acesse a Central de Administração:

image

Vá em Gerenciar bancos de dados de conteúdo

image

Escolha o WebApplication desejado:

image

Adicione os bancos de dados conforme a sua necessidade, neste caso para esta situação iremos criar 5 databases

image

Agora vem o “segredo” configurar a quantidade máxima de SiteCollection por database. Para isto basta você clicar no “Nome” do database, por exemplo “WSS_Content_MySites_1”

image

Informe o valor de 500 no campo “Número máximo de sites que podem ser criados neste banco de dados”, e faça isto para os 5 databases:

image

Esta configuração realizada via interface, também pode ser feita via PowerShell.

No final você terá os 5 databases configurado para chegar em um total de 2500 SiteCollection separadas em 5 bases, onde cada um conterá 500 SiteCollection.

Esta separação será feita automaticamente pelo SharePoint pois ele detecta que o limite foi alcançado e começa a incluir as SiteCollection em outra Database.

Por padrão o valor do campo “Número máximo de sites que podem ser criados neste banco de dados” é de 5 mil.

image

 

Lembre-se: É importante também configurar Cota Tamplate (Modelos de Cota) para os SiteCollection com objetivo de limitar em 400MB o máximo de storage que os SiteCollection podem chegar. Isto se aplica somente a este post. Cada caso terá uma configuração especifica.

Fonte: Livro Exam Ref 70-331 e MVA (Tuning SQL Server 2012 for SharePoint 2013 Jump Start).

Monitorar Status do Database de Conteúdo

Situação: Estou com uma Farm grande de SharePoint 2010 ou 2013, onde possuo diversos databases de conteúdo (Wss_Content…), e nesta empresa existe Nagios para realizar monitoramento, onde o cliente solicita monitorar se todos as bases de conteúdo do SharePoint esta onLine ou não.

Resolução: Criar um script PowerShell para monitorar o status dos databases e retornar a informação para o Nagios.

Segue abaixo um script de exemplo:

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq ‘Microsoft.SharePoint.Powershell’}
if($snapin -eq $null)
{
    Write-Host -foregroundcolor Green “Carregando PowerShell Snapin SharePoint”
    Add-PSSnapin Microsoft.SharePoint.PowerShell
}

[String]  $StrRetorno = $null
[boolean] $erro = $false
[String]  $Version = $null

$db = Get-SPDatabase | Where {$_.Name -eq “WSS_Content_Intranet”}
$Version = $db.SchemaVersionXml
$StrRetorno = “O Status do DataBase WSS_Content_Intranet é: “

if (($Version -eq “”) -or ($Version -eq $Null))
{
    $erro = $true   
    $StrRetorno = “Não foi possível obter o Status do Database “

}

if ($erro){   
    $StrRetorno = “Ocorreu Erro | ” + $StrRetorno
    $StrRetorno
    exit 1
}else{
   
    $StrRetorno = “DataBase onLine”
    $StrRetorno
    exit 0
}

 

Testando script:

image

Agora deixei a base OffLine no SQL Server para testar o script:

image

O retorno será OffLine, no caso mostrei a mensagem “Ocorreu Erro”

image

Obs: Todo script pode ser melhorado =] Fiquem a vontade… e compartilhem… uma idéia é que pode ser feito além de um retorno somente 0 ou 1 para o Nagios.

CUIDADO!!! Tome cuidado ao utilizar o método Status do objeto que retorna o Get-SPDatabase, porque ele irá lhe retornar o valor representado para a Farm, não quer dizer que ele estando onLine a base não possa estar OffLine na instância do SQL Server.

image

image

image

Perceba que na central de status dos databases, é retornado como “Not Responding” porque a base no SQL Server esta Offline.

Este “Database Status” é utilizado por exemplo, quando você tem várias bases e precisa criar uma SiteCollection nova e colocar em uma base especifica, utilizando a interface para isto, você deixa todas OffLine menos aquela que deseja que a SiteCollection fique.

 

Abraço!

The Local farm is not accessible

Situação: Estou abrindo a console do PowerShell (Shell de Gerenciamento do SharePoint) e aparece esta mensagem. Na primeira impressão você pensa, “mas eu estou com a conta da Farm” e ela tem permissão, e já em seguida passa a dúvidar se deve rodar o famoso Add-SPShellAdmin, mas ao executar um comando qualquer para retornar o erro descobre que o Shell de Gerenciamento do SharePoint não esta usando a versão correta do .NET.

Exemplo da execução de um comando e o retorno informando que não suporta a versão 4”…”

image 

 

Resolução: Incluir o parametro “–Version” com o valor “2”.

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -Version 2 -NoExit  ” & ‘ C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ‘ “

image

Verificando se o Snapin do SharePoint já foi carregado

Situação: Tenho um script “.ps1” que preciso ficar rodando várias vezes para realizar testes, e ocorre erro toda hora que executo ele porque existe o comando pra carregar o Snapin e ele já foi carregado.. Claro! você deve estar pensando, para resolver isto poderia simplesmente ficar executando poderia ficar executando direto via Shell de Gerenciamento do SharePoint:

image

Mas caso você não queira? Ou até mesmo porque você utiliza sempre o Windows PowerShell como administração padrão de gerenciamento.

image

Simplificando, existe uma maneira de verificar se já foi carregado o Snapin, segue em abaixo em resolução.

Mensagem do Erro:

image

Resolução:

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq ‘Microsoft.SharePoint.Powershell’}
if($snapin -eq $null)
{
    Write-Host -foregroundcolor Green “Carregando PowerShell Snapin SharePoint”
    Add-PSSnapin Microsoft.SharePoint.PowerShell
}

image

Exemplo do Código utilizado para mostrar a situação:

image

Espero ter ajudado =] Abraço!

Alterar conta do Serviço “AppFabric Caching service”

Situação:

Foi instalado o SharePoint 2013, e no momento que você vai configurar a conta do serviço de “AppFabric Caching service” aparece uma mensagem informando que você não pode alterar via interface.

 

Resolução: Realizar alteração via PowerShell

$farm = Get-SPFarm

$cacheService = $farm.Services | where {$_.Name -eq “AppFabricCachingService”}

$accnt = Get-SPManagedAccount –Identity Dominio\sp_Usuario_AppFabric

$cacheService.ProcessIdentity.CurrentIdentityType = “SpecificUser”

$cacheService.ProcessIdentity.ManagedAccount = $accnt

$cacheService.ProcessIdentity.Update()

$cacheService.ProcessIdentity.Deploy()

Criar o Serviço State Service Via PowerShell

Situação:

Preciso criar o serviço de State Service do SharePoint 2013 via PowerShell com objetivo de deixar configurado uma nomenclatura de database amigável sem aquele GUID no final.

Resolução:

$stateName = “State Service”
$stateDBName = “SharePoint_State_Service_2013″
$stateDB = New-SPStateServiceDatabase -Name $stateDBName
$state = New-SPStateServiceApplication -Name $stateName -Database $stateDB
New-SPStateServiceApplicationProxy -Name “$stateName Proxy” -ServiceApplication $state –DefaultProxyGroup

image

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.