Dica do Mês – Utilizando a Trace Flag 9292 para exibir objetos estatísticos úteis


 

Olá comunidade, boa tarde.

Tudo bem? Estamos se aproximando dos últimos dias de férias ou recesso para grande maioria dos professores e profissionais de educação espalhados por todo Brasil. E ai, já esta preparado para voltar a luta? Posso dizer tranquilamente que sim, eu estou pronto para voltar a conviver com meus alunos e amigos de trabalho.

Antes de começarmos a falar sobre o post de hoje, nada mais justo começar agradecendo como de costume a você está aqui neste momento acessando meu blog. Espero que possa ter encontrado o que precisa, bem como, esteja gostando do conteúdo publicado, fique a vontade para entrar em contato expressando suas opiniões e demais pensamentos.

Neste novo post da sessão Dica do Mês, vou apresentar um recurso que imagino ser conhecido por muitos ou principalmente pelos profissionais de banco de dados, estou me referindo as Trace Flag ou sinalizador de rastreamento em português.

Você já ouvir falar sobre isso ou já utilizou? Eu imagino que sim pois aqui no meu blog diversos posts e artigos foram publicado ao longo dos últimos anos sobre este tipo de recurso. Hoje mais especificamente vou destacar o uso da Trace Flag 9292, por acaso você já utilizou em algum momento esta trace flag?

Bom independente da sua reposta vamos conhecer um pouco mais sobre ela, sua forma de uso e como poderá nos ajudar a entender ainda mais o funcionamento das estatísticas e seus chamados objetos úteis para análise do plano de execução.

E ai esta curioso para saber um pouco sobre este recurso? Eu estou, sendo assim, vamos em frente, seja bem vindo ao post Dica do Mês – Utilizando a Trace Flag 9292 para exibir objetos estatísticos úteis.

Vamos em frente…..


Introdução

Todos sabemos que as estatísticas desempenham um papel muito importante dentro do SQL Server, como também, sabemos que as estatísticas são usadas pelo otimizador de consultas para gerar o plano de execução para cada consulta.
Então a questão é, podemos verificar qual objeto estatístico é útil para a execução da consulta? Sim, usando o Trace Flag do SQL Server 9292. Este é um do sinalizador de rastreamento que pode ser usado durante a solução de problemas.
Esse sinalizador de rastreamento é usado para obter o relatório sobre objetos de estatísticas considerados como “interessantes” ou “úteis” pelo otimizador de consulta durante a compilação ou recompilação de consulta.

Adicionada ao Microsoft SQL Server 2008 após a instalação do service pack 1 e mantida até as atuais versões, no momento em tomamos a decisão de utilizar a Trace Flag 9292, orientamos o SQL Server a apresentar todos os objetos estatísticos considerados úteis por parte do plano de execução para realizar o processamento e retorno dos dados.

O uso da Trace Flag 9292 dentro de uma sessão ou query específica, nos ajuda a entender e conhecer como as estatísticas e seus elementos podem mudar totalmente a maneira que o plano de execução é idealizado, armazenado e processado.

Através dela podemos obter um relatório sobre as estatíticas para cada objeto envolvido em nossa query, onde estes supostos objetos devem ser considerados úteis, ou melhor dizendo válidos e aplicáveis no decorrer do caminho realizado até a apresentação do resultado.

Esta é uma trace flag que pode ser usada durante a resolução de problemas, onde sua função é apresentar na guia de mensagens do Management Studio, um pequeno cabeçalho contendo informações estatísticas sobre cada componente útil e válido para formas os dados estatísticos de processamento da query. Este cabeçalho é conhecido como Stats header loaded.

Para ativar a trace flag utilize o comando DBCC TraceON (9292) ou DBCC TraceOFF (9292) para desativar, ou se preferir utilize a opção QueryTraceOn em sua respectiva query.

Agora que já conhecemos um pouco mais sobre os conceitos desta trace flag, chegou a hora de colocar as mãos no teclado e conhecer melhor o funcionamento da flag 9292 e de que forma ela poderá impactar o trabalho do Microsoft SQL Server, nos permitindo identificar os objetos úteis processados ou candidatos a processamento por parte do Query Processor em conjunto com Execution Plan.

Preparando o ambiente

Nosso ambiente será bastante simples, basicamente criaremos um banco de dados denominado DBTrace9292, constituído de uma tabela denominada TBTrace9292, para tal utilizaremos o Bloco de Código 1 que apresenta a criação dos respectivos objetos:

— Bloco de Código 1 —
— Criando o Banco de Dados DBTrace9292 —
Create Database DBTrace9292
Go

— Acessando —
Use DBTrace9292
Go

— Criando a Tabela TBTrace9292 —
Create Table TBTrace9292
(Codigo Int Identity(1,1) Primary Key,
Valores Int,
Descricao Varchar(100))
Go

Após a criação dos objetos básicos, nosso próximo passo será a criação de índice nonclustered para coluna Valores que nos permitirá fazer o uso de estatísticas de processamento para esta coluna durante o processo de inserção de dados, conforme apresenta o Bloco de Código 2 apresentado abaixo:

— Bloco de Código 2 —
— Criando o Índice NonClustered IND_TBTrace9292Valores —
Create NonClustered Index IND_TBTrace9292Valores on TBTrace9292(Valores)
Go

— Inserindo uma linha de registro na Tabela TBTrace9292 —
Insert Into TBTrace9292
Values(2000,’pedrogalvaojunior.wordpress.com’)
Go

— Inserindo 1.000 linhas de registros na Tabela TBTrace9292 —
Insert Into TBTrace9292
Values(4000,’pedrogalvaojunior.wordpress.com’)
Go 1000

Note que existir uma pequena mais importante diferença entre os dois Inserts, no primeiro estamos inserindo uma linha de registro na tabela TBTrace9292. No segundo criamos em tempo de execução um pequeno bloco de inserção de linhas, sendo este processado 1.000 vezes, inserindo então 1.000 linhas.

Seguindo em frente, o Bloco de Código 3 será utilizado para criarmos uma Stored Procedure denominada P_PesquisarValores como forma para buscar os respectivos registros armazenados na tabela TBTrace9292. A seguir apresento o Bloco de Código 3:

— Bloco de Código 3 –
— Criando a Stored Procedure P_PesquisarValores —
Create Procedure P_PesquisarValores @Valor int
As
Begin
Select Descricao from TBTrace9292
Where Valores = @Valor
OPTION (RECOMPILE)
End
Go

Se você for como eu, normalmente gosto de fazer uma análise de código antes de colocar em prática no meu ambiente, sendo assim, vamos lá. Analisando de forma superficial a Stored Procedure P_PesquisarValores a princípio não apresenta nada muito especial ou de grande complexidade em seu código, mas sim o uso de opção Recompile que justamente vai orientar o plano de execução a recompilar a  P_PesquisarValores no momento da sua execução, forçando assim que a cada execução um novo plano de execução seja criado em conjunto com uma nova análise estatística e seus demais elementos.

O próximo passo consiste na pesquisa de um dos valores armazenados na tabela TBTrace9292 através da execução e processamento da Stored Procedure P_PesquisarValores. Para este passo vamos utilizar o Bloco de Código 4 a seguir, antes de sua execução recomendo habilitar a apresentação do Plano de Execução Atual no SQL Server Management Studio através do botão Include Actual Execution Plan ou simplesmente através da tecla de atalho CTRL+M.

— Bloco de Código 4 —
— Habilitando as TraceFlags 9292 e 3604 —
DBCC TraceOn(9292,3604,-1)
Go

Dica: Utilize o comando DBCC TraceStatus WITH NO_INFOMSGS para verificar quais Trace Flags estão habilitadas em qual nível de escopo.

— Execuntando a Stored Procedure P_PesquisarValores —
Exec P_PesquisarValores 4000
Go

Pois bem, após a execução do Bloco de Código 4, o Microsoft SQL Server realizou o processamento da nossa Stored Procedure P_PesquisarValores realizando uma busca de todas as linhas de registros que possuem o valor 4.000, onde obrigatoriamente foram retornadas 1.000 linhas de registros.

Até ai nada de novo ou surpreende, o que justamente eu quero mostrar para vocês é o que o Management Studio apresenta na guia Messages após o processamento do Bloco de Código 4, conforme apresenta a Figura 1 abaixo:

Note que o cabeçalho retornado pela Trace Flag 9292 conhecido como Stats header loaded esta apresentando os objetos realmente utilizados para o processamento de nossa query, bem como, os objetos considerados úteis e necessários para criação, compilação e processamento do plano de execução envolvidos na execução, sendo eles:

  • Database: DBTrace9292;
  • Table: TBTrace9292,
  • Index: IND_TBTrace9292Valores, sendo este do tipo Nonclustered;
  • Column: Valores; e
  • EmptyTable: False, representa que a tabela possui linhas de registro.

Perfeito, perfeito, ai esta a prova que a Trace Flag 9292 nos permite identificar de forma simples, coerente e muito intuitiva todos os objetos envolvidos na execução de uma query, stored procedure ou demais elementos que permitem a criação de um plano de execução.

Desta forma, chegamos ao final de mais um post, tendo a sensação de dever cumprido, espero que você tenha gostado, como sempre o Microsoft SQL Server nos surpreende com a sua capacidade e potencialidade de recursos.


Referências

https://thomaslarock.com/2016/06/sql-server-Trace-flags/

https://pedrogalvaojunior.wordpress.com/2016/02/26/02-para-que-serve/

DBCC TRACEOFF (Transact-SQL)

DBCC TRACEON (Transact-SQL)

DBCC TRACESTATUS (Transact-SQL)

EXECUTE (Transact-SQL)

Query Hints (Transact-SQL)

Post Anteriores

https://pedrogalvaojunior.wordpress.com/2017/05/23/conhecendo-e-aplicando-o-uso-de-atualizacao-de-estatisticas-incrementais/

https://pedrogalvaojunior.wordpress.com/2017/04/13/dica-do-mes-microsoft-sql-server-identificando-as-transacoes-que-estao-utilizando-o-transact-log/

https://pedrogalvaojunior.wordpress.com/2017/03/01/dica-do-mes-microsoft-sql-server-2016-sp1-novo-argumento-use-hint-disponivel-para-query-hints/

https://pedrogalvaojunior.wordpress.com/2017/01/16/dica-do-mes-conhecendo-a-nova-dmf-sys-dm_exec_input_buffer-no-microsoft-sql-server-2016/

https://pedrogalvaojunior.wordpress.com/2016/11/28/dica-do-mes-sql-server-2016-sp1-comando-create-or-alter/

https://pedrogalvaojunior.wordpress.com/2016/10/24/dica-do-mes-sql-server-2016-obtendo-informacoes-sobre-o-cache-de-execucao-de-funcoes/

Conclusão

Muitas vezes temos dificuldade em entender como um determinado recurso ou funcionalidade esta sendo utilizada pelo Microsoft SQL Server, com também, de que maneira este elemento poderá impactar nosso ambiente.

Neste post foi possível apresentar como a Trace Flag 9292 nos permite identificar quais objetos estão sendo utilizando durante o processamento e execução de uma determinada query. Um recurso de fácil configuração tanto para ser ativado como também desativado a qualquer momento ou necessidade.

Recomendo que você realize diversos testes e validações antes de fazer qualquer tipo de uso de uma trace flag em seu ambiente de produção, isso também se aplica a Trace Flag 9292.

Agradecimentos

Mais uma vez obrigado por sua visita, agradeço sua atenção, fique a vontade para enviar suas críticas, sugestões, observações e comentários.

Um forte abraço, nos encontramos em breve com mais um post da sessão Dica do Mês.

Valeu….

Short Scripts – Março 2017


Hoje é sexta – feira, sexta – feira…

Salve, salve comunidade e amantes de bancos de dados e SQL Server, Tudo bem? Mais uma final de semana próximo após uma longa semana de muito trabalho, se eu for falar de muito trabalho, sinceramente  esta semana foi complicada, repleta de novidades e muita troca de conhecimento.

Conforme o prometido no final de 2016, estou retornando com o primeiro post da sessão Short Scripts, sessão criada a alguns anos no meu blog que lentamente esta conseguindo ajudar diversos profissionais da área de banco de dados na busca por exemplos de códigos que possam solucionar ou elucidar na resolução de um determinado problema.

O post de hoje

Como já destaquei acima, este é o primeiro post de 2017 dedicado exclusivamente a sessão Short Scripts, na relação de scritps selecionados para hoje, você vai poder encontrar códigos relacionados com os seguintes assuntos:

  • Auditoria,
  • Comando Intersect,
  • Comando OpenQuery,
  • Comando Order By,
  • Datatype Char,
  • Datatype Int,
  • DMF Sys.dm_exec_sessions,
  • DMV Sys.system_internals_partitions,
  • DMV Sys.system_internals_allocation_units,
  • Função Substring,
  • Índices,
  • Informações sobre conexão de usuário,
  • Páginas de Dados,
  • Trigger, e
  • Variáveis.

Então mãos no teclado, a seguir apresento os códigos e exemplos selecionados para o Short Script – Março 2017. Vale ressaltar que todos os scripts publicados nesta sessão são devidamente testados antes de serem publicados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, vale sim todo cuidado possível para evitar maiores problemas. Fique a vontade para compartilhar, comentar, melhorar cada um destes códigos.

Short Scripts

— Short Script 1 – Realizando Auditoria in Live —

SELECT [Spid] = session_Id
, ecid
, [Database] = DB_NAME(sp.dbid)
, [User] = nt_username
, [Status] = er.status
, [Wait] = wait_type
, [Individual Query] = SUBSTRING (qt.text,
er.statement_start_offset/2,
(CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset END –
er.statement_start_offset)/2)
,[Parent Query] = qt.text
, Program = program_name
, Hostname
, nt_domain
, start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50              — Ignore system spids.
AND session_Id NOT IN (@@SPID)     — Ignore this current statement.
ORDER BY 1, 2
Go

— Short Script 2 – Utilizando comando Intersect com Datatypes Char e Int —

Create Table #A (x Char(2));
Go
Insert Into #A Values (‘1’);
Insert Into #A Values (‘6’);
Insert Into #A Values (‘2’);
Insert Into #A Values (‘3’);
Insert Into #A Values (‘5’);
Insert Into #A Values (‘5’);
Insert Into #A Values (‘6’);
Insert Into #A Values (‘9’);
Go
Create Table #B (M BigInt);
Go
Insert Into #B Values(5);
Insert Into #B Values(5);
Insert Into #B Values(6);
Insert Into #B Values(7);
Insert Into #B Values(7);
Go
— (Select #1)
SELECT x AS ‘Select #1’ FROM #A
INTERSECT SELECT M FROM #B
Go
— (Select #2)
SELECT DISTINCT(x) AS ‘Select #2’
FROM #A LEFT OUTER JOIN #B
ON #A.x = #B.M
Go
— (Select #3)
SELECT DISTINCT(x) AS ‘Select #3’
FROM #A LEFT OUTER JOIN #B
ON #A.x = #B.M
Go
— (Select #4)
SELECT DISTINCT(x) AS ‘Select #4’
FROM #A INNER JOIN #B
ON #A.x = #B.M
Go
— (Select #5)
SELECT x AS ‘Select #5’
FROM #A INNER JOIN #B
ON #A.x = #B.M
Go
— Short Script 3 – Utilizando comando OpenQuery com variáveis —
— Valores Básicos —
DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT  @VAR = ‘teste’
SELECT  @TSQL = ‘SELECT * FROM OPENQUERY(MeuLinkedServer,”SELECT * FROM MinhaTabela WHERE User = ””’ + @VAR + ”””’)’
EXEC (@TSQL)
Go
— Query Complexa —
DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = ‘MyLinkedServer’
SET @OPENQUERY = ‘SELECT * FROM OPENQUERY(‘+ @LinkedServer + ‘,”’
SET @TSQL = ‘SELECT au_lname, au_id FROM pubs..authors”)’
EXEC (@OPENQUERY+@TSQL)
— Use o Sp_executesql procedimento armazenado —
DECLARE @VAR char(2)
SELECT  @VAR = ‘CA’
EXEC MyLinkedServer.master.dbo.sp_executesql
N’SELECT * FROM pubs.dbo.authors WHERE state = @state’,
N’@state char(2)’,
@VAR
Go
— Short Script 4 – Realizando order by com base na função SubString —
Declare @Tabela Table
(Codigo VarChar(15))
Insert Into @Tabela Values(‘191-XXX-003’)
Insert Into @Tabela Values(‘192-XXX-003’)
Insert Into @Tabela Values(‘193-XXX-003’)
Insert Into @Tabela Values(‘194-XXX-003’)
Insert Into @Tabela Values(‘195-XXX-003’)
Insert Into @Tabela Values(‘191-XXX-001’)
Insert Into @Tabela Values(‘192-XXX-001’)
Insert Into @Tabela Values(‘193-XXX-001’)
Insert Into @Tabela Values(‘194-XXX-001’)
Insert Into @Tabela Values(‘195-XXX-001’)
Insert Into @Tabela Values(‘191-XXX-002’)
Insert Into @Tabela Values(‘192-XXX-002’)
Insert Into @Tabela Values(‘193-XXX-002’)
Insert Into @Tabela Values(‘194-XXX-002’)
Insert Into @Tabela Values(‘195-XXX-002’)
Select * from @Tabela
Order By SubString(codigo,Len(Codigo)-2,3) Asc
Go
— Short Script 5 – Monitorando querys em execução —
SELECT
DES.SESSION_ID,
DES.CPU_TIME,
DES.READS,
DES.WRITES,
DES.LOGICAL_READS,
DES.ROW_COUNT,
DER.SESSION_ID,
DES.STATUS,
DES.HOST_NAME,
DES.PROGRAM_NAME,
DES.LOGIN_NAME,
DES.ORIGINAL_LOGIN_NAME,
DEC.CLIENT_NET_ADDRESS,
DEC.AUTH_SCHEME,
DEC.NET_TRANSPORT,
SUBSTRING(T.[TEXT], DER.[STATEMENT_START_OFFSET] / 2,
COALESCE(NULLIF(DER.[STATEMENT_END_OFFSET], – 1) / 2, 2147483647)) AS COMANDO
FROM
SYS.DM_EXEC_SESSIONS AS DES
INNER JOIN SYS.DM_EXEC_REQUESTS DER
ON DER.BLOCKING_SESSION_ID = DES.SESSION_ID
INNER JOIN SYS.DM_EXEC_CONNECTIONS DEC
ON DEC.SESSION_ID = DES.SESSION_ID
INNER JOIN SYS.DM_EXEC_REQUESTS DER2
ON DER2.SESSION_ID = DES.SESSION_ID
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(DER.[SQL_HANDLE]) AS T
GO
— Short Script 6 – Identificando tabelas e suas respectivas páginas de dados —
— Exemplo 1: —
SELECT P.partition_id,
OBJECT_NAME(P.object_id) As ObjectName,
U.allocation_unit_id,
SU.First_Page,
SU.Root_Page,
SU.First_IAM_Page
From Sys.Partitions As P INNER JOIN Sys.Allocation_Units As U
ON P.hobt_id = U.container_id
Inner Join Sys.system_internals_allocation_units SU
On u.allocation_unit_id = su.allocation_unit_id
Go
— Exemplo 2: —
SELECT SIP.partition_id,
OBJECT_NAME(SIP.object_id) As ObjectName,
sip.rows,
SU.First_Page,
SU.Root_Page,
SU.First_IAM_Page
From Sys.system_internals_partitions As SIP Inner Join Sys.system_internals_allocation_units SU
On sip.partition_id = su.allocation_unit_id
Go
— Short Script 7 – Identificando índices com Escrita Excessiva —
— Quantidade de Índices com Escrita Excessiva em comparação a leitura —
SELECT  OBJECT_NAME(s.object_id),
i.name,
i.type_desc
FROM    sys.dm_db_index_usage_stats s WITH ( NOLOCK ) Inner JOIN sys.indexes i WITH (NOLOCK)
ON s.index_id = i.index_id
AND s.object_id = i.object_id
WHERE OBJECTPROPERTY(s.[object_id], ‘IsUserTable’) = 1
AND s.database_id = DB_ID()
AND s.user_updates > ( s.user_seeks + s.user_scans + s.user_lookups )
AND s.index_id > 1
Go
— Quantidade de Índices com Escrita Excessiva —
SELECT  COUNT(*)
FROM    sys.dm_db_index_usage_stats s WITH ( NOLOCK )
WHERE   OBJECTPROPERTY(s.[object_id], ‘IsUserTable’) = 1
AND s.database_id = DB_ID()
AND s.user_updates > ( s.user_seeks + s.user_scans + s.user_lookups )
AND s.index_id > 1
Go
— Short Script 8 – Identificando o espaço ocupado por conexões em uso —
SELECT A.session_id,
B.host_name, B.Login_Name ,
(user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 as TotalalocadoMB,
D.Text
FROM sys.dm_db_session_space_usage A Inner JOIN sys.dm_exec_sessions B
ON A.session_id = B.session_id
Inner JOIN sys.dm_exec_connections C
ON C.session_id = B.session_id
CROSS APPLY sys.dm_exec_sql_text(C.most_recent_sql_handle) As D
WHERE A.session_id > 50
and (user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 > 100 — Ocupam mais de 100 MB
ORDER BY totalalocadoMB desc
COMPUTE sum((user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128)
Go
— Short Script 9 – Obtendo a diferença de datas entre registro anterior e o próximo registro —
Create Table Datas
(ID Int Identity(1,1),
DataInicio Date,
DataFinal Date)
Go
Insert Into Datas Values (GETDATE(), GETDATE()+30)
Insert Into Datas Values (GETDATE()+1, GETDATE()+20)
Insert Into Datas Values (GETDATE()+2, GETDATE()+10)
Insert Into Datas Values (GETDATE(), GETDATE()+5)
Go
— Exemplo 1 —
Select I.ID, I.DataInicio, F.DataFinal,
DateDiff(D, I.DataInicio, F.DataFinal) As Intervalo
From Datas I Left Join Datas F
On I.ID = F.ID + 1

Go

— Exemplo 2 —
SELECT
[current].Id,
[current].Time CurrentValue,
[next].Time          NextValue
FROM #temp AS [current] LEFT JOIN #temp AS [next]
ON [next].Id = (SELECT MIN(Id) FROM #temp

                                 WHERE Id > [current].Id)
Go
— Short Script 10 – Criando um trigger condicional —
–Criando a Table de Novos Produtos–
Create Table NovosProdutos
(Codigo Int Identity(1,1),
Descricao VarChar(10))
–Criando a Table de Histórico Novos Produtos–
Create Table HistoricoNovosProdutos
(Codigo Int,
Descricao VarChar(10))
Go
–Inserindo valores —
Insert Into Novosprodutos Values(‘Arroz’)
Insert Into Novosprodutos Values(‘Arroz1’)
Insert Into Novosprodutos Values(‘Arroz2’)
Insert Into Novosprodutos Values(‘Arroz3’)
Go
–Criando a Trigger para controle de histórico–
Create TRIGGER T_Historico
ON NovosProdutos
for update
AS
IF (Select Descricao from Inserted) <> (Select Descricao from Deleted)
BEGIN
INSERT Into HistoricoNovosProdutos (Codigo, Descricao)
SELECT Codigo, Descricao FROM INSERTED
END
Go
–Fazendo os teste —
Update NovosProdutos
Set Descricao=’Arroz 4′
Where Codigo = 1
Go
Update NovosProdutos
Set Descricao=’Arroz1′
Where Codigo = 2
Go
Select * from NovosProdutos
Go

Muito bem, mais uma relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas “pequenos”, posso garantir que todos estes exemplos são de grande importância e apresentam um valor e conhecimento do mais alto nível.


Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são bastante conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

Agradecimento

Mais uma vez obrigado por sua visita, um forte abraço…

Nos encontramos em breve nos próximos posts desta e outras sessões do meu blog, valeu.

Microsoft SQL Server Migration Assistant v7.3


A Microsoft disponibilizou para download o Microsoft SQL Server Migration Assistant v7.3. Disponível para MySQL, Sybase, Oracle Database, IBM DB2 e Access, o Microsoft SQL Server Migration Assistant é uma ferramenta gratuita que simplifica o processo de migração destes produtos para o SQL Server e Azure SQL.

A ferramenta automatiza todos os aspectos da migração. A versão 7.3 inclui o suporte para:

– Migração do MySQL 4.1 e posteriores para todas as edições do SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 e Azure SQL DB.

– Migração do Access 97 e posteriores para todas as edições do SQL Server 2012, SQL Server 2014, SQL Server 2016 e Azure SQL DB.

– Migração do Sybase ASE 11.9 e posteriores para todas as edições do SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 e Azure SQL DB.

– Migração do Oracle Database 9.07.3 e posteriores para todas as edições do SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 e Azure SQL DB.

– Migração do IBM DB2 9.0 e 10.0 no z/OS e das versões 9.8 e 10.1 no Linux/Unix/Windows para o SQL Server 2012, SQL Server 2014, SQL Server 2016 e Azure SQL DB.

Nota: A versão 7.3 também traz suporte preliminar para o SQL Server vNext CTP para Windows e Linux.

Microsoft SQL Server Migration Assistant v7.3

Baixe o Microsoft SQL Server Migration Assistant v7.3

Download da versão 7.3 para MySQL
Download da versão 7.3 para Sybase
Download da versão 7.3 para Oracle Database
Download da versão 7.3 para Access
Download da versão 7.3 para IBM DB2

O Microsoft SQL Server Migration Assistant v7.3 é compatível com o Windows 10 , Windows 7, Windows 8, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 e Windows Server 2012 R2. Ele também requer o .NET Framework 4.0 ou posterior.

As páginas de download também listam alguns requisitos específicos, como MySQL Connector/ODBC v5.1 e Sybase OLEDB/ADO.Net/ODBC provider.

Fontes e Direitos Autorais: Baboo.com –

Material – Apoio – Especial – Apresentações – Conteúdo Técnico


Pessoal, boa tarde.

Tudo bem?

Revisando o meu Baú de Apresentações e Conteúdos Técnicos que possuo no meus Backups, encontrei bastante coisa legal que pode servir para todos os amantes de Tecnologias da Microsoft, dentre eles:

  • Windows Azure;
  • Hyper-V;
  • SQL Azure;
  • Reporting Services;
  • SQL Server 2008 R2;
  • SQL Server 2012;
  • SQL Server 2014; e
  • Windows Server 2012

Vale ressaltar que boa parte de material é resultado de Apresentações que eu realizei nos últimos anos, como também, de Apresentações Oficiais compartilhadas pela própria Microsoft.

Segue abaixo a relação de arquivos, fique a vontade para realizar o download e compartilhar.

Conhecendo o Microsoft SQL Server 2012

Microsoft Business Intelligence

Microsoft SQL Server – Simulando Fragmentação de Dados e Índices

SQL Server 2012 – Conhecendo o Microsoft SQL Server 2012 – ColumnStore Index

SQL Server 2012 – Trabalhando com Alta Disponibilidade, Cluster, Hyper-V 2012 e SQL Server 2012

SQL Server 2014 Faster Insights from Any Data Level 300 Deck

SQL Server 2014 Mission Critical Performance Level 300 Deck

SQL Server 2014 Platform for Hybrid Cloud Level 300 Deck

SQL Sever 2012 – Migração e Vantagens das tecnologias mais recentes Windows Server 2012 – Além da Nuvem

Windows Server 2012 – Estilo Moderno

Windows Server 2012 – O poder de muitos Servidores – Simplicade de um só

Windows Server 2012 – Todas as Aplicações – Qualquer Nuvem

Azure – Business Continuity Solutions in Microsoft SQL Azure

Azure – Experience the World’s Data with the Data Market on the Windows Azure Marketplace

Azure – Microsoft SQL Azure Reporting

Azure – SQL Azure Recorded Demos Azure – Tips and Tricks for Microsoft SQL Azure Federations – How to Build Cross-Federation Queries and…

SQL Server 2008 R2 – Abandonando a sysprocesses – Bem-vindo às DMV’s

SQL Server 2008 R2 – Recursos de Gerenciamento de SQL Server

SQL Server 2008 R2 – Utilizando a claúsula Output no SQL Server 2008 e R2

Você deve ter observado que alguns arquivos são referentes ao novo Microsoft SQL Server 2014, conteúdo recente e totalmente atualizado.

Mais uma vez obrigado por sua visita, espero e tenho certeza que este material será de grande avalia.

Até mais.

Utilizando a Ferramenta Surface Area Configuration no Microsoft SQL Server 2008 R2 através de Política de Gerenciamento.

Hoje gostaria de destacar para vocês uma das maiores funcionalidades adicionados ao Microsoft SQL Server, conhecida como Surface Area Configuration, presente desde a versão 2005, mas que na versão 2008 acabou sendo integrada a uma nova funcionalidade denominada Política de Gerenciamento ou Policy Management.


Olá pessoal, tudo bem com vocês?

Hoje gostaria de destacar para vocês uma das maiores funcionalidades adicionados ao Microsoft SQL Server, conhecida como Surface Area Configuration, presente desde a versão 2005, mas que na versão 2008 acabou sendo integrada a uma nova funcionalidade denominada Política de Gerenciamento ou Policy Management.

Presente no Microsoft SQL Server 2005, a Surface Area Configuration, foi introduzida como uma ferramenta que permitia ao administrador visualizar e gerenciar o estado de inicialização dos serviços instalados no Microsoft SQL Server 2005, independente da quantidade de instâncias instaladas.

Administrando servidores com Gerenciamento Baseado em Políticas

A partir do Microsoft SQL Server 2008, a Microsoft introduziu um novo conceito de gerenciamento e administração de recursos e funcionalidades de instâncias SQL Server, através do próprio Management Studio, como também, utilizando o Policy Management, sendo este, composto por um conjunto de configurações de políticas de segurança para tornar ainda mais segura o processo de administração de qualquer Servidor Microsoft SQL Server.

Gerenciamento Baseado em Políticas é um sistema para gerenciar uma ou mais instâncias do SQL Server 2008. Quando os administradores de políticas do SQL Server usam o Gerenciamento Baseado em Políticas, eles usam o SQL Server Management Studio para criar políticas para gerenciar entidades no servidor, como as instâncias do SQL Server, bancos de dados ou outros objetos do SQL Server.

O Gerenciamento Baseado em Políticas tem três componentes:

  • Gerenciamento de política: Os administradores de políticas criam políticas.
  • Administração explícita: Os administradores selecionam um ou mais destinos gerenciados e verificam explicitamente se eles estão de acordo com uma política específica, ou explicitamente fazem com que os destinos estejam de acordo com uma política.
  • Modos de avaliação: Há quatro modos de avaliação, três dos quais podem ser automatizados:
  1.                                                                i.      Sob demanda. Este modo avalia a política quando especificado diretamente pelo usuário.
  2.                                                              ii.      Ao alterar: impedir. Esse modo automatizado usa gatilhos DDL para impedir violações de política.
  1.                                                           iii.      Ao alterar: log apenas. Este modo automatizado usa a notificação de eventos para avaliar uma política quando uma alteração relevante é feita.

 

  1.                                                            iv.      Ao agendar. Este modo automatizado usa um trabalho do SQL Server Agent para avaliar periodicamente uma política.

Foi a partir deste novo contexto que o Surface Area Configuration deixou de ser utilizado como uma ferramenta externa e passou a ser integrado a este novo ambiente, mas de forma discreta e praticamente desconhecida por boa parte dos profissionais.

A meu ver um ponto falho em que a Microsoft subestimou o conhecimento e uso desta ferramenta por parte dos profissionais, conhecedores, especialistas e amantes do Microsoft SQL Server. Mas independente de qualquer opinião, esta ferramenta ainda esta presente, o que nos fortalece a possibilidade de fazermos uso de seus recursos.

Termos e conceitos do Gerenciamento Baseado em Políticas

  • Destino gerenciado pelo Gerenciamento Baseado em Políticas: As entidades gerenciadas pelo Gerenciamento Baseado em Políticas, como uma instância do Mecanismo de banco de dados do SQL Server, um banco de dados, uma tabela ou um índice. Todos os destinos em uma instância de servidor formam uma hierarquia de destino. Um conjunto de destino é aquele resultante da aplicação de um conjunto de filtros de destino à hierarquia de destino.
  • Faceta do Gerenciamento Baseado em Políticas: Um conjunto de propriedades lógicas que modelam o comportamento ou as características de certos tipos de destinos gerenciados. O número e as características das propriedades são incorporados à faceta e só podem ser adicionados ou removidos pelo criador da faceta. Um tipo de destino pode programar uma ou mais facetas de gerenciamento, e uma faceta de gerenciamento pode ser implementada por um ou mais tipos de destino. Algumas propriedades de uma faceta só podem ser aplicadas a uma versão específica. Por exemplo, a propriedade Database Mail da faceta Configuração da Área da Superfície só se aplica ao SQL Server 2005 e versões posteriores.
  • Condição de Gerenciamento Baseado em Políticas: Uma expressão booleana que especifica um conjunto de estados permitidos de um destino gerenciado pelo Gerenciamento Baseado em Políticas em relação a uma faceta de gerenciamento.
  • Política de Gerenciamento Baseado em Políticas: Uma condição do Gerenciamento Baseado em Políticas e o comportamento esperado, como, por exemplo, modo de avaliação, filtros de destino e agenda. Uma política só pode conter uma condição. As políticas podem ser habilitadas ou desabilitadas.
  • Categoria de política do Gerenciamento Baseado em Políticas: Uma categoria definida pelo usuário para ajudar a gerenciar políticas. Os usuários podem classificar as políticas em categorias diferentes. Uma política pertence a somente uma categoria. Categorias de políticas se aplicam a bancos de dados e servidores. No nível de banco de dados, as seguintes condições se aplicam:
  • Os proprietários de banco de dados podem assinar um conjunto de categorias de política para um banco de dados.
  • Somente as políticas das categorias assinadas podem governar um banco de dados.
  • Todos os bancos de dados assinam implicitamente a categoria de política padrão.

No nível de servidor, é possível aplicar categorias de políticas a todos os bancos de dados.

Política efetiva: As políticas efetivas de um destino são aquelas que governam esse destino. Uma política só será efetiva em relação a um destino se todas as seguintes condições forem satisfeitas:

  • A política está habilitada.
  • O destino pertence ao conjunto de destino da política.
  • O destino ou um dos destinos ancestrais assina o grupo de políticas que contém essa política.

Bom, após este pequeno overview sobre o Policy Management, seus termos, conceitos e formas de administração, vou destacar um pouco de como o Surface Area Configuration é definido no Microsoft SQL Server 2008 R2.

Compreendendo o Surface Area Configuration

Na configuração padrão de novas instalações do SQL Server, muitos recursos não estão habilitados. O SQL Server instala de forma seletiva e inicia somente os principais serviços e recursos, para minimizar o número de recursos que podem ser atacados por um usuário mal-intencionado.

Um administrador de sistema pode alterar esses padrões no momento da instalação e também seletivamente habilitar ou desabilitar recursos de uma instância em execução do SQL Server. Além disso, alguns componentes podem não estar disponíveis ao estabelecer conexão a partir de outros computadores até que os protocolos sejam configurados.

Importante destacar, que ao contrário das novas instalações, nenhum serviço ou recurso existente é desativado durante uma atualização, mas as opções adicionais de configuração da área da superfície poderão ser aplicadas após a conclusão da atualização.

Utilizando o Surface Area Configuration de forma básica

Para trabalharmos com o Surface Area Configuration no Management Studio é bastante simples, seguindo os passos apresentados abaixo:

A habilitação e desabilitação de recursos do SQL Server podem ser configuradas usando as facetas no SQL Server Management Studio. Para configurar área da superfície usando as facetas:

  1. No Management Studio, conecte-se a sua instância do SQL Server.
  2. No Pesquisador de Objetos, clique com o botão direito do mouse no servidor e clique em Facetas, conforme apresenta a Figura 1.

Figura 1 – Opção Facetas no Management Studio.

3. Na caixa de diálogo Exibir Facetas, expanda a lista Faceta e selecione a faceta Configuração da área da superfície apropriada, conforme apresenta a Figura 2. Por padrão estas facetas estão definidas em três categorias:

    1. Configuração       da área da superfície;
    2. Configuração       da área da superfície para o Analysis Services; e
    3. Configuração da área da superfície para o Reporting Services.

Figura 2 – Tela de Configuração das Facetas de acordo com a categoria selecionada.

A seguir apresenta somente as opções disponíveis para faceta Surface Area Configuration, conforme ilustra a Figura 3:

Figura 3 – Relação de Opções disponíveis para faceta Surface Area Configuration.

  1. Na área Propriedades da faceta, selecione os valores desejados para cada propriedade. Ou se preferir selecione, por exemplo, a Faceta DatabaseMailEnabled.
  2. Clique em OK.

Pronto, desta forma simples acabamos de realizar a ativação de uma faceta no Microsoft SQL Server 2008 R2, que posteriormente estará sendo refletido no comportamento e configuração de sua instância.

Algo que pode parecer muito similar a utilização da System Stored Procedure SP_Configure, quando estamos se referindo a configuração de recursos específicos do nosso servidor como no procedimento que realizamos anteriormente, executando o processo de ativação do Database Mail, que pode ser feito de ambas as formas, tanto por SP_Configure, como também por configuração de Facetas em Nível de Servidor.

Combinando o uso do Surface Area Configuration com a SP_Configure

Como destacado anteriormente a configuração de algumas facetas disponíveis através do Policy Management, com base no Surface Area Configuration pode ser comparado e até mesmo utilizado como alternativa á System Stored Procedure SP_Configure.

Pois bem, por procurar destacar como podemos através de cada um destes recursos fazer uso de funcionalidades do Microsoft SQL Server 2008 R2, como por exemplo, ativar o uso da Extended Stored Procedure XP_CMDShell. Começando pelo uso da Stored Procedure para ativação da XP_CMDShell, conforme apresentado abaixo:

  1. 1.       Ativando a XP_CMDShell e consultando seu status através das Facetas de Servidor:

Por se tratar de uma funcionalidade externa e também um recurso que pode possibilitar o acesso indevido a um usuário mal intencionado o Microsoft SQL Server, por padrão mantém este recurso oculto, bem como, desativado. Vamos então realizar o processo de ativação desta funcionalidade e posteriormente consultar o seu status através da Faceta, conforme o código apresentado abaixo:

sp_configure ‘ xp_cmdshell’,1

reconfigure with override

Após executar este pequeno bloco de código, vamos consultar o valor atribuído para Faceta Surface Area Configuration em sua propriedade DatabaseMailEnabled, utilizando os passos realizados anteriormente. Para ilustrar o valor da propriedade DatabaseMailEnabled, apresento a Figura 4:

Figura 4 – Propriedades disponíveis para faceta Surface Area Configuration, em especial a propriedade DatabaseMailEnabled.

Como já esperado ao executar a SP_Configure, o propriedade DatabaseMailEnabled, teve o seu valor alterado de False para True, o que representa que acabamos de alterar o seu valor e ativar esta funcionalidade para nossa instância de banco de dados.

O próximo passo é realizar justamente o mesmo procedimento, só que de forma inversa, alterando o valor na propriedade e consultado o seu status através da SP_Configure.

  1. Desativando a XP_CMDShell e consultando seu status através da SP_Configure:

Como a tela de Visualização de Facetas já esta aberta e também com a categoria Surface Area Configuration selecionada, vamos alterar o valor da propriedade DatabaseMailEnabled, alterando o seu valor de True para False e depois clicando no botão Ok.

Agora vamos executar o bloco de código apresenta abaixo para obter o retorno da alteração do status da propriedade DatabaseMailEnabled:

sp_configure ‘xp_cmdshell’

Ótimo, nossa alteração foi realizada de forma correta e neste momento a XP_CMDShell voltou ao seu status padrão, ou seja, esta desativada, conforme podemos observar a Figura 5, com base na valor apresentado na coluna Run_Value, retornado como zero (Zero), o que indica pelo SQL Server que o recurso, funcionalidade e propriedade esta desativada:

Figura 5 – Resultado da execução da System Stored Procedure SP_Configure.

Utilizando o Surface Area Configuration de forma avançada

Nossa última jornada será realizar a configuração de uma nova política disponível para o Surface Area Configuration, com base, no conjunto de condições (conditions) e facetas (facets) disponíveis no Policy Management (Gerenciador de Políticas).

Vamos então configurar uma nova Condição, conforme os passos apresentados abaixo:

  1. Conecte-se ao seu Servidor ou Instância SQL Server;
  2. No Explorador de Objetos (Object Explorer), navegue até o Menu Gerenciamento (Management);
  3. Selecione a opção Condições (Conditions), clicando com o botão da direita do mouse e escolhendo a opção Nova Condição (New Condition);
  4. Como base na Figura 6, realize a configuração da sua nova condição, utilizando os seguintes valores:
    1. Name: Condição – Ativar – AdHocRemoteQueries;
    2. Facet: Surface Area Configuration;
    3. Expression:
      1.                                                                           i.      Field: @ADHocRemoteQueries
      2.                                                                          ii.      Operator: =
      3.                                                                        iii.      Value: True
  5. Clique no botão Ok, para confirmar a criação desta nova condição.

Figura 6 – Tela de Configuração da Condição – Ativar – AdHocRemoteQueries.

Pronto, nossa nova condição esta configurado e criada, agora devemos configurar nossa nova política que estará fazendo uso desta condição e de sua faceta. Para isso, vamos realizar os seguintes passos:

  1. Utilizando o menu Management aberto, clique como o botão da direita sobre a opção Políticas (Policies), selecionando a opção Nova Política (New Policy);
  2. Como base na Figura 7, realize a configuração da sua nova condição, utilizando os seguintes valores:
    1. Name: Política – Ativando – AdHocRemoteQueries;
    2. Check Condition: Condição – Ativar – AdHocRemoteQueries;
    3. Evalution Mode: On Change: Log Only;
    4. Server Restriction: None; e
    5. Marque a opção Ativo (Enabled).
  3. Clique no botão Ok, para confirmar a criação desta nova política.

Figura 7 – Tela de Configuração da Política – Ativando – AdHocRemoteQueries.

Muito bem, nossa política esta criada e definida para ser executa somente quando o log de eventos sofre algum tipo de mudança que possa estar relacionada com esta política. Mas caso você queria testar ou avaliar a execução desta política, basta clicar com o botão da direita do mouse sobre a ela e escolher a opção Evaluate(Avaliar).

Observação: Vale ressaltar que estes procedimentos podem somente ser executados por usuários com permissões de nível de System Administrator, Security Administrator, Server Administrator ou Setup Administrator.

Itens relacionados

A seguir apresenta a relação de Stored Procedures que podem ser utilizadas com as Políticas de Gerenciamento

sp_syspolicy_add_policy_category   sp_syspolicy_rename_policy_category  
sp_syspolicy_add_policy_category_subscription   sp_syspolicy_repair_policy_automation
sp_syspolicy_configure sp_syspolicy_set_config_enabled
sp_syspolicy_delete_policy_category   sp_syspolicy_set_config_history_retention
sp_syspolicy_delete_policy_category_subscription   sp_syspolicy_set_log_on_success
sp_syspolicy_delete_policy_execution_history   sp_syspolicy_subscribe_to_policy_category
sp_syspolicy_purge_health_state   sp_syspolicy_unsubscribe_from_policy_category
sp_syspolicy_purge_history sp_syspolicy_update_policy_category
sp_syspolicy_rename_condition sp_syspolicy_update_policy_category_subscription
sp_syspolicy_rename_policy

Perfeito pessoal acredito ter conseguido cumprir o meu objetivo e mostrar de uma forma bastante simples como podemos utilizar o Surface Area Configuration dentro do Microsoft SQL Server 2008 R2.

Espero que você possa ter gostado, mais uma vez agradeço a sua visita, o seu interesse o meu blog, conto com sua participação.

Nos vemos em breve.

Um grande abraço, até a próxima

Obtendo informações sobre fragmentação com a sys.dm_db_index_physical_stats no SQL Server 2008 e R2

Dica – Obtendo informações sobre fragmentação com a sys.dm_db_index_physical_stats no SQL Server 2008 e R2.


Pessoal, boa noite.

Tudo bem? Gostaria de dividir com vocês mais uma experiência vivida nos últimos em um dos meus clientes. Desta vez, vou falar um pouco sobre fragmentação de dados.

Pois bem, a fragmentação de dados é um processo natural que ocorre diariamente em qualquer base de dados, pelo simples motivo da ocorrência de manipulação de registro através dos comandos DML – Data Manipulation Languagem, sendo eles: Insert, Update e Delete.

A fragmentação trata-se de uma consequência da entrada, saída e atualização das linhas de registro que forma nossas tabelas, índices e que ficam armazenadas diretamente em suas páginas de dados.

Muito bem, esta fragmentação pode gerar diversos problemas, dentre eles:

  • Lentidão;
  • Aumento no tempo de processamento para realização de transações;
  • Locks e bloqueios de tabelas e dados;
  • Aumento no custo de processamento para o SQL Server realizar suas transações internas a fim de concluir seus processos administrativos;
  • Aumento no espaço no alocada de informação, gerando um crescimento no tamanho dos arquivos de dados;
  • Aumento nos arquivos de backups; e
  • Aumento no tempo para realização e restauração de um backup.

Com base neste conjunto de situações, em um dos mais atuais clientes, realizei diversas análises com objetivo de procurar entender como a fragmentação esta sendo gerada e de que forma poderia resolver este problema neste momento.

Foi através de algumas consultas ao Books On-Line que encontrei a Função de Gerenciamento Dinâmico chamada: sys.dm_db_index_physical_stats, presente a partir do SQL Server 2008. Mas qual é a finalidade desta função? Para este respostas vou utilizar as informações do próprio Books On-Line:

A sys.dm_db_index_physical_stats: “Retorna informações de tamanho e fragmentação dos dados e índices da tabela ou exibição especificada. Para um índice, uma linha é retornada para cada nível da árvore B em cada partição. Para um heap, uma linha é retornada para a unidade de alocação de IN_ROW_DATA de cada partição. Para dados LOB (objeto grande), uma linha é retornada para a unidade de alocação de LOB_DATA de cada partição. Se houver dados de estouro de linha na tabela, uma linha será retornada para a unidade de alocação de ROW_OVERFLOW_DATA em cada partição.”

Analisando este definição, ficou fácil entender qual a finalidade desta função de gerenciamento dinâmico. Muito bem, agora me restava saber como utilizar, e ai mais uma vez o bom e velho Books On-Line me ajudou, apresentando como sempre alguns exemplos que podem ajudar em muito, dentre os exemplos existentes, utilizei o exemplo referente a Reconstrução e Reorganização de Índices, mas com algumas customizações para a minha necessidade, denominado Exemplo 1, conforme apresento a seguir:

Exemplo 1: Utilizando a sys.dm_db_index_physical_stats em um script para reconstruir ou reorganizar índices SET NOCOUNT ON;

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 @command nvarchar(4000);

SELECT
object_id AS Id_Objeto,
index_id AS Id_Indice,
partition_number AS PartitionNumber,
avg_fragmentation_in_percent AS Frag
INTO #CargaFragmentacaoIndices
FROM sys.dm_db_index_physical_stats (DB_ID(‘WELT_23092011’), NULL, NULL , NULL, ‘LIMITED’)
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;

DECLARE partitions CURSOR FOR SELECT * FROM #CargaFragmentacaoIndices;

OPEN partitions;

WHILE (1=1)
BEGIN;
FETCH NEXT FROM partitions
INTO @objectid, @indexid, @partitionnum, @frag;

IF @@FETCH_STATUS < 0 BREAK;

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

SELECT @indexname = QUOTENAME(name)
FROM sys.indexes
WHERE  object_id = @objectid AND index_id = @indexid;

SELECT @partitioncount = count (*)
FROM sys.partitions
WHERE object_id = @objectid AND index_id = @indexid;

       — Nesta parte do código realizo a análise para identificar com base na % de fragmentação qual procedimento deveria ser realizado, dentre eles: Reorganizar ou Recriar o Índice —

        IF @frag < 40.0
SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REORGANIZE’;

IF @frag >= 50.0
SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REBUILD’;

IF @partitioncount > 1
SET @command = @command + N’ PARTITION=’ + CAST(@partitionnum AS nvarchar(10));

EXEC (@command);
PRINT N’Executed: ‘ + @command;
END;

CLOSE partitions;
DEALLOCATE partitions;

DROP TABLE #CargaFragmentacaoIndices;
GO

Vale ressaltar que antes da execução do Exemplo 1, boa parte das tabelas apresentavam taxas de fragmentação de 75% á 98%, valores que normalmente são considerados altos o que dificultam em muito os processos de consulta de dados.

Após a execução do Exemplo 1, os valores médios de fragmentação não passavam de 75%, lógicamente fazendo a soma de todos os índices vinculados as tabelas. Em algumas tabelas as valores de fragmentação praticamente não sofreram mudanças, mas por outro lado tabelas que estava apresentando área de espaço alocado de forma desnecessária foi identificado uma redução de 48%, algo que representa-se muito em espaço de armazenamento.

Estas tabelas que sofreram uma diminuição em seu tamanho de espaço em disco, foram também as que mais tiveram suas taxas de fragmentação reduzidas entre 10% e 25%.

Mas uma pergunta continuava e ser feita, porque não é possível zerar a fragmentação de dados, mesmo após a execução de procedimentos como DBCC INDEXDEFRAG e DBCC DBREINDEX. A resposta é simples!!!

Não podemos eliminar totalmente a fragmentação de uma tabela ou índice sem realizar processos de análise e desfragmentação de suas páginas de dados, pois como os dados são alocados constantemente nestas páginas, sempre estará ocorrendo a movimentação de dados ou fragmentados de dados entre as páginas, armazenados diretamente em nossos discos rígidos.

Para que possamos tentar zerar se possível a fragmentação de dados, temos que procurar entender toda arquitetura das páginas de dados, sua forma de alocação de dados, sequência de armazenamento, extensão, espaço livre e ocupado para cada tabela e índices.

Bom, vou encerrar este dica aqui, espero que estas informações possam ser úteis em suas atividades.

Agradeço a sua visita, nos encontramos em breve.

Até mais.

Lista de bugs corrigidos no SQL Server 2008 R2 Service Pack 1.

Lista de bugs corrigidos no SQL Server 2008 R2 Service Pack 1.


Pessoal, boa noite.

Tudo bem?

Não poderia deixar passar em branco, o lançamento do Service Pack 1 para o SQL Server 2008 R2, disponibilizado pela Microsoft nesta semana.

Aproveitando esta grande corrente de informações apresentadas nos últimos dias, vou destacar a relação de bugs corrigidos a partir da aplicação deste pacote de correções.

Segue abaixo mais informações, extraídas diretamente do Suporte da Microsoft Brasil:

Correções neste service pack

//
Para obter mais informações sobre os bugs corrigidos no SQL Server 2008 R2 SP1,
clique nos números abaixo para ler os artigos na Base de dados de Conhecimento
da Microsoft.

Recolher esta tabelaExpandir esta
tabela
Número de bug do VSTS Número de artigo do KB Descrição
657377 949775  (http://support.microsoft.com/kb/949775/ ) O servidor de destino não é possível baixar um trabalho multiservidor do
servidor mestre, se o servidor de destino está executando uma versão em alemão
ou uma versão em francês do SQL Server 2005
657404 2216478  (http://support.microsoft.com/kb/2216478/ ) Mensagem de erro ao executar comando Get em um ambiente da versão 2 do
PowerShell em um servidor que está executando o SQL Server de 2008: “Object
reference not set to uma instância de um objeto”
649451 2216485  (http://support.microsoft.com/kb/2216485/ ) CORREÇÃO: Monitor de recursos uma condição de não respondendo entra em um
servidor que esteja executando o SQL Server de 2008
649479 2216489  (http://support.microsoft.com/kb/2216489/ ) Preocupação 2008 SP2 [destino [19] de SQL Server] Erro: não é possível
preparar o grosso do SSIS inserir para inserção de dados
649504 2216497  (http://support.microsoft.com/kb/2216497/ ) CORREÇÃO: Tipos de dados do armazenamento espacial geometria polígono com
toques internos retornam dados incorretos por meio de diferentes operações
geométricas
649529 2216501  (http://support.microsoft.com/kb/2216501/ ) CORREÇÃO: Multiserver trabalhos não foram baixados do 2000 de SQL Server na
função MSX para 2008 de SQL Server na função TSX
649457 2448971  (http://support.microsoft.com/kb/2448971/ ) CORREÇÃO: Os bloqueios de uma tabela não são encaminhados ao inserir várias
linhas em uma tabela de SQL Server de 2008
628428 2463682  (http://support.microsoft.com/kb/2463682/ ) CORREÇÃO: Um banco de dados habilitado para criptografia transparente de
dados pode se tornar inacessível se o certificado que é usado para criptografar
a chave de criptografia do banco de dados for interrompido.
625028 2494517  (http://support.microsoft.com/kb/2494517/ ) CORREÇÃO: Valor da caixa de texto oculto mencionado Tablix cabeçalho é
exibido apenas na primeira página depois de exportar um relatório para um
processador de disco rígido de quebra de página
447613 2515006  (http://support.microsoft.com/kb/2515006/ ) Processamento de SharedDataSet de Durng aplicada do DataSet filtros ou
parâmetro usar configurações de agrupamento incorreta
697406 2525273  (http://support.microsoft.com/kb/2525273/ ) CORREÇÃO: Um modelo de cluster que usa o algoritmo de K-means gera
resultados diferentes que são afetados pelas colunas de PredictOnly no SQL
Server 2008 R2 Analysis Services.
689683 2504090  (http://support.microsoft.com/kb/2504090/ ) CORREÇÃO: Violação de acesso quando você insere dados em uma nova partição
de uma tabela particionada, depois de soltar uma coluna da tabela no SQL Server
2008 R2
649480 2216491  (http://support.microsoft.com/kb/2216491/ ) O utilitário SQL Dumper não é possível gerar o despejo de erro a instalação
de arquivos em um cluster de failover de SQL Server 2008 R2 em um Cluster de
Failover de Advanced/Enterprise ou o SQL Server de 2008
649339 2216460  (http://support.microsoft.com/kb/2216460/ ) Mensagem de erro ao tentar abrir um projeto de SQL Server de 2008 ou no SQL
Server 2008 R2: “a definição de manifesto do assembly localizado não corresponde
a referência do assembly”
405512 2105809  (http://support.microsoft.com/kb/2105809/ ) Você receberá um “não é possível parar o serviço ReportServer no computador
<computer name=””>” Erro ao alternar do modo conectado para o modo
Local</computer>
405514 981588  (http://support.microsoft.com/kb/981588/ ) Você recebe uma mensagem de erro quando tentar navegar diretamente para o
servidor de relatórios do SSRS 2008 R2, depois de criar um site do SharePoint
declaração
665971 2546901  (http://support.microsoft.com/kb/2546901/ ) CORREÇÃO: Diferentes resultados de retorno quando você executa uma consulta
paralela que usa uma função de classificação no SQL Server 2005, 2008 de SQL
Server ou SQL Server 2008 R2 em um computador que tem 8 ou mais CPUs
650006 2563828  (http://support.microsoft.com/kb/2563828/ ) Assert em função = arquivo de
Microsoft.ReportingServices.ReportProcessing.ParameterBase.Cast linha = = 0
expressão = Unhandled gerenciados exceção: tipo = System. InvalidCastException,
mensagem = impossível converter o objeto do tipo ‘System. Boolean’ digite ‘
controladoras.
689073 2531482  (http://support.microsoft.com/kb/2531482/ ) CORREÇÃO: O recurso de IntelliSense no SSMS 2008 R2 pode parar de funcionar
após a instalação do SP1 Visual Studio de 2010

Correções adicionais neste service pack

//

Resoluções de problemas a seguir também estão incluídas no SQL
Server 2008 R2 SP1.
Recolher esta tabelaExpandir esta
tabela
ID Descrição
418521 O processador HTML não lança uma exceção de ArgumentOutOfRangeException, se
um relatório tiver a propriedade ConsumeContainerWhitespace definida como TRUE e
se houver um espaço em branco horizontal disponível para preencher.
346804 CORREÇÃO: A sintaxe de dica de índice de “forceseek” agora usa parâmetros
opcionais. Uma nova dica de consulta FORCESCAN é adicionada. Para obter mais
informações, consulte “Consulta dicas (Transact-SQL)”
(http://msdn.microsoft.com/en-us/library/ms181714.aspx).
405562 Seqüências de conexão, como ‘ server = “tcp:”‘ e ‘ server = “np:”‘ são
suportados no SQL Server Native Client 2008 façam conexões à instância local.
Com essa correção, essas cadeias de caracteres de conexão agora funcionam no SQL
Server Native Client 2008 R2 e permitem conexões com a instância
local.
447996 Um problema na lógica de verificação não ocorre se a coluna da tabela
particionada base particionada corresponde a uma coluna particionada de uma
exibição indexada. ALTER switching de tabela não está mais habilitado na
partição não as exibições indexadas alinhadas.
471571 Report Server não está mais usando o BIDS de 10,5 SQL para implantar as
partes do relatório para um SQL Server 2008 R2 (e versões posteriores) falhar ou
gera uma mensagem de erro de versionamento SQL.
512199 Carimbos de hora agora estão corretos quando Extended Events ou SQL de
auditoria de arquivos são lidos em um computador diferente daquele que produziu
o arquivo. Carimbos de hora agora também estão corretos após a reinicialização
de um servidor.
528501 Processar o relatório no modo de exibição síncrona usando o Reporting
Services 2008 R2, web parts agora estão visíveis se o relatório contém espaços
no nome do relatório. Uma mensagem de erro de StreamNotFound não é mais gerada.
538455 Quando você exibe o HTML fazendo com que o DeviceInfo de “stylestream”, a
definição de conjunto como TRUE, as configurações de estilo não mais são
perdidas em caixas de texto ou em texto se as ações são definidas.
540725 Dois novos arquivos de modelo de rastreamento são gerados para os serviços
de análise e de mecanismo. Isso permite que o Profiler exibir todos os eventos e
colunas para o engine e o analysis services.
550635 CORREÇÃO: Incorreta do texto quando o analisador de integridade do SP 2010
retorna uma mensagem de erro sobre análise de serviços que estão sendo
executados no modo de VertiPaq de emissão de relatórios.
550947 Em um item de relatório do Tablix tem 20 ou mais linhas que contêm itens de
relatório do recipiente aninhado (retângulo e Tablix), o shell de APOSTAS não
pára de responder se você inserir uma nova linha acima ou abaixo de qualquer
membro tablix.
555701 A mensagem de fora de ordem não faz com que um erro de violação de acesso
quando o objeto DBM é iniciado.
617987 A nova instalação do servidor não relata que uma chave mestra de seguro de
armazenamento não gera quando o aparelho de BI está instalado. (A mensagem foi
gerada, mesmo que a instalação foi bem-sucedida).
623819 Corrigido um problema no qual você recebe uma mensagem de erro quando o
otimizador de consultas não pôde produzir um plano para algumas consultas em
modos de exibição particionados. Isso é descrito na edição do Microsoft Connect
620614. A correção está localizada em um sinalizador de rastreamento (consulte o
artigo do KB 974006).
624909 Não há mais o desempenho diminui quando você usa o Visualizador de
relatórios ou exibe como HTML, se você tiver várias web parts em uma única
página do SharePoint.
624951 Você não receberá mais uma exceção de “Erro ao descarregar appdomain” quando
você fecha um aplicativo do WPF que inclui o controle ReportViewer.
626205 Analysis Services não é possível criar um cubo local de um cubo de servidor
que tenha membros de dimensão que estão relacionados ao membro
desconhecido.
626243 Agora, o PowerPivot é instalado com êxito a um farm existente se os
componentes de SQL Server compartilhado são instalados em um local não
padrão.
629973 OFERTAS e 3 de Construtor de Relatórios não mais falham quando você fazer o
seguinte: arraste uma célula em uma tabela pela borda, entrar no modo de “move o
item de relatório”, mover o objeto fora da tabela e, em seguida, pressione ESC,
clique e mantenha pressionado o botão do mouse.
636999 Se o Supervisor de atualização não pode examinar um arquivo de rastreamento,
o Supervisor de atualização agora pode fornecer uma mensagem de erro
significativo a um usuário.
639182 A caixa de diálogo de Logon para o 3.0 de Construtor de Relatórios. Isso é
chamado quando a autenticação de formulários é usada para SSRS, não é
obscurecida por um “novo relatório Assistente” caixa de diálogo Modal. (Por
causa do problema, os usuários podem estar cientes de que um logon está sendo
solicitado.)
643961 Agora, todas as opções de conta de usuário específico funcionem em
agendamentos de fonte de dados.
646473 Um aplicativo que é criado na.NET Framework 4.0 ambiente não falhará se EDR
não conseguir localizar suas informações de configuração. Agora, as informações
são pesquisadas em ambos os.NET Framework 4.0 e o.NET Framework 3.5 arquivos de
configuração.
658405 Agora você pode criar relatórios personalizados usando o arquivo. odc no
painel de controle de gerenciamento de TI.
665971 Linhas de transferências de operador de paralelismo agora estão na ordem
correta. Agora, o otimizador pode selecionar um plano subótimos. Portanto, essa
correção exige um sinalizador de rastreamento. Para usar essa correção, você
deve habilitar o sinalizador de rastreamento 4134.
674357 Agora, dois novos arquivos de modelo de rastreamento são gerados para o
serviço do mecanismo e o serviço de análise. Você fazer isso para certificar-se
de que o Profiler pode exibir todas as colunas para ambos os serviços e
eventos.
679035 Corrigido um erro de digitação secundário na página Administração
Central.
684435 StringCchPrintf_l espera que o tamanho do buffer de destino em caracteres. O
tamanho foi transmitido em bytes. Assim surgiu o erro OACR – BUFFER_OVERFLOW. O
código foi corrigido, passando o comprimento correto.
649475 Coleção define trabalho incorretamente quando eles coletar contadores de
desempenho em um cluster se o nome de instância SQL é igual ao nome de rede
virtual.
649357 Em um determinado banco de dados usando um ponteiro de servidor que é
declarado para uma instrução select que contém qualquer sistema de modo de
exibição pode gerar resultados incorretos depois que o banco de dados está
conectado e é reanexado.
649391 Erros de corrupção de DBCC ocorrerem durante a SQL Server 2008 R2
agrupamentos quando as seqüências de caracteres com seqüências Jamo que seguem o
sinal prolongado japonês são usadas.
657399 O número de versão incorreto é exibido no SQL Server Management Studio e no
SQL Server Reporting Services. Isso provoca uma confusão porque o número exibido
não varia do número da versão RTM após uma atualização é executada.
649476 CORREÇÃO: Aprimoradas e informações adicionais são registradas para
InvalidReportParameterException na saída detalhada se certas condições ocorrem
durante o processamento de parâmetro.
649557 CORREÇÃO: Um problema de acessibilidade que ocorre porque o nome do
Microsoft Active Accessibility “Símbolo” é nulo. Microsoft Active Accessibility
nomes são atualizados e agora detectáveis.
649447 ClickOnce do ReportBuilder 2.0 exibe um relatório em branco na
inicialização, se um usuário edita o relatório usando o ReportBuilder 2.0 de um
site do SharePoint 12.
649575 Nomes MSAA para a caixa de diálogo Propriedades de escala Radial estão
incorretas e não são compatíveis com acessibilidade.
519534 Usando parâmetros de table valued para colunas LOB pode causar uma violação
de acesso no servidor.
645824 Um erro de violação de acesso pode ocorrer durante a execução de
procedimentos armazenados estendidos sob condições de alta tensão.
649559 CORREÇÃO: Melhora o desempenho da criação do índice de instruções de DDL
para tabelas que possuem várias partições e que não contêm dados. Anteriormente,
o tempo necessário para esse processo aumentou em uma progressão geométrica como
o número de partições aumentada. A hora em que é necessária agora aumenta em uma
progressão linear.
649537, 448009 Em certas condições, o nome de coluna particionados na mensagem de erro
11405 pode estar errado. Isso faz com que um nome de coluna incorretos a serem
impressas.
649530 Uma exceção secundária pode ocorrer quando o Analysis Services gera um
arquivo de despejo do Watson. Isso é verdadeiro se o arquivo de despejo de
Watson é gerado por causa de uma exceção real ou devido a uma solicitação
explícita para determinados erros de despejo. Se a exceção secundária ocorre, o
servidor pode experimentar a recursão infinita. Isso gera muitos arquivos de
despejo e desliga o servidor.
649524 Se um usuário cria um tipo definido pelo usuário e uma função table valued
na mesma transação, e se a função possui uma tabela de retorno que contém uma
coluna do tipo definido pelo usuário, ocorre uma self-deadlock. Além disso, a
conexão que tenta executar essas operações é interrompida.
649532 Um índice espacial não pode ser criado com segurança em uma tabela que usa o
CELL_ID, CELL_ATTRIBUTES ou SRID para nomes de coluna.
657405 SQL Server às vezes gera uma mensagem de erro “Há memória de sistema
suficientes no pool de recursos internos para executar esta consulta”. Essa
situação é freqüentemente previsíveis causados por.
649434 Se os parâmetros são vinculados pela função SQLBindParameter especificarem
um comprimento de SQL_DATA_AT_EXEC, o driver SQL Server 2008 R2 nativo cliente
ODC causa uma violação de acesso se a função SQLPutData Especifica um
comprimento de SQL_NULL_DATA quando o valor do parâmetro é fornecido para
execução.
512170 Se o MARS é usado, o modo de exibição de sys.dm_os_tasks exibe o mesmo valor
na coluna request_id para todas as tarefas em vez de reportar o valor correto,
associado a cada tarefa.
649425 O modo de exibição do dm _ os_wait_stats exibe linhas duplicadas para o tipo
de espera de diversos. Isso pode causar problemas para ferramentas de
monitoramento.
649346 O destino bucketing assíncrono exibe os pares de seqüência/valor incorreto
para campos mapeados comparado às informações que estão disponíveis em
dm_xe_map_values.
649340 CORREÇÃO: A tabela de base do sistema syscolpars exibidas linhas duplicadas.
Essa correção diferenciará adicionando o número do procedimento DBCC
checkcatalog.
649427 CORREÇÃO: O novo código de erro (6257) é retornado quando um usuário tenta
registrar um assembly CLR baseia-se contra um tempo de execução mais recente,
como o CLR v4. A mensagem de erro (código 6218) anterior estava confusa e não o
problema real de estado. Consulte o bug para obter informações
detalhadas.
649433 Um caso de borda insere um valor de identidade fora do intervalo atual no
modo “set identity_insert TABLE_NAME no”. Esse problema também ocorre em
operações de backup e restauração.
649450 Informações de agrupamento da coluna incorreto são retornadas quando o BCP.
exe recupera informações de metadados de coluna.
649527 Usando uma função de PeriodsToDate que possui um parâmetro de membro Null
pode causar um erro “Exceção inesperado”.
649341 Quando a consulta tem um filtro que faz referência a uma coluna no modo de
exibição de sys.dm_server_audit_status, o filtro será ignorado e todas as linhas
são retornadas de sys.dm_server_audit_status.
629570 Erro 955 ocorre quando os usuários tentaram configurar o Data Warehouse de
gerenciamento se eles tiverem bancos de dados do servidor que não estão
online.
649374 O buffer de anel exibe dados de evento incompleto (saída de eventos de
dm_xe_session_targets) quando ele atingir o limite de tamanho para a saída
XML.
677560 Corrige um problema em que uma consulta remota traz o código de erro de 7359
no SQL Server 2008 R2. Esse problema ocorre se uma função definida pelo usuário
usa um sinônimo para uma tabela vinculada, um plano de execução para a função
definida pelo usuário existe no servidor local e uma versão de esquema da tabela
vinculada é atualizada em um servidor remoto.
562310 Corrige um erro de “Leitura AV no xact.cpp de FullXactImpBase::GetXdes @
2536” ocorre quando db1 um banco de dados é criado, uma consulta é armazenada em
cache para db1, e em seguida, db1 é descartado, segundo banco de dados é criado,
e em seguida, db1 é criada novamente e execute novamente a consulta em
cache.
623804 Corrige um resultado incorreto de consultas executadas dentro de corpos de
disparador. O cenário requer um índice exclusivo de filtrados. O disparador deve
conter uma consulta que é afetada por se uma coluna é exclusiva para a tabela
inteira.
636156 Correções de um problema no qual os backups estão corrompidos quando os
bancos de dados têm criptografia de banco de dados transparente ativada, ter
somas de verificação ativadas e o backup até está usando as somas de
verificação.
657511 CORREÇÃO: Essa correção soluciona tempos limite e deadlocks que podem
ocorrer durante o processamento de assinatura, quando várias inscrições são
processadas simultaneamente. O hotfix se aplica quando o Reporting Services é
implantado no modo integrado do SharePoint.
676139 Corrige um problema no qual o cliente deve estar fazendo uma classificação e
uma página de classificação é spilt em disco. Além disso, a verificação TDE vem
tocar simultaneamente a página específica. Você pode reiniciar o computador para
ignorar o problema. No entanto, você não pode evitar esse problema completamente
a menos que você desative o TDE.
676491 Corrige um problema potencial que ocorre após aplicar um hotfix descrito no
bug 473052 do VSTS.
679886 Corrige um problema no qual os eventos estendidos ou arquivos de trilha de
auditoria SQL coletados podem exibir informações de carimbo de hora
incorrectas.
686401 Corrige um problema no qual um valor nulo C# é convertido em dbNull antes
persisting-lo.
620861 CORREÇÃO: O suporte é fornecido por um máximo de partições de 15.000 em
tabelas e índices nas edições do Datacenter, Enterprise, Developer e Evaluation
Microsoft SQL Server 2008 R2 SP1. Para obter mais informações sobre como esse
suporte pode ser ativado e desativado, sobre suas limitações e alguns problemas
conhecidos e soluções alternativas, consulte o white paper “Suporte para
partições de 15.000” http://go.microsoft.com/fwlink/?LinkId
= 199773
(http://go.microsoft.com/fwlink/?LinkId=199773)
296354 CORREÇÃO: Os valores padrão da propriedade SqlDumperDumpTimeOut não estão
dentro de um escopo válido no Microsoft SQL Server 2008 R2 SP1. O escopo de
valor válido abrange de 0 (ms) para MAXDWORD.
417616 CORREÇÃO: A lógica para recuperar SPNs para contas de serviço agora está
definida para sempre ser registradas. Antes que essa correção for aplicada, a
lógica é definida para ser conectado somente quando EP é ativado. Essas
informações podem ser usadas para solucionar problemas de Kerberos.
517329 Um defeito do programa faz com que várias ferramentas de diagnóstico para
consultas de relatório como sendo executada no banco de dados mestre em vez de
no banco de dados no qual eles foram realmente executados.
615697 Faltam SQM pontos importantes recursos em Microsoft SQL Server de 2008 ou em
uma versão posterior do SQL Server. Essa correção adiciona alguns pontos
importantes do SQM, que são úteis para rastrear as métricas de utilização do
cliente.
645245 CORREÇÃO: A lógica de reconexão e novamente são removidos do caminho de
código de execução de consulta no editor de SQL. Essas informações não são mais
necessárias porque o período de tempo limite de conexão OCIOSA para SQL Azure de
Microsoft aumentou para 30 minutos.
674580 O novo arquivo de modelo de rastreamento (“10.50.0.xml de TraceDefinition de
serviços de análise do Microsoft”) no Analysis Services deve ser regenerado para
incluir os eventos de rastreamento recém-adicionado para que o Profiler pode
exibir todos os eventos e colunas.
707007 Importações falharem em cenários de Dallas.
710263 É retornado um erro ao tentar gerar snapshots na Galeria de relatório, se o
Internet Explorer 9 é usado como o navegador.
710433 CORREÇÃO: O registro é atualizado para passar nomes de arquivo como
parâmetro para ssms.exe ao clicar duas vezes em um arquivo. SQL.
656177 CORREÇÃO: Uma violação de acesso ocorre quando você usa um procedimento
armazenado ou uma função definida pelo usuário para criar uma variável de tabela
de SQL Server de 2008 ou no SQL Server 2008 R2.
Para obter mais informações sobre como determinar a versão de SQL Server de atual e a edição, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
Além de correções que estão listadas neste artigo, o SQL Server 2008 R2 SP1 contém os hotfixes que foram incluídos na atualização cumulativa 1 a 6 de atualização cumulativa para o SQL Server 2008 R2.
Para obter mais informações sobre os pacotes de atualização cumulativa que estão disponíveis para SQL Server 2008 R2, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

Fontes e Direitos Autorais: Suporte Microsoft Brasil – ID do artigo: 2528583 – Última revisão: terça-feira, 12 de julho de 2011 – Revisão: 1.0