Arquivo da tag: Bancos de Dados

Microsoft SQL Server 2014 Service Pack 2 – Cumulative Update 13


A Microsoft divulgou no último dia 28 de agosto em seu blog SQL Server Release Services a disponibilidade da Atualização Cumulativa 13 (Cumulative Update 13) para SQL Server 2014 SP2.

A CU13 inclui todas as correções para os problemas que foram descobertos depois do lançamento do SQL Server 2014 SP2 e das atualizações cumulativas anteriores lançados até o presente momento.

Caso você deseje realizar o download das atualizações cumulativas anteriores, utilize a relação de links listadas abaixo:

Com base no artigo KB4456287, a atualização traz correções para quatro bugs específicos, dentre eles, um que causa erro de violação de acesso quando você consulta a tabela sysmembers, enquanto outro causa um erro durante a execução do sp_send_dbmail em certos cenários.

Ao instalar a Atualização Cumulativa 13 para SQL Server 2014 SP2, o build (número da versão) será atualizado para o número 12.0.5590.1.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Microsoft Support – https://support.microsoft.com/en-us/help/4456287/cumulative-update-13-for-sql-server-2014-sp2

Anúncios

Microsoft SQL Server 2017 – Cumulative Update 10


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 10 (Cumulative Update 10) para SQL Server 2017.

Através do artigo KB4342123 publicado no site de suporte da Microsoft, esta nova atualização cumulativa disponível do SQL Server 2017 apresenta todas as correções existentes desde o lançamento da atual versão do produto, além disso, possui correções para problemas encontrados após o lançamento das atualizações cumulativas anteriores existentes.

Caso você necessite realizar o download de alguma atualização cumulativa anterior, utilize os links listados abaixo:

A relação completa de bugs corrigidos por esta atualização inclui um que causa vazamento de memória no arquivo sqlwepxxx.dll, outro que proporciona a degradação de performance quando a função HASHBYTES é utilizada durante uma consulta e um que faz com que a sincronização de banco de dados demore mais do que o esperado.

Ao aplicar esta atualização o número do build será atualizado para (build 14.0.3037.1), caso deseje realizar o download, basta clicar na imagem abaixo:

Fontes e Direitos Autorais: Microsoft Support – https://support.microsoft.com/en-us/help/4342123/cumulative-update-10-for-sql-server-2017

#22 – Para que serve


Oi, bom dia, tudo bem?

Seja bem-vindo a mais um post da sessão Para que Serve, sendo este o de número 22, mais um dia de muito trabalhando começando, repleto de atividades, compromissos, reuniões, enfim tudo aquilo que normalmente estamos acostumados a nos deparar em nossos convívio diário.

E eu (parece música), estou aqui, como faço normalmente, acordando bem cedinho, para poder aproveitar da melhor maneira possível meu precioso tempo livre, colocando em prática algo que adoro fazer, publicar um post novo em meu blog mantendo a tradição de querer renovar e compartilhar as experiências e aprendizados adquiridos em minhas atividades profissionais e acadêmicas.

No post de hoje, não estarei compartilhando um conteúdo que pode ser considerado novo, ao contrário, quero destacar uma das mais antigas propriedades existentes em bancos de dados criados no Microsoft SQL Server desde suas versões mais antigas, mais especificamente falando da versão 2000 (é muito importante entender o passado, aprender com ele, para podemos melhorar e ofertar um futuro melhor) em diante.

Estou se referindo a propriedade denominada Page_Verify, a qual tem um papel de extrema importância no comportamento de um banco de dados de usuários, algo que pode impactar na forma de armazenamento, leitura e escrita das páginas de dados que formam a estrutura física e lógica de nossas tabelas e por consequência de nossos bancos de dados.

No decorrer deste post serão destacadas as respectivas opções existentes para esta propriedade, como também, será realizado uma análise comparativa no que diz respeito ao tempo de processamento de dados tendo como parâmetro um simples bloco de código inserindo 100.000 (Cem mil linhas de registros lógicos) com dados aleatórios.

Destaco antecipadamente que esta análise comparativa em nenhum momento leva em consideração características de Hardware, versão de Sistema Operacional ou uso de uma aplicação específica. Na verdade o objetivo desta simples análise é elucidar o que o uso desta propriedade, suas opções e respectivos algoritmos de processamento podem influenciar diretamente nos processos de escrita e leitura de dados.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 22 da sessão Para que serve. Mas uma vez, bem vindo ao #22 – Para que serve – Propriedades de Bancos de Dados – Page_Verify e suas opções.

Espero que você esta animado para conhecer um pouco mais sobre esta propriedade, caso já conheça, continue lendo este post, sempre podemos aprender algo novo….


Introdução

Criar uma nova tabela para alocar dados em qualquer banco de dados existente no Microsoft SQL Server, pode ser considerada uma tarefa ou procedimento de fácil compreensão, muito simples de ser realizada tanto por linha de comando como também por interface gráfica, mas por trás “dos panos” diversos procedimentos internos são realizados pelo Sistema Gerenciador de Banco de Dados e seus diversos recursos e componentes internos.

Imagine então a tarefa de criação de um novo banco de dados, não parece também ser algo muito, mas muito simples! Teoricamente sim, mas se começarmos a analisar, entender e de preferência estudar cada uma das diversas propriedades que formam e orientam o Mecanismo de Bancos de Dados na execução da instrução de criação de um novo banco, teremos a total certeza que isso não tão simples como pensamos.

Pensando justamente neste cenário, decidi então identificar uma propriedade que por muitas vezes me passou totalmente despercebida e nos últimos dias acabou sendo motivo de estudos, como já destacado anteriormente estou me referindo a propriedade Page_Verify, sendo esta um das mais antigas propriedades existentes em bancos de dados desde a versão 2000 ou nível de compatibilidade 80, inicialmente apresentava como conjunto de opções os valores: None e Torn_Page_Detection e a partir da versão 2005 do Microsoft SQL Server ganhou uma nova opção conhecida como CheckSum e por consequência um novo algoritmo.

Vamos então conhecer um pouco mais sobre esta propriedade.

Propriedade de Banco de Dados Page_Verify

Propriedade existente em bancos de dados criados no Microsoft SQL Server que possui basicamente a função de permitir ao Sistema Gerenciador de Banco de Dados identificar e informar as chamadas Páginas de Dados Incompletas (Incomplete Pages) ou Páginas de Dados Suspeitas (Suspect Pages), através de dados internos catalogados e coletados na tabela suspect_pages existente dentro do banco de dados de sistemas MSDB.

Outra característica muito importante apresentada pela Page_Verify, relaciona-se ao método de verificação que garante ao Microsoft SQL Server que as páginas de dados que compõem um determinada tabela podem ser consideradas integras e completas, esta capacidade esta totalmente relacionada ao uso de um algoritmo pertencente a esta propriedade de acordo com o tipo de verificação de página que deve ser aplicada.

Esta tão importante característica, deve ser levada em consideração, mesmo tendo diversas funcionalidades que nos permitem identificar se a estrutura física e lógica de um banco de dados pode ser considerado integra. Em inúmeros cenários um banco de dados pode aparentemente estar apresentando falhas na estrutura interna que define uma respectiva página de dados sem necessariamente existir ou que tenha ocorrida uma falha física nas unidades de disco que armazenam tal página de dados.

A identificação se uma página de dados pode ou não ser considerada incompleta, suspeita ou quebrada é feita através da identificação de bits armazenados diretamente no cabeçalho de dados existente na respectiva página, é justamente por isso que a propriedade Page_Verify utiliza alguns algoritmos de acordo com a opção escolhida nas configurações e propriedades de um banco de dados, como recurso para garantir em tempo real o menor número de ocorrências ou possíveis falhas que venham a ocasionar uma perda de dados.

Vamos agora conhecer as formas de verificação de páginas de dados e seus respectivos algoritmos.

Formas de Verificação: None, Torn_Page_Detection e CheckSum

Até a versão 2005 SP2 do Microsoft SQL Server tínhamos somente as formas de verificação de páginas de dados None e Torn_Page_Detection, mas este cenário muito e uma nova opção denominada CheckSum foi adicionada, sendo esta então valor padrão para propriedade Page_Verify para bancos de dados com nível de compatibilidade 90 ou superior.

None: Ao escolher esta opção, o Microsoft SQL Server recebe a orientação para que não seja realizado os procedimentos de verificação e correção das páginas lidas durante os atividades de armazenamento de dados.

Logicamente esta é uma opção que não deverá ser utilizada em ambientes que não podemos correr o menor risco possível de aceitar falhas ou perdas de dados, mesmo confiando nas tecnologias de Hardware, estratégias de armazenamento, contingência e retenção de dados, a partir do momento que esta opção for escolhida você estará assumindo o risco.

Torn_Page_Detection: Opção padrão existente na versão 2000 do Microsoft SQL Server. Ao escolher esta opção, estaremos definindo o uso do algoritmo que armazenará em tempo real no cabeçalho de cada página de dados bits que identificam a operação de gravação.

No momento em que esta mesma página é lida de um disco durante a operação de leitura, os bits do cabeçalho da página são comparados àqueles no corpo da página. Caso alguma discrepância venha a ser detectada, esta específica página de dados será em tempo real considerada quebrada (incompleta ou suspeita) e o problema é relatado para um usuário.

Vale destacar que este algoritmo no momento em que uma página de dados esta sendo verificada, realiza o procedimento de duplicação de pequenas porções de bits de dados contidos em seu cabeçalho, algo que não podemos necessariamente relatar como um consumo maior de espaço em disco, na verdade é esta tarefa de duplicação de dados bits de dados utilizada para garantir a consistência da página. Por outro lado, dependendo do tipo de falha que poderá ocorrer alguns erros acabam não sendo detectados, se justamente o bit quebrado é um daqueles que não foram duplicados no cabeçalho da página, o dano não é detectado.

CheckSum: Opção padrão desde o SQL Server 2005 SP3, a partir do momento que esta opção é selecionado, o Microsoft SQL Server estará fazendo uso do algoritmo responsável durante  operação de gravação, realizar uma soma de verificação (CheckSum) que calcula a partir da estrutura completa de uma página de dados um valor a ser armazenado diretamente em seu cabeçalho.

No momento em que a respectiva página de dados é lida a partir de um disco, CheckSum é calculado novamente e comparado com o valor no cabeçalho da página. A idéia é semelhante ao TORN_PAGE_DETECTION, podemos destacar que ambos algoritmos calculam um valor de verificação para uma página e armazenam o resultado no cabeçalho da página, mas CheckSum usa a página inteira para cálculo, ao contrário do TORN_PAGE_DETECTION que utiliza apenas um pequeno número de bits existente na página de dados.

Se compararmos a opção TORN_PAGE_DETECTION com a opção CheckSum, podemos afirmar que o CheckSum apresenta uma forma de análise e verificação de possíveis falhas e erros nas atividades de Input/Output de dados, mais confiável e inteligente, estabelecendo uma cobertura mais precisa que garante uma assertividade maior na identificação de possíveis páginas de dados incompletas, suspeitas ou quebradas.

Agora que conhecemos a propriedade Page_Verify e suas opções, vamos então conhecer de forma prática e entender o comportamento de cada uma delas, realizando assim a análise destacada no início deste post.

Chegou a hora de colocar a mão nos teclados, como de costume teremos um ambiente de testes a ser criado, o que será utilizado como cenário de estudos.

Criando o Ambiente

Em meu ambiente de estudos estou utilizando o Microsoft SQL Server 2017 Enterprise Edition – Cumulative Update 9 e Sistema Operacional Windows 10, fique a vontade para utilizar o melhor cenário possível dentro das suas necessidades.

Como já destacado anteriormente esta análise ou possível cenário de estudo não consiste em afirmar qual é a mais rápida ou melhor forma de verificação de páginas de dados, mas sim demonstrar o quanto uma determinada opção poderá impactar ou influenciar nos custos de processamento de dados nas atividades de leitura e escrita, nesta prática mais especificamente nas atividades de gravação de dados.

Para realizar nossa simples prática, começaremos pela execução do Bloco de Código 1, responsável por criar a seguinte estrutura:

  • Database: TesteDatabasePageVerify;
  • Tables: TabelaPageVerify; e PageVerifyTempoDecorrido.

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

— Acessando o Banco de Dados TesteDatabasePageVerify —
Use TesteDatabasePageVerify
Go

— Criando a Tabela TabelaPageVerify —
Create Table TabelaPageVerify
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(10) Not Null,
Quantidade SmallInt Not Null,
ValoresNumericos Numeric(18, 2) Not Null,
DataAtual Date Not Null)
Go

— Criando a Tabela PageVerifyTempoDecorrido —
Create Table PageVerifyTempoDecorrido
(NumeroDaAnalise SmallInt Identity(1,1) Not Null,
TipoDaAnaliseRealizada Varchar(22) Not Null,
HoraInicio Time Not Null,
HoraFim Time Not Null,
HoraDiferenca As (DateDiff(Second, HoraInicio, HoraFim)))
Go

A tabela TabelaPageVerify será utilizada como repositório dos dados que estaremos aleatoriamente gerando como fonte de análise, já a tabela PageVerifyTempoDecorrido terá um papel importante que consiste basicamente em armazenar os dados relacionada a análise realizada, dentre elas o Tipo da Análise, Horário de Início e Fim e a diferença em segundo entre os respectivos horários.

Avançando mais um pouco, vamos agora realizar propriamente a análise para cada uma das opções de verificação de páginas existentes, serão realizadas um total de 10 análises para cada opção e ao fim os dados armazenados na Tabela PageVerifyTempoDecorrido será apresentados como uma fonte de resultando da nossa análise.

Para realizar esta análise utilizaremos o Bloco de Código 2 apresentado abaixo:

— Bloco de Código 2 —
— Desativando a Contagem de Linhas —
Set NoCount On
Go

— Declarando as variáveis de controle —
Declare @Counter TinyInt = 0,
@Text Char(130),
@Position TinyInt,
@RowCount Int = 100000,
@HoraInicio Time = GetDate(),
@HoraFim Time

Set @Text = ‘0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ\_abcdefghijklmnopqrstuvwxyzŽŸ¡ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ.;^’ –There are 130 characters in this text–

While @Counter <10 — Definindo a quantidade máxima de testes —
Begin

— Alterando a Propriedade Page_Verify para None —
Alter Database TesteDatabasePageVerify
Set Page_Verify None

— Inserindo a massa de dados na tabela TabelaPageVerify —
While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘None’, @HoraInicio, @HoraFim)

— Alterando a Propriedade Page_Verify para Torn_Page_Detection —
Alter Database TesteDatabasePageVerify
Set Page_Verify Torn_Page_Detection

— Inserindo a massa de dados na tabela TabelaPageVerify —
Set @RowCount = 100000
Set @HoraInicio = GetDate()

While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘Torn_Page_Detection’, @HoraInicio, @HoraFim)

— Alterando a Propriedade Page_Verify para CheckSum —
Alter Database TesteDatabasePageVerify
Set Page_Verify CheckSum

— Inserindo a massa de dados na tabela TabelaPageVerify —
Set @RowCount = 100000
Set @HoraInicio = GetDate()

While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘CheckSum’, @HoraInicio, @HoraFim)

Set @Counter = @Counter + 1
End
Go

Ótimo, após o processamento de nossa análise, gerou a hora de obter o resumo de tempo decorrido de processamento para cada opção, basta executar o Bloco de Código 3 divido em duas partes: Resumo Detalhado e Resumo Sumarizado, conforme declaro abaixo:

— Bloco de Código 3 —
— Parte 1 – Consultando o resumo detalhado —
Select NumeroDaAnalise,
TipoDaAnaliseRealizada,
HoraInicio,
HoraFim,
HoraDiferenca As ‘Segundos’
From PageVerifyTempoDecorrido
Go

A Tabela 1 apresentada a seguir, ilustra o detalhamento de dados coletados durante o processamento do Bloco de Código 2 realizado anteriormente:

Número da Análise Tipo da Análise Hora Início Hora Fim Segundos
1 None 10:45:59.1966667 10:46:51.0566667 52
2 Torn_Page_Detection 10:46:51.0566667 10:47:31.9633333 40
3 CheckSum 10:47:31.9800000 10:48:09.3566667 38
4 None 10:47:31.9800000 10:48:09.3566667 38
5 Torn_Page_Detection 10:48:09.3700000 10:48:38.6800000 29
6 CheckSum 10:48:38.6966667 10:49:13.6800000 35
7 None 10:48:38.6966667 10:49:13.6933333 35
8 Torn_Page_Detection 10:49:13.7133333 10:49:47.5100000 34
9 CheckSum 10:49:47.5100000 10:50:17.3433333 30
10 None 10:49:47.5100000 10:50:17.3600000 30
11 Torn_Page_Detection 10:50:17.3766667 10:50:49.7066667 32
12 CheckSum 10:50:49.7233333 10:51:23.3566667 34
13 None 10:50:49.7233333 10:51:23.3733333 34
14 Torn_Page_Detection 10:51:23.3733333 10:51:54.4200000 31
15 CheckSum 10:51:54.4200000 10:52:29.0466667 35
16 None 10:51:54.4200000 10:52:29.0500000 35
17 Torn_Page_Detection 10:52:29.0666667 10:53:00.8300000 31
18 CheckSum 10:53:00.8466667 10:53:32.1433333 32
19 None 10:53:00.8466667 10:53:32.1600000 32
20 Torn_Page_Detection 10:53:32.1766667 10:54:06.6466667 34
21 CheckSum 10:54:06.6633333 10:54:36.9400000 30
22 None 10:54:06.6633333 10:54:36.9400000 30
23 Torn_Page_Detection 10:54:36.9566667 10:55:09.7533333 33
24 CheckSum 10:55:09.7700000 10:55:41.8866667 32
25 None 10:55:09.7700000 10:55:41.8866667 32
26 Torn_Page_Detection 10:55:41.9033333 10:56:15.0166667 34
27 CheckSum 10:56:15.0166667 10:56:45.6966667 30
28 None 10:56:15.0166667 10:56:45.7133333 30
29 Torn_Page_Detection 10:56:45.7133333 10:57:21.7900000 36
30 CheckSum 10:57:21.7933333 10:57:54.8433333 33

Tabela 1 – Detalhamento de dados coletados após o processamento do Bloco de Código 2.

— Parte 2 – Consultando o resumo sumarizado —
Select TipoDaAnaliseRealizada,
Avg(HoraDiferenca) As ‘Média em segundos’
From PageVerifyTempoDecorrido
Group By TipoDaAnaliseRealizada
Order By ‘Média em segundos’ Desc
Go

A Tabela 2 apresentada a seguir, ilustra o dados coletados durante o processamento do Bloco de Código 2 realizado anteriormente de forma sumarizada com o cálculo da média de segundos gastos para o processamento de cada opção de verificação de páginas:

Tipo da Análise Média em segundos
None 34
Torn_Page_Detection 33
CheckSum 32

Tabela 2 – Dados sumarizados após o processamento do Bloco de Código 2.

Falta só um pouco, o último passo que iremos realizar, consiste na apresentação do Sumário de processamento em segundos demandado por cada algoritmo de verificação de páginas, através da execução do Bloco de Código 4, sendo que o mesmo apresentará os seguintes resultados:

  • Média de processamento em segundos;
  • Menor tempo de processamento em segundos;
  • Maior tempo de processamento em segundos; e
  • Somatória total do tempo de processamento.

— Bloco de Código 4 —
— Pivot —
Select ‘Média de processamento…..’ As ‘Sumário por segundos’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Avg(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Menor tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Min(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Maior tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Max(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Somatória do tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Sum(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Go

A Tabela 3 apresentada a seguir, ilustra o dados coletados durante o processamento do Bloco de Código 4, sumarizados e estruturados através do uso de Pivot:

Sumário por segundos None Torn_Page_Detection CheckSum
Média de processamento….. 34 33 32
Menor tempo de processamento….. 30 29 30
Maior tempo de processamento….. 52 40 38
Somatória do tempo de processamento….. 348 334 329

Tabela 3 – Dados sumarizados e apresentados em formato de Pivot após o processamento do Bloco de Código 4.

Agora sim, chegamos ao final. Ufa deu um pouco de trabalho este post, como de costume, mesmo assim sempre vale a pena poder compartilhar um pouco do conhecimento e experiências adquiridas ao longo dos anos de trabalho como DBA e Professor.

Espero que você tenha gostado, eu posso dizer que sim, mas sua opinião é muito importante.


Referências

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-transact-sql?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-properties-options-page?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server?view=sql-server-2017

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2018/05/28/21-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/04/12/20-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/01/02/19-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/12/15/18-para-que-serve/

Conclusão

Pensar na melhor forma para se armazenar um dado em uma respectiva tabela, vai muito além de escolher o tipo de dados mais indicado, temos também que procurar conhecer cada vez mais as propriedades de definem a estrutura e comportamento de um banco de dados, visando sempre garantir a melhor forma de armazenar, coletar e garantir que nossos servidores, aplicações e usuários possam fazer uso desta tão importante matéria prima utilizada pelas organizações, os dados que estão guardados em nossos bancos dados.

Neste post, você pode conhecer uma mais sobre a propriedade de banco de dados Page_Verify e suas opções: None, Torn_Page_Detection e CheckSum. Propriedade que desempenha um papel de extrema importância no que diz respeita a garantir que nossos dados estão armazenados de forma integra e confiável.

Realizamos uma simples análise para elucidar como estas opções podem influenciar no comportamento do Database Engine e também no Storage Engine, conhecemos também como cada opção desempenha o papel de verificar a estrutura física e lógica das páginas de dados que formam nossas tabelas, fazendo uso de algoritmos que gravam diretamente bits nos cabeçalhos destas mesma páginas, como fonte de identificação para tentar garantir que sua estrutura esta integra e confiável.

Mais uma vez destaco que este o estudo realizado no cenário apresentando neste post, não tem a finalidade de mostrar qual opção é mais rápida, mas sim demonstrar como em alguns momento a opção Torn_Page_Detection em comparação com a CheckSum pode ser mais vantajosa ou não, sabendo que a opção None não é recomendada para fiz corporativos.

Este é o fantástico Microsoft SQL Server, que desde suas primeiras versões nos apresenta inúmeras possibilidade de se aprender, possibilitando usar o passado como fonte de inspiração para construção de um futura melhor, por isso que a cada dia eu me apaixono ainda mais por este produto…

Vai SQL Server, Vai SQL Server….

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve a ser publicado no mês novembro.

Um grande abraço e ótima semana.

Valeu.

Material de Apoio – Agosto 2018


Salve, galera, boa tarde.

Tudo bem? Estamos no mês de agosto, volta as aulas, aquela correria do dia a dia da vida acadêmica, profissional e familiar, espero que você esteja conseguindo dar conta de toda esta “loucura” que vivemos rotineiramente.

Como de costume, estou aqui mais uma vez procurando colaborar e compartilhar com a comunidade técnica em mais um post da sessão Material de Apoio dedicado exclusivamente ao meu blog.

Espero que você esteja gostando do conteúdo aqui disponibilizado, como também, possa me ajudar a cada vez mais melhorar ainda.

O post de hoje

Seja bem-vindo a mais um post da sessão Material de Apoio, sendo o quarto do ano de 2018 e de número 158 no total desta sessão.

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Hoje não será diferente, estou trazendo alguns dos mais recentes scripts  catalogados nos últimos meses, que atualmente estão compondo a minha galeria de códigos formada ao longo dos anos de trabalho como DBA e atualmente como Professor de Banco de Dados.

Neste post você vai encontrar arquivos relacionados exclusivamente ao recurso de Trigger, sendo este, algo bastante questionável e muito criticado pelos profissionais de bancos de dados e desenvolvedores, mas que aplicado de uma forma organizado e pensando sempre no conceito transacional de processamento linha á linha, poderá se tornar um ótima solução de automação de dados:

Segue abaixo a relação de temas relacionados ao uso de Triggers:

  • Auditoria;
  • Bloqueando a criação de tabelas com nomes específicos;
  • Bulk Insert;
  • Cálculo de parcelamento de valores;
  • Comando Delete;
  • Evitando a Duplicação de registros;
  • Exclusão de Tabelas;
  • Instead Of;
  • Integração de dados entre bancos de dados diferentes;
  • Logon All Server; e
  • Trigger Condicional.

Espero que este conteúdo possa lhe ajudar em seus atividades profissionais e acadêmicas. Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .docx ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql.

Material de Apoio

A seguir apresento a relação de arquivos  selecionados:

1 – Material de Apoio – Agosto – 2018 – Auditoria – Trigger All Server – Create Database + Drop Database.sql

2 – Material de Apoio – Agosto – 2018 – Trigger – Parcelamento de Valores + Cálculo Data Pagamento

3 – Material de Apoio – Agosto – 2018 – Descobrindo se o Trigger é Insert, Update ou Delete

4 – Material de Apoio – Agosto – 2018 – Habilitando e Desabilitando Trigger

5 – Material de Apoio – Agosto – 2018 – Implementando Trigger entre Bancos de Dados diferentes no mesmo Servidor

6 – Material de Apoio – Agosto – 2018 – Bloqueando a criação de tabelas com um determinado nome

7 – Material de Apoio – Agosto – 2018 – Evitando duplicidade de registros

8 – Material de Apoio – Agosto – 2018 – Trigger em conjunto com Bulk Insert

9 – Material de Apoio – Agosto – 2018 – Trigger for Logon All Sever

10 – Material de Apoio – Agosto – 2018 – Trigger On Database – Drop Table

11 – Material de Apoio – Agosto – 2018 – Trigger Condicional

12 – Material de Apoio – Agosto – 2018 – Trigger Instead Of

Fique a vontade para copiar, editar, compartilhar e distribuir estes arquivos com seus contatos, aproveite se possível deixe seu comentário, críticas, sugestões e observações.

Nota: Todos os arquivos disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Links

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2018/06/19/material-de-apoio-junho-2018/

https://pedrogalvaojunior.wordpress.com/2018/04/05/material-de-apoio-abril-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/13/material-de-apoio-fevereiro-2018/

Agradecimento

Quero agradecer imensamente a sua visita, sinto-me honrado e orgulhoso de contar com a sua presença.

Não deixe de acessar os outros posts das demais sessões, o próximo post desta sessão será publicado no mês de outubro, até continue aproveitando cada momento da sua vida, desfrutando com muita sabedoria os momentos de galeria e também os desafios que são colocada ao nosso redor.

Um forte abraço, muita saúde, sucesso e vamos em frente…

Script Challenge – 2018 – Post 14


Boa tarde comunidade…

Tudo bem? Sexta – feira dia 29/06 estamos no inverno, graças a deus aquele friozinho diminui muito nos últimos dias, eu particularmente gosto do frio, principalmente acompanhado da minha família e do leite quente, chocolate e aquela sopinha no final da tarde que somente minha “pequena” Fernanda sabe fazer.

Introdução

Os posts publicados nesta sessão tem o objetivo de desafiar o visitante a descobrir o que um determinado script pode fazer ao ser executado, e não somente isso, mostrar como podemos aprender com o uso da linguagem Transact-SQL e sua vasta coleção de comandos, funções e instruções adicionadas a cada nova versão ou atualização do Microsoft SQL Server.

Se você ainda não conhecia a sessão Script Challenge, fique tranquilo vai ter a possibilidade agora mesmo, como também a cada 4 meses poder desfrutar de um novo desafio e sua respectiva resposta, por isso esta sessão é denominada Script Challenge(Script Desafio ou Desafio do Script), bom a melhor forma de traduzir eu deixo para você escolher.

Seguindo um frente….

Gostaria de destacar mais uma vez duas mudanças iniciais implementadas na sessão Script Challenge tendo como base o post publicado em outubro de 2017, sendo elas:

  1. Como maneira ou forma de dificultar ainda mais o nível de complexidade do código, o bloco de código que representa o Script Challenge selecionado para compor o post será  apresentado no formato de imagem ou figura; e
  2. Algumas partes das linhas de código, trechos, ou partes de código serão omitidas, justamente como forma de tornar este código ainda mais desafiador.

Antes de destacar o script de hoje, não custa nada saber um pouco mais sobre esta sessão, por este motivo, quero lhe contar um pouco da história que cerca os posts relacionadas a ela…

Um pouco de História

Esta é uma sessão criado no final do ano de 2010 e mantida mensalmente até meados de 2012, desde então não me dediquei mais a mesma devido principalmente em não conseguir identificar possíveis scripts dentro da minha biblioteca que poderiam ser apresentados como um scripts considerados como desafio para os profissionais da área de banco de dados.

Mas acredito que nos últimos anos com o crescimento do Microsoft SQL Server, seu nível de evolução, amadurecimento e recursos adicionais, como também, meu nível de experiência profissional e acadêmica também evolui muito, sinto-me preparado para retornar com esta sessão e poder de forma bastante técnica, didática e conceitual poder lançar um “desafio” e responder o mesmo com muito segurança.

Outro detalhe importante, esta é uma sessão que foi criada, pensando em apresentar pequenos blocos de códigos oriundos da linguagem Transact-SQL que possam apresentar um nível de dificuldade e conhecimento técnico um pouco mais elevado, exigindo assim uma análise mais profunda e até mesmo a criação um pequeno cenário de teste para seu entendimento.

Vamos então conhecer o bloco de código selecionado para ser o Script Challenge deste post.


Script Challenge – 14

O bloco de código Transact-SQL selecionado para fazer parte do Script Challenge de hoje, esta relacionado com uma das atividades diárias exercidas por Administradores de Servidores, Desenvolvedores e logicamente por DBAs e Administradores de Banco de Dados. Bom não vou dizer a qual atividade eu me refiro, mas que ela apresenta uma importância muito grande para a vida de qualquer corporação, com certeza apresenta.

O desafio deste respectivo script, esta diretamente ligado com o impacto que o resultado obtido após sua execução e antes da realização da atividade poderá nos trazer, bem como, o mesmo torna-se uma útil ferramenta no que se relacionada a sobrevivência de nossos dados em caso de uma possível falha física.

Esta curioso para saber qual é esta atividade? Então não vou lhe responder, mas no final do post como de costume vou deixar um enquete para você expor sua opinião.

A seguir apresento o bloco de código:

Figura 1 – Short Script 14.

Muito bem, nosso Script Challenge esta apresentado, e ai você preparado para mais este desafio?

Tenho a certeza que sim!


Sua participação

Legal, agora quero conter com a sua participação, me ajudando a responder este post, outra grande novidade que estou adicionando aos post da sessão Script Challenge será uma pequena enquete com possíveis respostas para identificar qual é a correta relacionada com o desafio apresentado através do bloco de código selecionado para este post, desta forma, apresento a seguir a Enquete – Script Challenge – 14 e suas alternativas de resposta:

Seguindo em frente, já conhecemos o Script Challenge selecionado, sua enquete e relação de opções de resposta, fica faltando somente a sua participação, algo que eu tenho a certeza que vai acontecer rapidamente.

Durante quanto tempo posso participar…

Outra grande mudança na sessão Script Challenge é seu tempo de publicação “validade”, anteriormente os posts desta sessão eram publicados mensalmente ou bimestralmente, agora serão publicados em um período mais longo, ou seja, a cada 4 meses estarei compartilhando com vocês novos posts dedicados exclusivamente para esta sessão.

Desta forma, você terá mais tempo para participar e me ajudar e encontrar a resposta correta para este desafio, enviando suas possíveis sugestões, críticas e até mesmo alternativas de resposta para minha enquete.

Posts anteriores

Caso esta seja a primeira vez que você acessa um post desta sessão, fico muito feliz e aproveito para compartilhar os posts mais recentes:

https://pedrogalvaojunior.wordpress.com/2017/10/26/script-challenge-2017-o-retorno/

https://pedrogalvaojunior.wordpress.com/2018/03/01/script-challenge-13-a-resposta/


Agradecimentos

Obrigado por sua visita, espero que o retorno desta sessão e o conteúdo aqui apresentado como um possível “desafio” possam ser úteis e ao mesmo tempo prover conhecimento, aprendizado ou mostrar recursos e problemas existentes no Microsoft SQL Server que as vezes parecem não ter uma resposta.

Um forte abraço nos encontramos em breve nas demais sessões e especialmente em outubro de 2018 em mais um post da sessão Script Challenge.

Sucesso, mais uma vez obrigado por sua visita, espero que você tenha gostado deste post.

Fique a vontade para conhecer demais publicados até o presente momento nas demais sessões.

Abraços.

Microsoft disponibiliza nova versão do System Center Management Pack para SQL Server


A Microsoft anunciou ontem dia 05/06 em seu blog SQL Server Release Services a nova versão do System Center Management Pack v7.0.5.0 Preview compatível com as versões: 2017, 2016, 2014, 2012, 2008 e 2008 R2 do Microsoft SQL Server.

Através do Management Pack, Profissionais de Tecnologia, Administradores de Servidores, Administradores de Bancos de Dados e DBAs, terão a possibilidade de monitorar em tempo os respectivos bancos de dados, serviços como SQL Server Agent e outros componentes que compõem o System Center Operations Manager.

See the source image

Em seu anúncio a Microsoft, informa que o System Center Management Pack v7.0.5.0 Preview para SQL Server traz correções para múltiplos bugs, mudanças em alguns scripts, mudanças na severidade de alguns alertas, suporte para monitoramento de instâncias SQL Server Cluster localmente, suporte para monitoramento de SQL Server Integration Services.

A versão 7.0.5.0 Preview encontra-se disponível para download, através dos links:

System Center Management Pack 7.0.5.0 Preview para SQL Server 2008, 2012, 2014 e 2016.

System Center Management Pack 7.0.5.0 Preview para SQL Server 2017.

Há lista completa com todas as novidades e bugs corrigidos pode ser obtida acessando: https://blogs.msdn.microsoft.com/sqlreleaseservices/released-public-preview-for-sql-server-management-packs-update-7-0-5-0-and-ssrs-management-pack-update-7-0-6-0/

Fontes e Direitos Autorais: 

Microsoft SQL Server 2016 SP1 – Atualização Cumulativa 8 disponível


A Microsoft disponibilizou para download recentemente a Atualização Cumulativa 8 para SQL Server 2016 SP1.

As informações obtidas através do artigo KB4077064 publicado no site de suporte da Microsoft, esta atualização traz correções decorrentes dos problemas apresentados e identificados após o lançamento do SP1 e das atualizações cumulativas anteriores.

Relação de Atualizações Cumulativas disponíveis para o Microsoft SQL Server 2016 Service Pack 1:

SQL Server 2016 SP1 CU7
SQL Server 2016 SP1 CU6
SQL Server 2016 SP1 CU5
SQL Server 2016 SP1 CU4
SQL Server 2016 SP1 CU3
SQL Server 2016 SP1 CU2
SQL Server 2016 SP1 CU1
SQL Server 2016 SP1
SQL Server 2016 all builds

Hotfixes que estão incluídos neste pacote de atualização cumulativa


Número do bug do VSTS Número do artigo KB Descrição Área de correção
11190572 4074696 CORREÇÃO: Operação de análise falha e retorna um erro de nível de linha não-administradores no SSAS 2016 (modelo de tabela) Serviços de análise
11403782 4058565 CORREÇÃO: Erro de asserção ao executar um procedimento armazenado que faz referência a um objeto grande no SQL Server de 2014, 2016 e 2017 Desempenho de SQL
11455726 4074862 CORREÇÃO: Erro inesperado ao criar um subcubo em 2016 Analysis Services do SQL Server (modelo Multidimensional) Serviços de análise
11444126 4074881 CORREÇÃO: Erro de asserção quando os dados são inseridos em massa em uma tabela que contém índices columnstore não estão em cluster e de cluster no SQL Server 2016 Mecanismo SQL
11441098 4017445 CORREÇÃO: Um segmento de REFAZER não está disponível na réplica secundária depois que um banco de dados de disponibilidade é descartado no SQL Server Alta disponibilidade
10988062 4038932 CORREÇÃO: Change Data Capture funcionalidade não funciona no SQL Server Serviços de integração
11405602 4046745 CORREÇÃO: Declaração UPDATE falha silenciosamente quando você faz referência a uma função de partição inexistente na cláusula WHERE no SQL Server de 2014 2016 ou 2017 Mecanismo SQL
11405606 4048967 CORREÇÃO: Não é possível habilitar ou desabilitar a captura de dados de alteração para um banco de dados depois de anexar no SQL Server de 2014 2016 ou 2017 Mecanismo SQL
11405621 4054398 CORREÇÃO: Varejo “Comparação inválida devido a nenhum AGRUPAMENTO” assert ocorre no SQL Server de 2014, 2016 e 2017 Mecanismo SQL
11297169 4013247 CORREÇÃO: Assinaturas do SSRS falham na execução de um relatório que se conecta a uma lista do SharePoint externo O Reporting Services
11396933 2932559 CORREÇÃO: Totais estão errados depois de filtrar em um item de tabela dinâmica e remover o filtro no SSAS Serviços de análise
11511975 4077105 CORREÇÃO: Erro de falta de memória quando o espaço de endereço virtual do processo do SQL Server é muito baixo em SQL Server Mecanismo SQL
11455724 4082865 CORREÇÃO: O SSAS falha quando uma consulta é executada em uma grande tabela particionada no SQL Server 2016 Serviços de análise
11456360 4083949 CORREÇÃO: SSAS pode apresentar falha quando você executa uma consulta DAX usando-se um usuário não-administrador do Windows no SQL Server 2016 Serviços de análise
11511973 4057307 CORREÇÃO: Modo Multidimensional trava aleatoriamente e uma violação de acesso ocorre no SSAS 2016 ou no SSAS 2014 Serviços de análise
11509590 4086136 CORREÇÃO: O SSAS para de responder quando você executa uma consulta MDX no SQL Server 2016 Analysis Services (modelo Multidimensional) Serviços de análise
11426456 4087358 CORREÇÃO: Sequência de caracteres de conexão baseada em expressão é limpo quando você configurar fontes de dados para o relatório de 2016 SSRS O Reporting Services
11508542 4088901 CORREÇÃO: Falha de afirmação ao sys.dm_db_log_space_usage instrução é executada em um instantâneo de banco de dados no SQL Server 2016 Alta disponibilidade
11183472 4089324 CORREÇÃO: Erro 15665 quando você chamar sp_set_session_context repetidamente com o valor da chave nula no SQL Server 2016 Mecanismo SQL
11565899 4089099 CORREÇÃO: Leva muito tempo para restaurar um banco de dados criptografado TDE backup no SQL Server Mecanismo SQL
11529110 4089623 CORREÇÃO: Memória insuficiente ocorre e consulta falhar quando você executa a consulta MDX com opção não vazios no SSAS 2016 e SSAS 2014 Serviços de análise
11053682 4089950 Atualização para dar suporte à eliminação de partições em planos de consulta que têm índices espaciais no SQL Server 2016 Desempenho de SQL
11323371 4090025 CORREÇÃO: Mascaramento aleatório não colocar máscara em valores BIGINT corretamente no SQL Server Segurança do SQL
11456072 4090032 CORREÇÃO: Memória obtém esgotada ao executar o relatório de BI de energia que executa a consulta DAX no modo multidimensional do SSAS 2016 Serviços de análise
11569422 4089948 CORREÇÃO: Bloqueio de consulta Intra quando os valores são inseridos em um índice particionado columnstore em cluster no SQL Server 2016 Mecanismo SQL
11281514 4052131 CORREÇÃO: DMV sys.dm_os_windows_info retorna valores errados para 10 do Windows e Windows Server 2016 Mecanismo SQL
11301441 4058700 CORREÇÃO: Erro de 9004 intermitente quando um backup é restaurado por meio do modo de espera no SQL Server 2014 Mecanismo SQL
11336087 4057615 CORREÇÃO: Erro de “Sintaxe incorreta próximo a palavra-chave ‘KEY'” quando você adiciona uma tabela Oracle com coluna principal chamada ‘KEY’ no SQL Server 2016 Serviços de integração
11339410 4058289 CORREÇÃO: A instrução ALTER procedimento com criptografia falha quando você criptografa um procedimento armazenado não publicados no SQL Server 2016 Mecanismo SQL
11420793 4058747 CORREÇÃO: Erro ao atualizar o banco de dados do SSIS catálogo na Standard Edition do SQL Server 2016 Serviços de integração
11457917 4077683 CORREÇÃO: Sp_execute_external_script de procedimento armazenado do sistema e memória do DMV sys.dm_exec_cached_plans causa vazamento no SQL Server 2016 e 2017 Mecanismo SQL
11447600 4038881 CORREÇÃO: Exceção inesperada ocorre quando você processar dimensões usando o processo de atualização no SSAS 2016 Serviços de análise
11309597 4073393 CORREÇÃO: erro “área de dados passada para uma chamada do sistema é muito pequena” ao iniciar um aplicativo de área de trabalho de ponte em um SQL Server de 2014 2016 e 2017 Mecanismo SQL
11446129 3192154 Uma opção de plano de consulta não ideal faz com que o desempenho ruim quando valores fora do intervalo representado nas estatísticas serão pesquisados em SQL Server 2016 e 2017 Desempenho de SQL
11548517 3147012 CORREÇÃO: Uso de pontos de verificação de disco grandes ocorre para um grupo de arquivos de memória otimizada durante cargas de trabalho pesadas de memória OLTP de memória
11559191 4058174 CORREÇÃO: Contenção de tempdb pesada ocorre no SQL Server 2016 Mecanismo SQL
11516257 4087406 CORREÇÃO: Erro 9002 quando não houver nenhum espaço em disco suficiente para o crescimento de log crítica no SQL Server 2014 e 2016 Mecanismo SQL
11444654 4090486 CORREÇÃO: Backup gerenciado não processa renomear nome de banco de dados para um novo nome com espaços no SQL Server 2016 à direita Ferramentas de gerenciamento
11704293 4078596 CORREÇÃO: Violações de acesso aleatórias ocorrem quando você executa o procedimento armazenado no SQL Server 2016 de monitoramento Mecanismo SQL
11545426 4089276 Melhora o desempenho de consulta quando um filtro de bitmap otimizado é aplicado a um plano de consulta no SQL Server 2016 e 2017 Mecanismo SQL
11532381 4089819 CORREÇÃO: erro “esgotado durante a espera de registrador de divisão de buffer – tipo 4” quando você usa grupos de disponibilidade no SQL Server 2016 ou 2017 Alta disponibilidade

Resoluções adicionais

Soluções para os seguintes problemas também estão incluídas no SQL Server 2016 SP1 CU8.

Número do bug do VSTS Descrição
11701162 Um erro de declaração ocorre quando você parar a propagação automática de um grupo de disponibilidade.
11704344 DAX consultas são executadas mais lentamente que antes após você fazer backup de um banco de dados do SSAS tabular.
11704240 PolyBase falha se PolyBase contadores estão ausentes ou corrompidos no Monitor de desempenho do Windows.
11704339 Melhora o desempenho de consulta quando for aplicado um filtro de bitmap otimizado para o plano de consulta.
11704329 Recuperação paralela falha com um tempo limite trava de buffer em uma réplica de um grupo de disponibilidade sempre no secundário.
11701219 A linha de tendência do KPI não é atualizada quando o conjunto de dados é atualizado.
11704269 Adiciona o suporte do uso de um banco de dados do SQL Server 2017 como uma fonte de dados de um modelo de DirectQuery tabular no SSAS 2016.
11704293 Violações de acesso aleatórias ocorrem quando você executa [dbo]. [usp_CollectWhoIsActiveData] no SQL Server 2016.
11704335 Replicação de dados da Oracle para SQL falha quando você atualizar o CU7 para o SQL Server 2016 SP1.

Dentre os mais diversos bugs identificados e corrigidos destaco um bem específico relacionado a backups de bancos de dados criptografados através do recurso TDE que apresentavam um longo de restauração, sendo este o bug de número: 11565899, artigo KB: 4089099.

Vale ressaltar que após a atualização desta nova atualização cumulativa, o número do build utilizado pelo Microsoft SQL Server 2016 SP1 será alterado para compilação: 13.0.4474.0.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Suporte da Microsoft – https://support.microsoft.com/pt-br/help/4077064.