Arquivo da categoria: SQL

Troubleshooting: Could not find stored procedure ‘sp_dboption’

Olá SharePointers,

Hoje estava montando um ambiente para testes de migração e encontrei um problema ao instalar o SharePoint Server 2007 SP2 com SQL Server 2012.

O erro foi: Could not find stored procedure ‘sp_dboption’. Essa stored procedure foi descontinuada no SQL Server 2012 e, para que a instalação funcione, é necessário criá-la novamente, utilizando o código abaixo:

USE [master]
GO
/****** Object: StoredProcedure [sys].[sp_dboption] Script Date: 12/08/2013 21:22:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [sp_dboption] — 1999/08/09 18:25
@dbname sysname = NULL, — database name to change
@optname varchar(35) = NULL, — option name to turn on/off
@optvalue varchar(10) = NULL — true or false
as
set nocount on
declare @dbid int — dbid of the database
declare @catvalue int — number of category option
declare @optcount int — number of options like @optname
declare @allstatopts int — bit map off all options stored in sysdatqabases.status
— that can be set by sp_dboption.
declare @alloptopts int — bit map off all options stored in sysdatqabases.status
— that can be set by sp_dboption.
declare @allcatopts int — bit map off all options stored in sysdatqabases.category
— that can be set by sp_dboption.
declare @exec_stmt nvarchar(max)
declare @fulloptname varchar(35)
declare @alt_optname varchar(50)
declare @alt_optvalue varchar(30)
declare @optnameIn varchar(35)
select @optnameIn = @optname
,@optname = LOWER (@optname collate Latin1_General_CI_AS)
— If no @dbname given, just list the possible dboptions.
— Only certain status bits may be set or cleared by sp_dboption.
— Get bitmap of all options that can be set by sp_dboption.
select @allstatopts=number from master.dbo.spt_values where type = ‘D’
and name = ‘ALL SETTABLE OPTIONS’
select @allcatopts=number from master.dbo.spt_values where type = ‘DC’
and name = ‘ALL SETTABLE OPTIONS’
select @alloptopts=number from master.dbo.spt_values where type = ‘D2’
and name = ‘ALL SETTABLE OPTIONS’
if @dbname is null
begin
select ‘Settable database options:’ = name
from master.dbo.spt_values
where (type = ‘D’
and number & @allstatopts <> 0
and number not in (0,@allstatopts)) — Eliminate non-option entries
or (type = ‘DC’
and number & @allcatopts <> 0
and number not in (0,@allcatopts))
or (type = ‘D2’
and number & @alloptopts <> 0
and number not in (0,@alloptopts))
order by name
return (0)
end
— Verify the database name and get info
select @dbid = dbid
from master.dbo.sysdatabases
where name = @dbname
— If @dbname not found, say so and list the databases.
if @dbid is null
begin
raiserror(15010,-1,-1,@dbname)
print ‘ ‘
select ‘Available databases:’ = name
from master.dbo.sysdatabases
return (1)
end
— If no option was supplied, display current settings.
if @optname is null
begin
select ‘The following options are set:’ = v.name
from master.dbo.spt_values v, master.dbo.sysdatabases d
where d.name=@dbname
and ((number & @allstatopts <> 0
and number not in (-1,@allstatopts)
and v.type = ‘D’
and (v.number & d.status)=v.number)
or (number & @allcatopts <> 0
and number not in (-1,@allcatopts)
and v.type = ‘DC’
and d.category & v.number <> 0)
or (number & @alloptopts <> 0
and number not in (-1,@alloptopts)
and v.type = ‘D2’
and d.status2 & v.number <> 0))
return(0)
end
if @optvalue is not null and lower(@optvalue) not in (‘true’, ‘false’, ‘on’, ‘off’)
begin
raiserror(15241,-1,-1)
return (1)
end
— Use @optname and try to find the right option.
— If there isn’t just one, print appropriate diagnostics and return.
select @optcount = count(*) ,@fulloptname = min(name)
from master.dbo.spt_values
where lower(name collate Latin1_General_CI_AS) like ‘%’ + @optname + ‘%’
and ((type = ‘D’
and number & @allstatopts <> 0
and number not in (-1,@allstatopts))
or (type = ‘DC’
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = ‘D2’
and number & @alloptopts <> 0
and number not in (-1,@alloptopts)))
— If no option, show the user what the options are.
if @optcount = 0
begin
raiserror(15011,-1,-1,@optnameIn)
print ‘ ‘
select ‘Settable database options:’ = name
from master.dbo.spt_values
where (type = ‘D’
and number & @allstatopts <> 0
and number not in (-1,@allstatopts)) — Eliminate non-option entries
or (type = ‘DC’
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = ‘D2’
and number & @alloptopts <> 0
and number not in (-1,@alloptopts))
order by name
return (1)
end
— If more than one option like @optname, show the duplicates and return.
if @optcount > 1
begin
raiserror(15242,-1,-1,@optnameIn)
print ‘ ‘
select duplicate_options = name
from master.dbo.spt_values
where lower(name collate Latin1_General_CI_AS) like ‘%’ + @optname + ‘%’
and ((type = ‘D’
and number & @allstatopts <> 0
and number not in (-1,@allstatopts))
or (type = ‘DC’
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = ‘D2’
and number & @alloptopts <> 0
and number not in (-1,@alloptopts))
)
return (1)
end
— Just want to see current setting of specified option.
if @optvalue is null
begin
select OptionName = v.name,
CurrentSetting = (case
when ( ((v.number & d.status) = v.number
and v.type = ‘D’)
or (d.category & v.number <> 0
and v.type = ‘DC’)
or (d.status2 & v.number <> 0
and v.type = ‘D2’)
)
then ‘ON’
when not
( ((v.number & d.status) = v.number
and v.type = ‘D’)
or (d.category & v.number <> 0
and v.type = ‘DC’)
or (d.status2 & v.number <> 0
and v.type = ‘D2’)
)
then ‘OFF’
end)
from master.dbo.spt_values v, master.dbo.sysdatabases d
where d.name=@dbname
and ((v.number & @allstatopts <> 0
and v.number not in (-1,@allstatopts) — Eliminate non-option entries
and v.type = ‘D’)
or (v.number & @allcatopts <> 0
and v.number not in (-1,@allcatopts) — Eliminate non-option entries
and v.type = ‘DC’)
or (v.number & @alloptopts <> 0
and v.number not in (-1,@alloptopts) — Eliminate non-option entries
and v.type = ‘D2’)
)
and lower(v.name) = lower(@fulloptname)
return (0)
end
select @catvalue = 0
select @catvalue = number
from master.dbo.spt_values
where lower(name) = lower(@fulloptname)
and type = ‘DC’
— if setting replication option, call sp_replicationdboption directly
if (@catvalue <> 0)
begin
select @alt_optvalue = (case lower(@optvalue)
when ‘true’ then ‘true’
when ‘on’ then ‘true’
else ‘false’
end)
select @alt_optname = (case @catvalue
when 1 then ‘publish’
when 2 then ‘subscribe’
when 4 then ‘merge publish’
else quotename(@fulloptname, ””)
end)
select @exec_stmt = quotename(@dbname, ‘[‘) + ‘.dbo.sp_replicationdboption’
EXEC @exec_stmt @dbname, @alt_optname, @alt_optvalue
return (0)
end
— call Alter Database to set options
— set option value in alter database
select @alt_optvalue = (case lower(@optvalue)
when ‘true’ then ‘ON’
when ‘on’ then ‘ON’
else ‘OFF’
end)
— set option name in alter database
select @fulloptname = lower(@fulloptname)
select @alt_optname = (case @fulloptname
when ‘auto create statistics’ then ‘AUTO_CREATE_STATISTICS’
when ‘auto update statistics’ then ‘AUTO_UPDATE_STATISTICS’
when ‘autoclose’ then ‘AUTO_CLOSE’
when ‘autoshrink’ then ‘AUTO_SHRINK’
when ‘ansi padding’ then ‘ANSI_PADDING’
when ‘arithabort’ then ‘ARITHABORT’
when ‘numeric roundabort’ then ‘NUMERIC_ROUNDABORT’
when ‘ansi null default’ then ‘ANSI_NULL_DEFAULT’
when ‘ansi nulls’ then ‘ANSI_NULLS’
when ‘ansi warnings’ then ‘ANSI_WARNINGS’
when ‘concat null yields null’ then ‘CONCAT_NULL_YIELDS_NULL’
when ‘cursor close on commit’ then ‘CURSOR_CLOSE_ON_COMMIT’
when ‘torn page detection’ then ‘TORN_PAGE_DETECTION’
when ‘quoted identifier’ then ‘QUOTED_IDENTIFIER’
when ‘recursive triggers’ then ‘RECURSIVE_TRIGGERS’
when ‘default to local cursor’ then ‘CURSOR_DEFAULT’
when ‘offline’ then (case @alt_optvalue when ‘ON’ then ‘OFFLINE’ else ‘ONLINE’ end)
when ‘read only’ then (case @alt_optvalue when ‘ON’ then ‘READ_ONLY’ else ‘READ_WRITE’ end)
when ‘dbo use only’ then (case @alt_optvalue when ‘ON’ then ‘RESTRICTED_USER’ else ‘MULTI_USER’ end)
when ‘single user’ then (case @alt_optvalue when ‘ON’ then ‘SINGLE_USER’ else ‘MULTI_USER’ end)
when ‘select into/bulkcopy’ then ‘RECOVERY’
when ‘trunc. log on chkpt.’ then ‘RECOVERY’
when ‘db chaining’ then ‘DB_CHAINING’
else @alt_optname
end)
if @fulloptname = ‘dbo use only’
begin
if @alt_optvalue = ‘ON’
begin
if databaseproperty(@dbname, ‘IsSingleUser’) = 1
begin
raiserror(5066,-1,-1);
return (1)
end
end
else
begin
if databaseproperty(@dbname, ‘IsDBOOnly’) = 0
return (0)
end
end
if @fulloptname = ‘single user’
begin
if @alt_optvalue = ‘ON’
begin
if databaseproperty(@dbname, ‘ISDBOOnly’) = 1
begin
raiserror(5066,-1,-1);
return (1)
end
end
else
begin
if databaseproperty(@dbname, ‘IsSingleUser’) = 0
return (0)
end
end
select @alt_optvalue = (case @fulloptname
when ‘default to local cursor’ then (case @alt_optvalue when ‘ON’ then ‘LOCAL’ else ‘GLOBAL’ end)
when ‘offline’ then ”
when ‘read only’ then ”
when ‘dbo use only’ then ”
when ‘single user’ then ”
else @alt_optvalue
end)
if lower(@fulloptname) = ‘select into/bulkcopy’
begin
if @alt_optvalue = ‘ON’
begin
if databaseproperty(@dbname, ‘IsTrunclog’) = 1
select @alt_optvalue = ‘RECMODEL_70BACKCOMP’
else
select @alt_optvalue = ‘BULK_LOGGED’
end
else
begin
if databaseproperty(@dbname, ‘IsTrunclog’) = 1
select @alt_optvalue = ‘SIMPLE’
else
select @alt_optvalue = ‘FULL’
end
end
if lower(@fulloptname) = ‘trunc. log on chkpt.’
begin
if @alt_optvalue = ‘ON’
begin
if databaseproperty(@dbname, ‘IsBulkCopy’) = 1
select @alt_optvalue = ‘RECMODEL_70BACKCOMP’
else
select @alt_optvalue = ‘SIMPLE’
end
else
begin
if databaseproperty(@dbname, ‘IsBulkCopy’) = 1
select @alt_optvalue = ‘BULK_LOGGED’
else
select @alt_optvalue = ‘FULL’
end
end
— construct the ALTER DATABASE command string
select @exec_stmt = ‘ALTER DATABASE ‘ + quotename(@dbname) + ‘ SET ‘ + @alt_optname + ‘ ‘ + @alt_optvalue + ‘ WITH NO_WAIT’
EXEC (@exec_stmt)
if @@error <> 0
begin
raiserror(15627,-1,-1)
return (1)
end
return (0) — sp_dboption

 

Abraços! 😀

SharePoint: SQL Server MAXDOP = 1 – é realmente necessário?

Olá SharePointers,

Hoje vou falar um pouco do MAXDOP (já ouviram falar?). MAXDOP é a propriedade no SQL Server que define o grau máximo de paralelismo (aka: Max Degree Of Parallelism) para as queries do SQL.

A microsoft recomenda que, para instâncias do SQL dedicadas ao SharePoint, esse valor seja fixado com 1 para uma performance otimizada (Storage and SQL Server capacity planning and configuration (SharePoint Server 2010)). Muito embora, até a versão 2010 do SharePoint encontramos várias instalações com configurações diferentes desse valor, isso não era um “blocker”. Na versão 2013 do SharePoint, isso passou a ser um blocker de instalação. Veja abaixo:

New-SPConfigurationDatabase : This SQL Server instance does not have the required "max degree of parallelism" setting of 1. Database provisioning operations will continue to fail if "max degree of parallelism" is not set 1 or the current account does not have permissions to change the setting. See documentation for details on manually changing the setting

3225_MAXDOP_0_png-550x0

Ainda de acordo com a Microsoft, o MAXDOP serve para mostrar para o SQL como aplicar o paralelismo, ou seja, se o MAXDOP estiver setado em 0 (valor default) o SQL detecta o melhor grau de paralelismo de acordo com a quantidade de CPUs disponíveis.

Se estiver setado em 1, os “parallels plans” são desabilitados por default.

Qualquer valor diferente disso serve para definir um grau específico.

 

Mas então o SharePoint não utiliza paralelismo? Certo?

ERRADO! Por questões de performance a melhor opção de performance é desabilitar esse recurso, mas, quando o SharePoint precisa, ele define Hints de paralelismo direto nas stored procedures (mais de 150 SP’s !!).

 

Para mais informações sobre o assunto, acessem os links abaixo:

 

Erro: the log scan number passed to log scan in database is not valid–SharePoint 2010 e SQL Server

Olá SharePointers,

Hoje passei por um problema assim:

Ligava a máquina, abrir a Central Admin do SharePoint e aparecia o erro: Could not connect to configuration database.

A primeira coisa que pensei foi em iniciar o Serviço de SQL Server do SharePoint. Cliquei em iniciar o serviço e deu erro.

Olhando no Event Viewer, o erro abaixo estava logado:

image

No fim, a solução foi bem mais simples do que pensei.

 

Para resolver o problema, você precisa entrar na pasta C:Program FilesMicrosoft Office Servers14.0DataMSSQL10.SHAREPOINTMSSQLTemplate Data e copiar os arquivos Model.mdf e ModelLog.ldf para a pasta C:Program FilesMicrosoft Office Servers14.0DataMSSQL10.SHAREPOINTMSSQLDATA.

OBS: Esses caminhos são válidos quando você utilizou a instalação STAND ALONE do SharePoint. Caso contrário, você tem que ir na pasta da instância do seu SQL Server e copiar os arquivos da pasta Template Data para Data.

Abraços e um feliz ano novo a todos Alegre!

Cannot generate SSPI context e Cannot Connect to Master Database–Instalando SharePoint 2010

Olá,

Tentando instalar o SharePoint, aparecia um erro falando Cannot Connect to Database Master.

Inicialmente, achamos que era falta de permissões para os usuários que precisam ter acesso security admin  e dbcreator. Não era isso, mas se quiser saber como resolver esse erro, veja o link: http://blogs.technet.com/b/tothesharepoint/archive/2011/01/12/troubleshooting-sharepoint-configuration-error-cannot-connect-to-database-master-at-server-name.aspx

 

Entrei no Event Viewer e achei o erro abaixo:

image

image

 

Voltando um pouco ao cenário, a máquina que estavamos instalando o SQL, foi formatada e voltou com o mesmo nome. Já existia um SQL Server instalado com a conta do Domain Admin.

 

Solução

Quando o serviço do SQL parou, ele removeu automaticamente o SPN do SQL. Ao instalarmos novamente, a conta – que não era domain admin – não tinha permissões para gravar o SPN.

Criando o ponteiro, tudo passou a funcionar.

Para saber como criar o SPN para o SQL, veja aqui: http://msdn.microsoft.com/en-us/library/ms191153.aspx

 

Boa sorte!!  Smiley piscando

Configurar Remote Blob Storage (RBS) no SharePoint 2010

Olá SharePointers,

Muitos possuem dúvidas de como instalar e configurar o RBS (Remote Blob Storage) no SharePoint Server 2010 e SQL Server.

Vamos as tips:

Não é possível habilitar o FILESTREAM em uma versão 32 bits do SQL rodando em um Sistema Operacional 64 bits.

Para habilitar, na instalação do SQL Server, basta ativar como na imagem abaixo:

SQL Hom 15

Caso você já tenha o SQL Instalado, abra o SQL Configuration Manager, Clique em SQL Server Services, clique na instância que deseja configurar com o botão direito do mouse e escoolha Propriedades.

image

Na aba Filestream, configure como na imagem abaixo e clique em OK.

image

Abra o programa SQL Management Studio, e rode o seguinte código TRANSACT-SQL :

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

Clique em Executar e depois Reinicie o serviço do SQL Server.

 

PRONTO! O SQL Server está pronto para receber o Remote Blob. Para saber mais sobre boas práticas, veja esse artigo: http://msdn.microsoft.com/en-us/library/cc645923.aspx.

 

A segunda etapa do arquivo é habilitar um armazenamento de remote blob para cada Content Database do SharePoint.

Para isso, abra o SQL Management Studio, escolha o Content Database necessário e rode as seguintes Queries:

 

ATENÇÃO!!! Lembre-se de alterar o nome do Banco WSS_Content para o seu banco de conteúdos e alterar a pasta c:blobstore para a pasta de destino onde os arquivos serão armazenados.

 

use [WSS_Content]
if not exists 
(select * from sys.symmetric_keys 
where name = N'##MS_DatabaseMasterKey##')
create master key encryption by password = N'Admin Key Password !2#4'
use [WSS_Content]
if not exists 
(select groupname from sysfilegroups 
where groupname=N'RBSFilestreamProvider')
alter database [WSS_Content]
add filegroup RBSFilestreamProvider contains filestream
use [WSS_Content] 
alter database [WSS_Content]
 add file (name = RBSFilestreamFile, filename = 
'c:Blobstore') 
to filegroup RBSFilestreamProvider

 

Agora, em cada Servidor Web, faça o download do arquivo RBS_x64.msi disponível no link http://go.microsoft.com/fwlink/?LinkID=188395&clcid=0x409.

No primeiro servidor Web, faça o procedimento abaixo:

Rode o comando abaixo no prompt de comando. Lembre-se de alterar o nome do banco de dados “WSS_Content” e da Instância do Banco de dados “DBInstanceName”.

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME=”WSS_Content” DBINSTANCE=”DBInstanceName” FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

Para os próximos, faça:

Faça o download do arquivo RBS.msi disponível em http://go.microsoft.com/fwlink/?LinkID=188395&clcid=0x409.

Rode o comando abaixo. Lembre-se de alterar o nome do banco de dados “WSS_Content” e da Instância do Banco de dados “DBInstanceName”.

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME=”WSS_Content” DBINSTANCE=”DBInstanceName” ADDLOCAL=Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer

Repita o procedimento em todos os servidores restantes.

 

Último passo (e não menos importante) – Habilitar o RBS para cada Banco de dados de Conteúdo

Abra o SharePoint 2010 Management Shell.

Digite o comando abaixo:

$cdb = Get-SPContentDatabase <ContentDatabaseName>
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Installed()
$rbss.Enable()
$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
$rbss

Troque o ContentDatabaseName pelo nome do banco de dados de conteúdo que deseja alterar.

 

Algumas referências:

Install e Configure RBS: http://technet.microsoft.com/en-us/library/ee748631.aspx

Overview of RBS: http://technet.microsoft.com/en-us/library/ee748649.aspx

Plan for RBS: http://technet.microsoft.com/en-us/library/ff628583.aspx

Enable and Configure FILESTREAM: http://msdn.microsoft.com/en-us/library/cc645923.aspx

 

 

Isso aí SharePointers! Chegamos ao fim de mais um tutorial. Espero ter ajudado Smiley piscando