#23 – Para que serve


Olá, bom dia, tudo bem? E ai preparado para festividades de final de Ano?

Seja bem-vindo a mais um post da sessão Para que Serve, sendo este o de número 23, mais um dia de muito começando, repleto de atividades e compromissos, ainda mais hoje sexta – feira e muito próximo ao Natal.

Mesmo no ritmo de fim de ano, tenho mantido a minha rotina, acordar bem cedo, 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, vou compartilhar com você que esta acessando meu blog, uma nova opção adicionada diretamente aos bancos de dados que criamos a partir do Microsoft SQL Server 2016 que nos permite que seja utilizada de forma exclusiva no nível de banco de dados ao invés de aplicar diretamente no nível de instância.

Talvez você já possa ter utilizada esta nova opção, mas tenho a certeza que muitos dos profissionais que ainda não migraram seus ambientes para versões mais novas talvez não a conheçam, estou me referindo a opção AUTOGROW_ALL_FILES, que basicamente define no nível de banco de dados (Database Level) ao contrário do que acontecia nas versões anteriores que tínhamos a necessidade de ativar a Trace Flag T1117 que aplicava esta alteração de comportamento padrão no nível de instância (Server Level).

No decorrer deste post será realizado um pequeno comparativo entre as opções AUTOGROW_ALL_FILES e AUTOGROW_SINGLE_FILE, analisando seus comportamentos padrões, tendo como base um simples bloco de código inserindo 500.000 (Quinhentas mil linhas de registros lógicos) com dados fixos.

Adianto 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 que o uso destas  opções podem influenciar na maneira que o Microsoft SQL Server utiliza um ou mais arquivos de dados de forma proporcional ou simultânea.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 23 da sessão Para que serve. Mas uma vez, bem vindo ao #23 – Para que serve – Opções de Bancos de Dados – AUTOGROW_ALL_FILES versus AUTOGROW_SINGLE_FILE.

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

Todo o banco de dados SQL Server tem, no mínimo, dois arquivos de sistema operacional: um arquivo de dados e um arquivo de log. Os arquivos de dados contêm dados e objetos como tabelas, índices, procedimentos armazenados e exibições.

Os arquivos de log contêm as informações necessárias para recuperar todas as transações no banco de dados, ao contrário dos arquivos de dados que podem ser agrupados em grupos de arquivos para propósitos de alocação e administração.

Os bancos de dados SQL Server possuem três tipos de arquivos, como mostrado na Tabela 1 a seguir:

Arquivo  Descrição 
Primário O arquivo de dados primário contém as informações de inicialização do banco de dados e aponta para os outros arquivos no banco de dados.
Dados do usuário e objetos podem ser armazenados neste arquivo ou em arquivos de dados secundários. Todo banco de dados possui um arquivo de dados primário. A extensão de nome de arquivo indicada para arquivos de dados primários é .mdf.
Secundário Os arquivos de dados secundários são opcionais, definidos pelo usuário, e armazenam dados do usuário.
Arquivos secundários podem ser usados para distribuir os dados entre os diversos discos, colocando cada arquivo em uma unidade de disco diferente. Além disso, caso um banco de dados exceda o tamanho máximo em um único arquivo Windows, será possível usar arquivos de dados secundários, assim, o banco de dados continuará a crescer.
A extensão de nome de arquivo indicada para arquivos de dados secundários é .ndf.
Log de transações Os arquivos de log de transações armazenam as informações de log usadas para recuperar o banco de dados. Deve haver, no mínimo, um arquivo de log para cada banco de dados.
A extensão de nome de arquivo indicada para arquivos de transação é .ldf.

Tabela 1 – Tipos de Arquivos que formam um banco de dados criado no Microsoft SQL Server.

Agora que já conhecemos os tipos de arquivos que podem compor um banco de dados, vamos conhecer um pouco sobre um outro importante recurso que esta diretamente relacionado a este post, os denominados Filegroups.

Filegroups

Quando objetos são criados no banco de dados sem especificar a qual grupo de arquivos eles pertencem, os objetos são atribuídos ao grupo de arquivos padrão. A qualquer hora, um grupo de arquivos é designado como o grupo de arquivos padrão.

Os arquivos no grupo de arquivos padrão devem ser grandes o suficientes para armazenar qualquer objeto novo alocado a outros grupos de arquivo.

O grupo de arquivos PRIMÁRIO é o grupo de arquivos padrão, a menos que seja alterado usando a instrução ALTER DATABASE. A alocação para os objetos de sistema e de tabelas permanece no grupo de arquivos PRIMÁRIO, e não no novo grupo de arquivos padrão. O SQL Server mapeia um banco de dados de um conjunto de arquivos do sistema operacional.

As informações de log e dados nunca ficam misturadas no mesmo arquivo, e os arquivos individuais são usados apenas por um banco de dados, os grupos de arquivos são conhecidos como coleções de arquivos e são usados para simplificar o posicionamento de dados e em tarefas administrativas, como operações de backup e restauração.

Crescimento de Arquivos de Dados

Ao criar um banco de dados, estamos estabelecendo o uso de uma ou mais áreas em disco rígido para alocar nossos arquivos de dados. Dentre as diversas opções e propriedades que podemos configurar no momento da criação de um novo banco de dados ou em sua alteração, nos deparamos com a propriedade FileGrowth, sendo esta responsável em estabelecer a forma ou método de crescimento que toda estrutura de arquivos de dados que formam nossos bancos deverá aplicar, escolhendo a método de rodízio (Round-Robin) na qual os arquivos vão sendo preenchidos de forma aleatória de acordo com a necessidade ou através do método Preenchimento Proporcional (Proportional Fill).

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, a partir da versão 2016 do Microsoft SQL Server.

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

  • Databases: TesteDatabaseAUTOGROWSINGLEFILE; e TesteDatabaseAUTOGROWALLFILES;
  • Tables: TabelaGrowSingleFile; e TabelaGrowAllFile.

Importante: Destaco que os caminhos informados para criação dos referidos bancos e seus arquivos, estão apresentados de acordo com a configuração do meu ambiente, fique a vontade para alterar de acordo com suas necessidades e configurações.

— Bloco de Código 1 —
— Criando os respectivos bancos de dados  —

— Criando o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE —
Create Database TesteDatabaseAUTOGROWSINGLEFILE
On Primary
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data.mdf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data1’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data1.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data2’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data2.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB)
Log On
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Log’,
FileName= ‘S:\MSSQL-2017\Log\TesteDatabaseAUTOGROWSINGLEFILE_Log.Ldf’,
Size=20 MB,
MaxSize=8192 MB,
FileGrowth=200 MB)
Go

— Criando o Banco de Dados TesteDatabaseAUTOGROWALLFILES —
Create Database TesteDatabaseAUTOGROWALLFILES
On Primary
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data.mdf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data1’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data1.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data2’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data2.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB)
Log On
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Log’,
FileName= ‘S:\MSSQL-2017\Log\TesteDatabaseAUTOGROWALLFILE_Log.Ldf’,
Size=20 MB,
MaxSize=8192 MB,
FileGrowth=200 MB)
Go

Nota: Vale ressaltar que ambos os bancos de dados estão estruturados com a mesma quantidade de arquivos de dados e log, respectivamente 3(três) arquivos de dados e somente um único arquivo de log.

Muito bem, neste momento nossos bancos de dados estão criados e ambos contendo a mesma configuração para as propriedades: Size, MaxSize e FileGrowth, como também, configurados para que o crescimento ocorra de forma aleatória para os arquivos de dados.

Vamos validar nossa estrutura através do Bloco de Código 2 apresentado abaixo, o qual vai nos permitir identificar justamente as configurações que aplicamos no momento da criação dos referidos bancos de dados:

— Bloco de Código 2 —
Select DB_NAME() AS [DatabaseName], Name, file_id, physical_name,
(size * 8.0/1024) as Size,
((size * 8.0/1024) – (FILEPROPERTY(name, ‘SpaceUsed’) * 8.0/1024)) As FreeSpace
From sys.database_files
Go

Após executar o Bloco de Código 2, o Management Studio deverá apresentar o resultado similar a ilustrado na Figura 1 para ambos os bancos de dados:
Figura 1 – Informações sobre os bancos de dados seus arquivos, tamanhos e espaço livre ocupado.

Nosso próximo passo será forçar o crescimento dos nossos arquivos para o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE, observando o comportamento que o SQL Server vai utilizar, ressalto que estaremos fazendo a criação da tabela que utilizaremos como base para inserir os dados, para tal cenário vamos utilizar o Bloco de Código 3 apresentado a seguir:

— Bloco de Código 3 —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

— Criando a Tabela TabelaGrowSingleFile —
Create Table TabelaGrowSingleFile
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(100) Default ‘Grow Single File’,
Quantidade SmallInt Default 2018,
ValoresNumericos Numeric(8,2) Default ‘2018.12’,
DataAtual Date Default GetDate()+Rand()*30)
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowSingleFile Default Values
Go 500000

A partir do momento que o Bloco de Código 3 é executado, o Microsoft SQL Server em conjunto com o SQL OS, Database Engine e Storage Engine, começam a fazer uso dos arquivos de dados, distribuindo em tempo real as páginas de dados conforme o método ou técnica escolhida para preenchimento dos arquivos de dados.

Para confirmarmos a alocação e distribuição destas páginas, vamos executar o Bloco de Código 4 apresentado abaixo em uma Nova Query e observar o resultado apresentado:

— Bloco de Código 4 —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

DBCC ShowFileStats — Comando que vai apresentar a distribuição de páginas de dados entre os arquivos
Go

Observação: Execute o comando DBCC ShowFileStats durante a execução do Bloco de Código 3, para que você possa obter um resultado similar ao apresentado na Figura 2 abaixo:

Figura 2 – Resultado apresentado pelo comando DBCC ShowFileStats.

No decorrer do processamento do Bloco de Código 3, podemos novamente o Bloco de Código 2 para identificar que neste momento o Microsoft SQL Server esta fazendo uso método de preenchimento dos arquivos de dados Round-Robin, no qual ele identifica qual seria o melhor arquivo para alocar a página, para confirmar este cenário a Figura 3 ilustra o resultado obtido de mais uma execução do Bloco de Código 2:
Figura 3 – Alocação dos arquivos de dados.

Observe a mudança de valores nas colunas Size e FreeSpace, como também, suas diferenças de valores em relação ao File_ID=1 para com os File_ID = 2 e 3, são justamente estas diferenças que nos orientam a entender que o Round-Robin esta sendo utilizado.

Estamos indo bem, falta um pouco para chegarmos ao final….

Nosso próximo passo se destina a alterar a forma de preenchimento e utilização dos arquivos de dados definidos para o Banco de Dados TesteDatabaseAUTOGROWALLFILES, e em seguida forçar o uso de cada arquivos e a distribuição de páginas. Vamos então executar o Bloco de Código 5 e sua sequência de passos:

 — Bloco de Código 5 —
— Alterando a definição de crescimento dos arquivos de Dados para o FileGroup Primary —
Use Master
Go

Alter Database TesteDatabaseAUTOGROWALLFILES
Modify FileGroup [Primary] AUTOGROW_ALL_FILES — Definindo o crescimento proporcional   para todos os arquivos de dados —
Go

— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWALLFILES
Go

— Criando a Tabela TabelaGrowSingleFile —
Create Table TabelaGrowAllFile
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(100) Default ‘Grow All File’,
Quantidade SmallInt Default 2018,
ValoresNumericos Numeric(8,2) Default ‘2018.12’,
DataAtual Date Default GetDate()+Rand()*30)
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowAllFile Default Values
Go 500000

Neste momento temos o banco de dados TesteDatabaseAUTOGROWALLFILES sendo utilizando, no qual sua estrutura de arquivos esta definida para ser utilizada de forma conjunto e proporcional, ou seja, conforme a necessidade de crescimento dos arquivos de dados, ao invés de um único arquivo ser invocado e ter seu valor de crescimento definido, todos os arquivos serão envolvidos e afetados, conforme a Figura 4 a seguir ilustra:
Figura 4 – Preenchimento de todos os arquivos de dados sendo realizado com base no uso da opção Grow_All_Files.

Estamos quase lá, para finalizar nosso estudos, vamos executar o Bloco de Código 6, o qual tem a finalidade de repetir a inserção das 500.000 mil linhas de registros em cada banco de dados e posteriormente forçar um crescimento para os arquivos de dados:

 — Bloco de Código 6 —
— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowSingleFile Default Values
Go 500000

— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWALLFILES
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowAllFile Default Values
Go 500000

Note que para o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE o crescimento vai ocorrer no primeiro arquivo de dados e para no Banco de Dados TesteDatabaseAUTOGROWALLFILES este crescimento será aplicado a todos os arquivos, conforme apresenta a Figura 5 abaixo:
Figura 5 – Espaço ocupado pelos arquivos de dados após o crescimento ser ocorrido.

Para finalizar, compartilho a Figura 6 que apresenta a utilização dos arquivos de dados por parte do Storage Engine de acordo com o método de alocação e preenchimento dos arquivos de dados, respeitando a configuração dos bancos de dados aqui utilizados:

Figura 6 – Comparativo entre AutoGrowSingleFile versus AutoGrowAllFiles.

Importante: Observe que todos os arquivos de dados definidos para uso no banco de Dados TesteDatabaseAutoGrowAllFiles apresentam os mesmos valores para colunas Size e FreeSpace, cenário totalmente diferente para o banco de dados TesteDatabaseAutoGrowSingleFile, que ilustra a utilização de forma diferente dos arquivos de dados, no qual os arquivos File_ID=2 e 3 estão neste momento sem espaço livre, o que indica que o crescimento foi aplicado ao primeiro arquivo de dados.

Com isso, e sem mais delongas, 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://pedrogalvaojunior.wordpress.com/2017/01/23/12-para-que-serve/

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql

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

https://blogs.msdn.microsoft.com/psssql/2016/03/15/sql-2016-it-just-runs-faster-t1117-and-t1118-changes-for-tempdb-and-user-databases/

https://www.brentozar.com/archive/2014/06/trace-flags-1117-1118-tempdb-configuration/

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-2017

https://www.sqlshack.com/understanding-sql-server-proportional-fill-algorithm/

http://www.sqlservercentral.com/scripts/Maintenance+and+Management/30218/

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/08/22/22-para-que-serve/

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/

Conclusão

Conhecer a cada nova versão as mudanças e novidades aplicadas ao Microsoft SQL Server não é uma tarefa fácil, mas deixar de fazer uso delas pode em algum momento parecer falta de interesse ou até mesmo desconhecimento do potencial existente no produto.

Neste post, podemos conhecer esta nova opção Auto_Grow_All_Files, que nos permite aplicar uma nova maneira de orientar o SQL Server no uso, alocação e principalmente crescimento de nossos arquivos de dados, o que pode ou não impactar de forma direta na performance, contenção ou distribuição de recursos relacionados a disco rígido.

Em momento algum, o cenário aqui utilizado, muito menos a análise feita, teve o objetivo de comprovar qual forma de alocação e uso dos arquivos de dados é melhor, isso deve ser analisado para cada necessidade e ambiente.

Espero que o conteúdo aqui apresentado possa lhe ajudar a conhecer um pouco sobre como os arquivos de dados são importantes e úteis para nossos bancos, além disso, a importância de se utilizar mais de um arquivo de dados ou filegroups.

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 futuro 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 fevereiro de 2019.

Um grande abraço e ótima semana.

Valeu.

Anúncios

Short Scripts – Setembro 2018


Buenos dias, bom dia, comunidade….

E ai como passaram os últimos meses?

Pergunto isso, devido ao post anterior desta sessão ter sido publicado no mês de maio, posso imaginar que neste intervalo de tempo nossas vidas apresentaram inúmeras situações, espero que todas possam ter sido dentro do possível boas, assim como a minha, e se caso venha a existir algo mais espinhoso, que você possa ter superado.

Seguindo em frente, que alegria poder te encontrar em mais um post da sessão Short Scripts, uma das sessões mais recentes do meu blog que esta alçando a marca de 34 posts publicados trimestralmente.

Mantendo a tradição estou retornando com mais um conjunto de “pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, estou compartilhando a minha feita a alguns meses no final do último post desta sessão, publicando mais um conjunto de scripts adicionados atualmente na minha biblioteca particular de códigos e exemplos.

O post de hoje

Normalmente compartilho os principais scripts armazenados nos últimos meses, no post de hoje vou fazer um pouco diferente, recentemente tive a necessidade de realizar alguns atividades relacionadas as Split de dados e Collation, sendo assim, decide então compartilhar alguns códigos que estejam envolvidos com estes assuntos e que também se vinculem com outros, dentre os quais destaco:

  • Collate Column,
  • Collate,
  • Collation,
  • Database Collate,
  • Database Collation,
  • Instâncias Microsoft SQL Server,
  • Junção de Tabelas,
  • Page Split,
  • Server Collation,
  • Servidores Microsoft SQL Server,
  • String Split,
  • User Defined Function, e
  • Valores separados por vírgulas.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Setembro 2018 . Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, 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 e melhorar cada um destes códigos.

Short Scripts

— Short Script 1  – Identificando Page Split – Método 1  —
SELECT cntr_value
FROM sys.sysperfinfo
WHERE counter_name =’Page Splits/sec’ AND
OBJECT_NAME LIKE’%Access methods%’
Go

— Short Script 2  – Identificando Page Split – Método 2  —
SELECT object_name,
counter_name,
instance_name,
cntr_value, cntr_type

FROM sys.dm_os_performance_counters
WHERE counter_name =’Page Splits/sec’ AND
OBJECT_NAME LIKE’%Access methods%’
Go

— Short Script 3  – Criando um User Defined Function para separação de Strings por vírgula  – Método 1 —
CREATE FUNCTION dbo.UFN_SEPARATES_COLUMNS(@TEXT1 varchar(8000), @COLUMN tinyint, @SEPARATOR char(1))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @POS_START int = 1
DECLARE @POS_END int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)

WHILE (@COLUMN >1 AND @POS_END> 0)
BEGIN
SET @POS_START = @POS_END + 1
SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
SET @COLUMN = @COLUMN – 1
END

IF @COLUMN > 1 SET @POS_START = LEN(@TEXT) + 1
IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1

RETURN SUBSTRING (@TEXT, @POS_START, @POS_END – @POS_START)
END
Go

SELECT
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 1, ‘-‘) AS PREFIX,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 2, ‘-‘) AS REGISTRATION_GROUP,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 3, ‘-‘) AS REGISTRANT,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 4, ‘-‘) AS PUBLICATION,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 5, ‘-‘) AS [CHECK]
Go

— Short Script 4  – Criando um User Defined Function para separação de Strings por vírgula – Método 2  —

Create FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1

INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end – @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)

END
RETURN
END

Select * from dbo.fnSplitString(‘Querying SQL Server’,”)
Go

— Short Script 5  – Informando o Collate de uma coluna na cláusula Where  —
S
elect campo
From tabela
Where campo collate Latin_General_CI_AS like ‘%á%’
Go

— Short Script 6  – Informando o Collate na declaração de uma coluna e na cláusula Where  —
Select Campo collate Latin_General_CI_AS
From tabela
Where Campo collate Latin_General_CI_AS like ‘%á%’
Go

— Short Script 7  – Alterando o Collate de um Banco de Dados  —
Alter Database MosaicoClient
Collate SQL_Latin1_General_CP1_CI_AI
Go

— Short Script 8  – Alterando o Collate de uma Coluna  —
Alter Table Users
Alter Column [Password] Varchar(12) Collate SQL_Latin1_General_CP1_CS_AS
Go

— Short Script 9  – Identificando o Server Collation  – Método 1 —
Select SERVERPROPERTY (‘collation’)
Go

— Short Script 10 – Identificando o Server Collation  – Método 2 —
Exec sp_helpsort
Go

— Short Script 11 – Identificando o Database Collation —
Select DatabasePropertyEx(‘MRP’,’collation’)
Go

— Short Script 12 – Identificando o Column Collation – Método 1 —
Exec sp_help ‘Produtos’
Go

— Short Script 13 – Identificando o Column Collation – Método 2 —
Select * from Sys.columns
Where Name = ‘Produtos’
Go

— Short Script 14 – Identificando o Column Collation – Método 3 —
Select * from Information_schema.columns
Where Table_Name = ‘Produtos’
Go

Muito bem, missão mais que cumprida! Uma nova 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, 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 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:

https://pedrogalvaojunior.wordpress.com/2018/05/10/short-scripts-maio-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/19/short-scripts-fevereiro-2018-transaction-log/

https://pedrogalvaojunior.wordpress.com/2017/12/09/short-scripts-dezembro-2017/

https://pedrogalvaojunior.wordpress.com/2017/09/16/short-scripts-setembro-2017/

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença ao meu blog, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no post do mês de novembro de 2018.

Abraços…

#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 trabalho 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 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 futuro 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.

Microsoft SQL Server Management Studio 17.8 liberado


Em anuncio oficial, A Microsoft apresentou em seu blog a nova versão do Microsoft SQL Server Management Studio 17.8, conhecida por muitos profissionais de tecnologia pela sigla SSMS.

O SSMS combina um amplo grupo de ferramentas gráficas com vários editores de script avançados para fornecer acesso para desenvolvedores e administradores de todos os níveis de conhecimento ao SQL Server, além disso, através desta ferramenta você vai encontrar um ambiente totalmente integrado com os mais diversos serviços e recursos existentes no Microsoft SQL Server.

Vale ressaltar que desde a versão 2016 do Microsoft SQL Server, o time de engenheiros e desenvolvedores da Microsoft, decidiram superar a dependência do Management Studio da versão do SQL Server, sendo assim, deste então independente da versão do Microsoft SQL Server instalado é possível utilizar e instalar versões superiores ou não do Management Studio, tornando-se então um novo produto independente do SQL Server.

A partir da versão 17, o Microsoft SQL Server Management Studio apresenta um novo ícone que faz referência a esta ferramenta substituindo justamente o ícone utilizado pelas versões anteriores do Management Studio específicos de cada versão do Microsoft SQL Server.

A Figura 1 abaixo apresenta este novo ícone:

Figura 1 – Novo ícone utilizado pelo Microsoft SQL Server Management Studio a partir da versão 17.

Para realizar download do Microsoft SQL Server Management Studio 17.8, utilize um dos links apresentados abaixo:

Download SQL Server Management Studio 17.8

Download SQL Server Management Studio 17.8 Upgrade Package (upgrades 17.x to 17.8)

Após a instalação desta nova versão o Microsoft SQL Server Management Studio terá sua número de versão evoluído para: 17.8 e seu release build para: 14.0.17276.0. Dentre os bugs e melhorias implementadas nesta nova versão a Microsoft destaca correções específicas para editor de querys, nova interface para scripts e suporte a propriedade AUTOGROW_ALL_FILES, entre outras inovações.

Caso queira saber mais sobre esta versão, sua lista de correções e melhorias, acesse: https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

Esta nova versão do SSMS 17.8 esta disponível para as versões do Mirosoft SQL Server versão 2008 até 2017, é compatível com as versões 64 bits do Windows 7, Windows 8/8.1, Windows 10, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 e Windows Server 2016 e também suporta o SQL Analysis Service PaaS.

Fontes e Direitos Autorais: Microsoft – Docs SQL Tools SQL Server Management Studio (SSMS) – 21/06/2018.

Microsoft SQL Server 2016 SP2 – Atualização Cumulativa 1 disponível


A Microsoft disponibilizou para download hoje dia 30/05/2018 a Atualização Cumulativa 1 para SQL Server 2016 SP2.

As informações obtidas através do artigo KB4135048 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 SP2, sendo esta a primeira atualização cumulativa para este service pack.

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


Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
11983391 4131193 Problemas de desempenho ocorrem sob a forma de PAGELATCH_EX e PAGELATCH_SH espera em TempDB quando você usar o SQL Server 2016 Serviço do SQL
11983323 4133164 CORREÇÃO: Erro quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados Ferramentas de gerenciamento
11516235 4087406 CORREÇÃO: Erro 9002 quando não houver nenhum espaço em disco suficiente para crescimento de crítica de log no SQL Server 2014, 2016 e 2017 Serviço do SQL
11695337 4092554 CORREÇÃO: “não é possível usar salvar transação dentro de uma transação distribuída” erro quando você executar um procedimento armazenado no SQL Server Serviço do SQL
11983395 4086173 CORREÇÃO: Violação de acesso ocorre ao executar uma consulta DAX em um modelo tabular no SQL Server Analysis Services Serviços de análise
11983390 4099472 PFS página melhoria de algoritmo round robin no SQL Server 2016 Serviço do SQL
11983376 3028216 CORREÇÃO: Ocorre uma falha quando o cache pró-ativo é desencadeada por uma dimensão no SSAS Serviços de análise
11971819 4230516 CORREÇÃO: Uma falha de asserção de memória ocorre e o servidor é incapaz de fazer qualquer novas conexões no SQL Server Serviço do SQL
11684529 4164562 CORREÇÃO: Nome de usuário errado aparece quando dois usuários acesse a MDS em momentos diferentes no SQL Server Serviços de qualidade de dados (DQS)
11578522 4089718 Melhoria: Problema de desempenho ao atualizar o MDS do SQL Server 2012 para 2016 Serviços de qualidade de dados (DQS)
11983367 4134541 CORREÇÃO: Erro do MDS Add-in para o Excel quando você usar a versão alemã do Excel no SQL Server Serviços de qualidade de dados (DQS)
11983360 4094858 CORREÇÃO: “ocorreu um erro inesperado” quando você usa o DAX medidas em visualizações de mesa poder BI no SQL Server Serviços de análise
11983362 4094706 FIX: Um thread de trabalho parece ficar depois que outro thread de trabalho é abortado quando você executa uma consulta paralela no SQL Server Serviço do SQL
11983392 4101502 CORREÇÃO: Backup de banco de dados habilitada a TDE com a compactação causa corrupção de banco de dados no SQL Server 2016 Serviço do SQL
11983382 4230306 CORREÇÃO: Restauração de um backup compactado TDE é vencida quando usando o cliente VDI Serviço do SQL
11983383 4163087 CORREÇÃO: Desempenho é lento para um sempre na AG quando você processa uma leitura consulta no SQL Server Serviço do SQL
11983373 4162814 CORREÇÃO: Ocorre uma violação de acesso de exceção interna e o servidor SSAS para de responder Serviços de análise
11922532 4157948 CORREÇÃO: Erro de estouro de ponto flutuante ocorre quando você executar um módulo compilado nativamente aninhado que usa EXP funções no SQL Server Na memória OLTP
11983358 4094893 CORREÇÃO: Banco de dados não pode ser descartado após seu armazenamento é desconectado e reconectado no SQL Server Serviço do SQL
11983381 4058175 CORREÇÃO: Backup banco de dados habilitado para TDE e as operações de restauração são lentas quando a chave de criptografia é armazenada em um provedor de EKM no SQL Server Segurança do SQL
11983369 4134175 FIX: Um cubo com várias partições de processamento gera muitas conexões de fonte de dados simultâneos no SSAS Serviços de análise
11983357 4091245 CORREÇÃO: Violação de acesso ocorre quando você consulta uma tabela com uma coluna de inteiro em 2017 de SQL Server e SQL Server 2016 Desempenho de SQL
11983366 4101554 CORREÇÃO: Paralelo refazer em uma réplica do secundária de um grupo de disponibilidade que contém tabelas heap gera um despejo de declaração de tempo de execução ou o servidor de SQL falha com um erro de violação de acesso Alta disponibilidade
11983379 4131960 CORREÇÃO: Um erro de declaração ocorre quando você executar uma consulta select aninhada contra um índice de columnstore no SQL Server Desempenho de SQL
11983359 4132267 CORREÇÃO: Implantar um projeto SSAS em SSDT é frequentemente mal sucedido no SQL Server Analysis Services no modo Tabular Serviços de análise
11057341 4052135 CORREÇÃO: Instrução RESTORE HEADERONLY para um TDE compactado backup leva muito tempo para concluir no SQL Server Serviço do SQL
11750742 4098762 CORREÇÃO: Parâmetros ocultos são incluídos nos relatórios quando o papel do navegador é usado em 2016 SSRS O Reporting Services
11983394 4163478 CORREÇÃO: Uma violação de acesso ocorre quando incrementais estatísticas são atualizadas automaticamente em uma tabela no SQL Server Desempenho de SQL

Dentre os mais diversos bugs identificados e corrigidos destaco um relacionado ao bug de número: 11983332, artigo KB: 4133164, relacionada a um erro apresentado quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados.

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

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Suporte da Microsoft -https://support.microsoft.com/pt-br/help/4135048/cumulative-update-1-for-sql-server-2016-sp2 – 30/05/2018.

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


A Microsoft disponibilizou para download hoje dia 30/05/2018 a Atualização Cumulativa 9 para SQL Server 2016 SP1.

As informações obtidas através do artigo KB4100997 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 CU8
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 de bug do VSTS Número de artigo do KB Descrição Corrigir a área
11814294 4099472 PFS página melhoria de algoritmo round robin no SQL Server 2016 Serviço do SQL
11231756 4133164 CORREÇÃO: Erro quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados Ferramentas de gerenciamento
11701139 4086173 CORREÇÃO: Violação de acesso ocorre ao executar uma consulta DAX em um modelo tabular no SQL Server Analysis Services Serviços de análise
11814333 4131193 Problemas de desempenho ocorrem sob a forma de PAGELATCH_EX e PAGELATCH_SH espera em TempDB quando você usar o SQL Server 2016 Serviço do SQL
11829791 3028216 CORREÇÃO: Ocorre uma falha quando o cache pró-ativo é desencadeada por uma dimensão no SSAS Serviços de análise
11829056 4135113 CORREÇÃO: Registro de controle de alterações é inconsistente durante uma atualização em uma tabela que tem um índice cluster/exclusivo no SQL Server Serviço do SQL
11918578 4293839 CORREÇÃO: Banco de dados TDE fica offline durante operações de descarga de log quando problemas de conectividade com o provedor EKM tornar-se inacessível no SQL Server Segurança do SQL
11810404 4230730 CORREÇÃO: Uma condição de morto trava ocorre quando você executar uma reconstrução de índice online ou executa um comando de mesclagem no SQL Server Serviço do SQL
11793118 4163478 CORREÇÃO: Uma violação de acesso ocorre quando incrementais estatísticas são atualizadas automaticamente em uma tabela no SQL Server Desempenho de SQL
11923632 4230306 CORREÇÃO: Restauração de um backup compactado TDE é vencida quando usando o cliente VDI Serviço do SQL
11924460 4163087 CORREÇÃO: Desempenho é lento para um sempre na AG quando você processa uma leitura consulta no SQL Server Serviço do SQL
11684528 4164562 CORREÇÃO: Nome de usuário errado aparece quando dois usuários acesse a MDS em momentos diferentes no SQL Server Serviços de qualidade de dados (DQS)
11634113 4094893 CORREÇÃO: Banco de dados não pode ser descartado após seu armazenamento é desconectado e reconectado no SQL Server Serviço do SQL
11708639 4162814 CORREÇÃO: Ocorre uma violação de acesso de exceção interna e o servidor SSAS para de responder Serviços de análise
11801446 4134541 CORREÇÃO: Erro do MDS Add-in para o Excel quando você usar a versão alemã do Excel no SQL Server Serviços de qualidade de dados (DQS)
11637501 4132267 CORREÇÃO: Implantar um projeto SSAS em SSDT é frequentemente mal sucedido no SQL Server Analysis Services no modo Tabular Serviços de análise
11797887 4101554 CORREÇÃO: Paralelo refazer em uma réplica do secundária de um grupo de disponibilidade que contém tabelas heap gera um despejo de declaração de tempo de execução ou o servidor de SQL falha com um erro de violação de acesso Alta disponibilidade
11750742 4098762 CORREÇÃO: Parâmetros ocultos são incluídos nos relatórios quando o papel do navegador é usado em 2016 SSRS O Reporting Services
11830380 4134175 FIX: Um cubo com várias partições de processamento gera muitas conexões de fonte de dados simultâneos no SSAS Serviços de análise
11591371 4091245 CORREÇÃO: Violação de acesso ocorre quando você consulta uma tabela com uma coluna de inteiro em 2017 de SQL Server e SQL Server 2016 Desempenho de SQL
11714686 4094706 FIX: Um thread de trabalho parece ficar depois que outro thread de trabalho é abortado quando você executa uma consulta paralela no SQL Server Serviço do SQL
11953725 4058175 CORREÇÃO: Backup banco de dados habilitado para TDE e as operações de restauração são lentas quando a chave de criptografia é armazenada em um provedor de EKM no SQL Server Serviço do SQL
11833599 4131960 CORREÇÃO: Uma violação de acesso ocorre quando você executar uma consulta select aninhada contra um índice de columnstore no SQL Server Mecanismo do SQL
11676935 4094858 CORREÇÃO: “ocorreu um erro inesperado” quando você usa o DAX medidas em visualizações de mesa poder BI no SQL Server Serviços de análise
11791348 4101502 CORREÇÃO: Backup de banco de dados habilitada a TDE com a compactação causa corrupção de banco de dados no SQL Server 2016 Serviço do SQL

Dentre os mais diversos bugs identificados e corrigidos destaco um relacionado ao bug de número: 11923632, artigo KB: 4230306, que corresponde um erro apresentado durante a restauração de um backup de banco de dados compactado que utiliza criptografia transparente de dados TDE.

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.4502.0.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Suporte da Microsoft – https://support.microsoft.com/pt-br/help/4100997/cumulative-update-9-for-sql-server-2016-sp1 – 30/05/2018.

Dica do Mês – SQL Operations Studio – View as Chart


Olá, amantes de banco de dados e profissionais de tecnologia.

Bom dia, bom dia, bom dia….. Tudo bem? Que bom te encontrar por aqui mais uma vez, seja bem, volte sempre. Este é mais um post da sessão Dica do Mês, sessão dedicada a compartilhar bimestralmente dicas, novidades, curiosidades e demais informações relacionadas ao Microsoft SQL Server, Banco de Dados e Tecnologias de Banco de Dados.

No post de hoje, quero dividir com você um recurso que conheci recentemente adicionado ao novo SQL Operations Studio, ferramenta que a Microsoft esta trabalhando a todo vapor para se tornar muito em breve um produto confiável, prático e robusto, da mesma maneira que aconteceu com o Management Studio (“isso já faz um tempinho, lá em 2005”), e principalmente multiplataforma(um produto interoperável).

Se por acaso você ainda não conhece esta nova ferramenta da Microsoft, fique calmo, seu primeiro preview foi lançado no final de 2017, e caso você queria conhecer um pouco mais sobre este novo produto, acesse: https://docs.microsoft.com/pt-br/sql/sql-operations-studio/what-is?view=sql-server-2017.

 

Falando um pouco mais sobre o post de hoje, normalmente quando executamos uma query no Microsoft SQL Server Management Studio, temos a possibilidade de apresentar o retorno de dados em tela no formato de tabela, texto ou se quisermos salvar em um arquivo texto, agora no SQL Operations Studio, temos algumas outras formas de apresentar ou salvar nosso retorno de dados, dentre elas a que eu mais gostei e acredito que você também vai gostar é conhecida como View as Chart (Visualizar como gráfico).

Como assim visualizar como gráfico? É isso mesmo, que você esta pensando, visualizar o resultado da sua query em alguns modelos predefinidos de gráfico em tempo real. Olha que fiquei de queijo caído com este recurso.

E ai, esta curioso em saber um pouco mais sobre esta nova forma de apresentar seus dados? Eu estou, e não vejo a hora de poder dividir com você um pouco deste recurso.

Então, vamos em frente, vou tentar mitigar a sua curiosidade e ao mesmo também satisfazer os meus objetivos. Sendo assim, seja bem vindo ao post – Dica do Mês – SQL Operations Studio – View as Chart.

Tenho a certeza visualizar seus dados em forma de gráfico, vai lhe ajudar muito nos momentos de análise e tomada de decisão.


Introdução

Lançado em novembro de 2017, o SQL Operations Studio, possui algumas missões um pouco indigestas (na minha opinião), mas que podem ser alcançadas, dentre elas:

  1. Se tornar um produto conhecido;
  2. Ser reconhecido como um produto independente e multiplataforma;
  3. Ser utilizado com uma ferramenta de apoio ao atual Management Studio;
  4. Não ser rotulado ou visto como o substituto do Management Studio para Windows; e
  5. Ser utilizado em ambientes Linux e Mac.

Mesmo com esta pequena relação de missões a serem cumprida, a Microsoft esta trabalhando de forma árdua a realmente lançar uma versão final do produto o mais breve possível (eu mesmo esperei um pouco mais para instalar o produto na minha máquina).

Mas, vamos em frente, dentro as novidades e melhorias adicionadas na última preview lançada do SQL Operations Studio (em 28/03/2018), aquela que mais me chamou a atenção, foi justamente a introdução do botão View as Chart, sendo este visível logo após o processamento e apresentação do resultado de um query.

Se você já estou utilizando este produto, talvez não tenha ainda percebido a presença deste ou outros botões que surgem em nossa tela ao lado da result as table que exibe as linhas de dados processadas, pois bem, a Figura 1 abaixo ilustra este e os demais botões:

Figura 1 – Apresentação dos botões View as Chart na guia de resultados exibida pelo SQL Operations Studio.

Agora eu acredito que você vai conseguir encontrar mais facilmente estes botões logo após processar suas querys no SQL Operations Studio.

Vamos avançar mais um pouco…..

View as Chart

Ao imaginar a possibilidade de apresentar nosso retorno de dados em tela, tendo como base, formatos predefinidos de gráficos é algo que nos permite estabelecer uma série de palavras do momento, dentre elas: Análise de Dados, Tomada de Decisão, Modelagem de Negócios, Mineração de Dados, Business Intelligence, enfim… possibilidade de tentar rotular um resultado apresentado como um gráfico, os fascinados por administração e gestão vão adorar. Sinceramente falando, não vejo que este recurso possa ser rotulado para todas as possíveis áreas, mas em especial uma dentre as mais diversas podemos, sendo ela: Análise de Dados.

Apresentar um conjunto de dados no formato de gráfico, com certeza é algo visualmente falando mais atrativo, bonito e didático do que simplesmente apresentar um monto de valores em uma tabela com colunas que muitas vezes não conseguir expressar ou transmitir seu significado.

Analisar um ou mais dados, é uma atividade diferencial para qualquer profissional da área de tecnologia, principalmente aqueles que possuem a ingrata missão de tentar através do números, símbolos e indicadores orientar seus clientes, empresas e parceiros em momento chaves para tomada de decisão, por outro lado ter a possibilidade de simular situações com base no processamento em tempo real de dados coletados ao longo de tempo e ver o que pode acontecer caso algo venha e mudar pode sim ser um grande “pulo do gato”.

Ao meu ver é justamente isso que podemos tentar adjetivar este recurso adicionado ao SQL Operations Studio, a capacidade de proporcionar um análise de dados para os profissionais de tecnologia, dentre eles: Desenvolvedores, Programadores e Administradores de Bancos de dados, que podem em tempo real realizar possíveis simulações e testes com seus dados nem necessitar utilizar ferramentas específicas para esta atividade.

Vamos em frente que atrás vem o DBA correndo (kkkkk)…..

Exibindo um Chart

Para que possamos realizar nossas práticas, vou utilizar o mesmo ambiente que venho trabalhando nos meus últimos post, mais especificamente o banco de dados utilizado no jogo de videogame Fifa 2018 recentemente compartilhado no meu blog.

Pois bem, caso você não deseje fazer o download do banco de dados, nas práticas que vamos realizar neste post, estou compartilhando um arquivo no formato JSON que justamente apresenta a massa de dados específica que iremos utilizar, além disso, o arquivo já esta pronto para você realizar o processo de importação caso esteja utilizando o Microsoft SQL Server 2016 ou superior. Faça o download do arquivo JSON clicando aqui.

Importante: Vale ressaltar que por questões de segurança a plataforma WordPress.com não permite upload de arquivo com extensão .json, sendo assim, foi adicionado ao final do arquivo a extensão .doc, após realizar o download basta remover esta extensão o final do nome do arquivo mantendo a extensão .json.

Caminhando mais um pouquinho….

Vou deduzir que você conseguiu realizar o download do arquivo, em seguida acessou seu Microsoft SQL Server 2016 ou 2017 e importou este conjunto de dados para dentro de um específico banco de dados, show de bola, sucesso, vamos em frente.

Agora com este dados disponíveis para serem acessados, podemos fazer uso do recurso View as Chart, para isso acesse o SQL Operations Studio, conecte-se em seu banco de dados, abra uma nova query e execute o Bloco de Código 1 apresentado abaixo, sendo esta a query base que utilizaremos para proporcionar a criação e execução de nossos gráficos:

— Bloco de Código 1 —

Select Top (50) Name,
Age,
Nationality,
Overall,
Potential
From PlayerPersonalData
Order By Overall Desc, Potential DESC
Go

Observe a simplicidade da query que utilizaremos, não se espante é isso mesmo, algo bastante simples para trabalhar com 50 linhas de registros armazenadas em um tabela denominada PlayerPersonalData.

Logo após a execução do Bloco de Código 1 apresentando anteriormente, o SQL Operations Studio deve ter retornado na sua tela um conjunto de dados similar ao apresentado na Figura 2 a seguir:

Figura 2 – Relação de dados apresentados após o processamento do Bloco de Código 1.

Muito bem, observe com atenção a Figura 2, veja que os botões apresentados na respectiva ordem:

  • Save as CSV;
  • Save as JSON(o arquivo json aqui compartilhado, foi criado através deste botão);
  • Save as Excel; e
  • View as Chart, foram habilitados e encontram-se disponíveis para uso, sendo o último botão o qual iremos utilizar para gerar nossos gráficos, sendo assim, clique nele.

Após clicar no botão View as Chart, automaticamente o SQL Operations Studio apresenta um primeiro modelo de gráfico em barras horizontais(HorizontalBar), conforme apresenta a Figura 3 a seguir:

Figura 3 – Gráfico padrão criado no modelo predefinido HorizontalBar.

Como eu havia destacado no início deste post, o SQL Operations Studio através do recurso View as Chart, apresenta um conjunto de gráficos predefinidos que podem ser aplicados ou não dependendo do tipo de retorno de dados apresentado por cada query, a Figura 4 apresentado a seguir, ilustra o conjunto de modelo de gráficos predefinidos independente do conjunto de dados processados pelo Bloco de Código 1:

Figura 4 – Relação de modelos predefinidos existentes no recurso View as Chart.

Legal, temos nossa massa de dados, já sabemos a relação de possíveis modelos de gráficos, o próximo passo é começar a brincar com este recurso em conjunto com suas querys criando novos gráficos, como forma de demonstração de algumas possibilidades, apresento abaixo algumas figuras que ilustram as diversidades de retornos de dados através do recurso View as Chart.

Exemplos de Gráficos

A seguir apresento em sua respectiva ordem as Figuras 5, 6, 7 e 8, que ilustram os modelos de gráficos: Line, Bar e PIE, note que todos os gráficos apresentam uma legenda, como também, podem ser exibidos na posição horizontal e vertical, e ao passar com o mouse em cima da área do gráfico, um hint é apresentado destacando a área e seus respectivos dados:

Figura 5 – Modelo de Gráfico Line.

Figura 6 – Modelo de Gráfico Bar.

Observação: Após exibir um gráfico em tela o SQL Operations Studio, nos permite salvar (Save as image) ou copiar (Copy as image), botões os quais estão disponíveis na barra de ferramentas apresentada em conjunto com nosso gráfico, bem acima da área de gráfico.

Por padrão ao salvar um gráfico como imagem será criado um novo arquivo formato de imagem no padrão .png (Portable Network Graphics, também conhecido como PNG’s Not GIF).

Figura 7 – Modelo de Gráfico Line – Dados analisados no formato de números e distribuídos na posição vertical.

Figura 8 – Modelo de Gráfico PIE – Dados distribuídos na posição vertical.

Ufa, chegamos ao final, sãos e salvos e como de costume com mais uma gama de conhecimento adquirido a partir deste momento. E ai ficou de queijo caiu com este recurso da mesma maneira que eu fiquei quando por acaso o descobrir? Acho que sim, não é verdade.

Então, mas não é somente a possibilidade de gerar gráficos que o View as Chart nos permite, ele também tem um outro botãozinho mágico que fica escondido chamado Create Insight, mas este botão eu vou deixar para que você descubra como fazer uso dele e quais os benefícios ele pode te trazer.

Com isso chegamos ao final de mais um post da sessão Dica do Mês, antes de encerrarmos, gostaria de contar com a sua participação neste post, respondendo a enquete abaixo:


Referências

https://docs.microsoft.com/pt-br/sql/sql-operations-studio/release-notes?view=sql-server-2017

https://docs.microsoft.com/pt-br/sql/sql-operations-studio/insight-widgets?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/sql-operations-studio/tutorial-build-custom-insight-sql-server?view=sql-server-2017&viewFallbackFrom=ssdt-18vs2017

Posts Anteriores

https://pedrogalvaojunior.wordpress.com/2018/03/14/dica-do-mes-microsoft-sql-server-2017-sql-graph-databases/

https://pedrogalvaojunior.wordpress.com/2018/01/24/dicadomes-sqlservertoolsuiteintroduction/

https://pedrogalvaojunior.wordpress.com/2017/11/01/dicadomessql2017novascolunasinternas/

https://pedrogalvaojunior.wordpress.com/2017/08/26/dica-do-mes-simulando-a-insercao-de-uma-massa-de-dados-aleatoria/

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

Conclusão

Como de costume a cada novo produto, versão, service pack ou atualizações que a Microsoft e seu time de engenheiros especialista do SQL Server disponibiliza, novos e novos elementos são implementados ao vasto conjunto de possibilidades que o Microsoft SQL Server nos oferecer.

O SQL Operations Studio é justamente um destes elementos que vem aos poucos adquirindo seu espaços, se tornando componente importante para os desenvolvedores, programadores, analistas e administradores no que se relaciona as tarefas ou atividades oriundas de um ambiente de banco de dados.

A partir da nova versão do SQL Operations Studio, temos um grande recurso que nos permite utilizar modelos de gráficos predefinidos como fonte de análise dos dados os quais foram processados e apresentados em nossa tela, através do View as Chart, a Microsoft trouxe um pequeno ambiente que nos permite analisar, validar e tomar possíveis decisões de acordo com as simulações de dados processadas em real time em nossas querys.

Agradecimentos

Agradeço a você por sua atenção e visita ao meu blog. Fique a vontade para enviar suas críticas, sugestões, observações e comentários.

Um forte abraço, nos encontramos no próximo post da sessão Dica do Mês a ser publicado no mês de junho.

Salve o SQL Operations Studio, estamos todos ansiosos te esperando…

#20 – Para que serve


Olá pessoal, bom dia(ou talvez boa madrugada).

Não se espante com o horário, mas neste exato momento são 02:06(duas horas e seis minutos da manhã) quinta – feira dia 12/04, ou seja, um novo dia esta começando.

É a vida de um DBA e MVP não é fácil, sei que nesta quinta terei um dia repleto de afazeres, por este e outros motivos estou aqui no meu blog para compartilhar com vocês um dos novos recursos adicionados ao Microsoft SQL Server nos últimos meses.

Logicamente a cada nova versão que a Microsoft disponibilizado do SQL Server, uma nova avalanche de conceitos, funcionalidades, comandos e diversidade de possibilidades são adicionadas ao produto, mas no post de hoje, não vou apresentar propriamente uma nova funcionalidade deste fascinante Sistema Gerenciador de Banco de Dados, ao contrário, vou destacar uma nova ferramenta adicionado ao Microsoft SQL Management Studio a partir da versão 17.5 lançada no mês de fevereiro de 2018, conhecida como Descoberta e Classificação de Dados ou Data Discovery and Classification disponível para uso a partir da versão 2008.

Talvez você já deve ter ouvido falar de algo relacionado com proteção de informações organizacionais, ou quem sabe a sigla GDPR (General Data Protection Regulation)? Falando de formas gerais, trata-se de uma regulamentação geral de proteção de dados, criada inicialmente a partir de 2016, como uma possível normatização de padrões para proteção de dados organizacionais, respeitando regulamentações mundiais.

Caso ainda não tenha conhecimento ou obtida alguma informação sobre este assunto, recomendo acessar: https://www.gdpr.associates/what-is-gdpr/

Continuando, não vou me aprofundar no conceito, normas e padrões estabelecidos pelo GDPR, mas sim quero compartilhar com vocês esta recurso existente no Management Studio, que pode justamente ser muito útil para possibilitar uma melhor organização dos seus dados, como também, estabelecer uma nova maneira de categorizar os mesmo.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 20 da sessão Para que serve. Então seja bem vindo ao #20 – Para que serve – Descoberta e Classificação de Dados.


Introdução

Adicionado a partir da versão 17.5 do Management Studio, o recurso Data Discovery and Classification se estabelece com uma nova ferramenta existente internamente no produto, com objetivo de nos permitir discovering (descobrir), classifying (classificar), labeling (rotular) e reporting (relatar) os dados confidenciais em seus bancos de dados.

No qual esta capacidade de descoberta e  classificação dos chamados dados confidenciais, sejam eles relacionados as áreas de negócios, financeiros, de serviços de saúde, marketing ou produção, podem desempenhar um papel fundamental na dimensão da proteção de informações organizacionais. A adoção desta nova funcionalidade implementada no Microsoft SQL Management Studio possível de ser utilizada a partir da versão 2008 e disponível até as atuais versão, nos possibilidade adotar:

  • Padrões de privacidade de dados e aos requisitos de conformidade regulamentar, como o GDPR; e
  • Controlar o acesso, fortalecendo a segurança de bancos de dados/colunas que contêm dados altamente confidenciais.

Data Discovery and Classification apresenta um conjunto de funcionalidades internas, que representam uma coleção de parametrizações para identificação e categorização de dados, que estabelecem uma camada de proteção de informações aplicadas de forma direta e transparente em nossos bancos de dados armazenados diretamente no Microsoft SQL Server, possibilitando e objetivando a proteção dos dados, não apenas do banco de dados, como também para os seguintes elementos:

  • Discovery & recommendations (Descobertas e Recomendações) – Através do mecanismo de classificação, é realizada uma verificação no banco de dados, permitindo identificar as possíveis colunas que contenham dados elegíveis a serem considerados confidenciais.
  • Labeling (Rótulos e Identificações) – Basicamente reconhecida como uma etiqueta ou rótulo de classificação de confidencialidade que estabelecem marcas de persistência em colunas, característica que nos ajuda e diferenciar estes dados de um outro dado “considerado comum”; e
  • Visibility (Visibilidade) – Estado de classificação do banco de dados que permite ser exibido em um relatório detalhado que pode ser impresso/exportado para ser usado para fins de auditoria e conformidade, bem como para outras necessidades.

Acredito que até aqui esteja tudo tranquilo, espero que você possa estar entendendo os conceitos, para que possamos evoluir a partir de agora na prática, que também será bastante simples de ser utilizada.

Como descobrir, classificar e rotular colunas confidenciais

Vamos então conhecer de forma prática como podemos estabelecer esta forma de classificação e rotulação dos nossos dados, no qual utilizaremos o Microsoft SQL Server Management Studio, tendo como base um banco de dados muito propicio para o ano de 2018.

Pois bem, em nossa prática vamos utilizar um banco de dados denominado Fifa2018 que possui todos os dados existentes no game Fifa 2018 produzido pela EASports, jogado mundialmente nos principais consoles de videogame. Caso você queria fazer o download deste banco de dados disponível para o SQL Server 2016 ou 2017, utilize este link Fifa2018.bak (por questões de compatibilidade com a plataforma wordpress, o arquivo de backup foi renomeado, tendo em seu nome o acréscimo da extensão .doc, sendo assim, basta após realizar o download remover a respectiva extensão).

Mas antes de realizarmos a classificação de forma prática, vale ressaltar que existem dois elementos muito importantes a serem entendidos, denominados:

  1. Labels (Rótulos) – os atributos de classificação principais, são usados para definir o nível de confidencialidade dos dados armazenados na coluna; e
  2. Information Types (Tipos de informações) – Nos fornecem uma granularidade adicional para o tipo dos dados armazenados na coluna, elemento que nos permite identificar de uma maneira mais especifica cada dado contido em sua respectiva coluna.

Passo 1

Dando continuidade, seguimos em frente, agora realizando de maneira prática os processos de descoberta, classificação e rótulo dos nossos dados, posteriormente vamos gerar um relatório que nos permitirá entender de forma gráfica as categorizações atribuídas para nossos respectivos dados, para tal recomendo que você acesso seu Management Studio e conecte em sua instância, procedimento o qual eu já realizei, conforme a Figura 1 abaixo apresenta:

Figura 1 – Instância local do Microsoft SQL Server 2017 conectada.

Passo 2

Nosso próximo passo será selecionar banco de dados Fifa2018, clicando com o botão da direita, posteriormente na opção Task e por último na opção Classify Data conforme ilustra a Figura 2 a seguir:

Figura 2 – Acessando a ferramenta Classify Data existente no Management Studio.

Passo 3

Ótimo, a partir deste momento, o Management Studio acaba de abrir a ferramenta Classify Data, que nos permite realizar os procedimentos de descoberta, classificação e identificação do dados existentes nas tabelas que compõem do banco de dados Fifa2018, conforme apresenta a Figura 3 abaixo:

Figura 3 – Data Classification disponível para classificação dos dados.

Analisando a Figura 3 apresentada acima, podemos observar que em sua barra de status é exibida uma mensagem informando que existem 5 colunas neste base dados que possivelmente podem ser reconhecidas como colunas de dados confidencias.

Você pode estar se perguntando como esta ferramenta realiza este tipo de análise, a resposta é bem simples, neste caso, a análise foi realizada tendo com base as simulações que eu executei justamente para poder escrever este post, por padrão ao ser inicializada pela primeira em um determinado banco de dados a Classify Data não possui informações suficientes para descobrir estas possíveis colunas.

Passo 4

Legal, o próximo passo será muito simples e tranquilo, para poder realizar a classificação dos dados, vamos clicar no botão Add Classification, existente barra de ferramentas.

Ao clicar no botão Add Classification, será apresentada uma nova ribbon chamada Data Classification ao lado direita da sua tela, a qual permitirá que você realiza das respectivas categorizações dos seus dados, de acordo com a tabela, coluna, tipo da informação e rótulo de importância ou sensibilidade do dado (Sensitivity Label), conforme apresenta a Figura 4:

Figura 4 – Barra de Ferramenta – Botão Add Classification e Ribbon – Data Classification.

De posse desta ribbon, você poderá criar suas respectivas classificações de dados, para tentar de ajudar e padronizar nossa prática, a Figura 5 a seguir ilustra o conjunto de classificação dos dados que eu realizei que podem servir como base para que você estabeleça em seu ambiente as respectivas classificações:

Figura 5 – Data Classification realizada.

Importante: Analisando a Figura 5, podemos notar a utilização de cinco colunas diferentes em nossa prática, todas existentes na tabela PlayerAllData, além disso, a coluna Sensitivity Label apresenta rótulos de sensibilidade diferentes para cada coluna, o que nos permite justamente identificar a existência de diversos rótulos, sendo este, um elemento importante para vai nos permitir ou não mostrar este dado em determinados procedimentos aos quais nosso banco de dados venha a ser envolvido.

Passo 5

Muito bem, você conseguiu, agora vamos avançar mais um pouco, já estamos quase no final, nosso próximo e extremamente importante passo consiste em salvar este conjunto de classificação de dados realizado anteriormente, para isso, nada mais claro e óbvio que clicar no botão Save “salvar” existente na barra de ferramentas da Classify Data, sendo assim, mãos no mouse e clique no botão Save.

Após realizar o procedimento de salvar, temos a partir de agora um conjunto de classificação e rotulamento de dados definido em nosso ambiente, o que nos permite realizar análise do nível se importância, confidencialidade e sensibilidade dos dados aqui definidos de acordo com nossas regras de negócio.

Passo 6

Nosso último passo esta relacionado com a capacidade de análise que esta nova ferramenta Classify Data nos permite fazer, tendo a disponibilidade de gerar um relatório contendo as informações referentes ao conjunto de classificação de dados que nós definimos no Passo 4, com isso, possibilitando estabelecer uma possível análise para posterior tomada de decisão no que se relacionada as colunas selecionadas como possíveis dados confidenciais ou dados organizacionais.

Para realizar este passo, vamos clicar no botão View Report (Exibir Relatório), procedimento que realizará o processamento e apresentação do relatório criado pelo Classify Data contendo o conjunto de informações relacionadas a nossa classificação de dados, conforme apresenta a Figura 6 abaixo:

Figura 6 – Data Classification Report – Relatório de Classificação de Dados.

Pronto, ai esta nosso relatório, simples, rápido e prático, nosso conjunto de classificação de dados apresentado, nos permitindo entender de forma gráfica os procedimentos de descoberta, classificação e rotulagem de dados.

Com isso chegamos ao final do post de número 20 da sessão Para que serve. Gostou?

Fale a verdade este post foi fácil, tranquilo? Não é mesmo!


Referências

https://docs.microsoft.com/pt-br/sql/relational-databases/security/sql-data-discovery-and-classification

https://docs.microsoft.com/en-us/sql/relational-databases/security/sql-data-discovery-and-classification

https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine

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/01/02/19-para-que-serve/

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

https://pedrogalvaojunior.wordpress.com/2017/11/24/17-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/10/01/16-para-que-serve/

Conclusão

Estamos vivendo um mundo cada vez mais tecnológico, conectado, rápido, evolutivo e muito agressivo no que se diz respeito ao valor de uma informação para nós usuário e principalmente para empresas.

Atender justamente a este conjunto de exigência diárias, satisfazendo também os órgãos mundiais em suas definições, normas e obrigações acabam exigindo de qualquer empresa um constante acompanhamento e cumprimento de deveres. Desta forma, a Microsoft esta se adequando uma nova realidade e preocupação que cresce a cada dia, como proteger de forma mundial os dados e futuras informações geradas a todo os momentos por cada um dos indivíduos e organizações existentes em nosso planeta, sabendo da importância de se respeitar as leis, normas e padrões organizacionais e governamentais.

Neste post, você conheceu pouco sobre como o Microsoft SQL Server esta preparado para atender estas leis, através da nova ferramenta adicionada internamente no Management Studio, chamada de Data Discovery and Classification, na qual nos permite através do recurso Classify Data estabelecer a classificação dos nossos dados armazenados em cada coluna existente em um banco de dados, e não somente isso, definir o nível de importância deste dado, como também, a sensibilidade do mesmo para ser apresentado ou envolvido em algum tipo de procedimento de acesso ou manipulação, visando garantir e fortalecer que esta dado deve ser tratado de forma diferenciada em comparação com um possível “dado comum”.

Sem dúvida uma grande ferramenta adicionada ao Microsoft SQL Server, que mostra o quanto a Microsoft e seus respectivos times de produto estão envolvidos preocupados em atender e respeitar todas as possíveis leis, normas e regras.

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…..

Boa noite e uma ótima quinta – feira.

Até mais.

 

 

 

Microsoft SQL Server Migration Assistant v7.7 disponível para download


A Microsoft disponibilizou para download no início desta semana o Microsoft SQL Server Migration Assistant v7.7.

Nova versão da ferramenta utilização para migração de dados entre diversas fontes, dentre elas MySQL, SAP Adaptive Server Enterprise (ex-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.7 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, SQL Server 2017 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, SQL Server 2017 e Azure SQL DB.

– Migração do SAP Adaptive Server Enterprise (ex-Sybase) 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, SQL Server 2017 e Azure SQL DB.

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

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

Microsoft SQL Server Migration Assistant v7.7

Download da versão 7.7 para MySQL
Download da versão 7.7 para Access
Download da versão 7.7 para SAP Adaptive Server Enterprise (ex-Sybase)
Download da versão 7.7 para Oracle Database
Download da versão 7.7 para IBM DB2

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

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

Fontes e Direitos Autorais: https://www.microsoft.com/en-us – 27/02/2018.