Dica do Mês – Temporal Table e o Calor, uma combinação muito quente


Salve pessoal, bom dia.

Estamos no mês de janeiro, férias, sol, calor, chuvas, e para minha alegria te encontro mais uma vez no meu blog, caso esta seja a sua primeira visita ou acesso, fico mais feliz ainda, seja muito bem vindo.

Este é mais um post da sessão Dica do Mês, sessão dedicada a compartilhar bimestralmente dicas, novidades, curiosidades e demais assuntos, conteúdos e informações relacionadas ao Microsoft SQL Server, Banco de Dados e Tecnologias de Banco de Dados.

No post de hoje, quero compartilhar com vocês uma das funcionalidades adicionadas ao Microsoft SQL Server a partir da versão 2016 e que recentemente acabei conhecendo com um pouco mais, como você já pode notar no título deste post, estou fazendo referência as chamadas Temporal Tables (Tabelas Temporais).

Você já conhece? Teve a necessidade de utilizar? Eu particularmente falando conhecia muito pouco sobre este recurso, mas na semana passada neste período de férias tive a ideia de fazer uma brincadeira aqui em casa em conjunto com um termômetro, e justamente através desta brincadeira que utilizei uma temporal table.

Ficou curioso para saber como eu fiz uso dela? Calma, daqui a pouco eu conto mais sobre isso para você.

Pois bem, sem mais delongas, 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 – Temporal Table e o Calor, uma combinação muito quente.


Introdução

A partir da versão 2016 do Microsoft SQL Server, a Microsoft introduziu o suporte para tabelas temporais de sistema baseadas no versionamento de dados como um recurso de banco de dados, sendo este,  uma funcionalidade que traz o suporte interno para fornecer informações sobre dados armazenados na tabela em qualquer ponto no tempo, ao invés de apenas os dados que é corretos no momento atual em está na hora.

Esta nova funcionalidade, também é reconhecida e trata como um recurso de banco de dados criado com base nos padrões em ANSI SQL 2011.

A partir do momento em que idealizamos fazer uso de uma tabela temporal, estamos criando um novo objeto ou transformando um objeto já existente em nosso banco de dados, em um elemento responsável em manter o histórico completo das alterações de dados ocorridos durante um período de tempo, sendo esta a principal finalidade de uso de uma temporal que é tratada internamento como um repositório de gerenciamento de tempo.

Cada tabela temporal tem duas colunas explicitamente definidas, cada um com um tipo de dados datetime2 , estas colunas são referidas como colunas de período, sendo período colunas usadas exclusivamente pelo sistema de registro prazo de validade para cada linha, sempre que uma linha for modificada. Além dessas colunas de período, uma tabela temporal também contém uma referência a outra tabela, a qual será utilizada como esquema espelho.

Por padrão o Microsoft SQL Server utiliza esta tabela para armazenar automaticamente a versão anterior de uma linha cada vez que a mesma na tabela temporal é atualizada ou excluída. Esta tabela adicional é referida como a tabela de histórico, enquanto a tabela principal que armazena versões de linha (real) atual é conhecida como a tabela atual ou simplesmente como a tabela temporal.

Importante ressaltar que durante a criação do quadro temporal, os usuários podem especificar a existência de uma tabela de histórico (deve ser esquema compatível) ou deixar o sistema criar tabela de histórico padrão.

Agora que já conhecemos um pouco do que é uma Temporal Table, vamos avançar mais um pouco em nossa caminhada, vou apresentar o porque tive a ideia de fazer uso deste recurso.

 

SEU FUNCIONAMENTO

Como já destacado anteriormente o sistema de controle de versão de uma tabela temporal é implementado através do uso de um par de tabelas, uma tabela atual e uma tabela de histórico. Dentro de cada uma destas tabelas, as seguintes duas colunas adicionais datetime2 são usadas para definir o período de validade para cada linha:

  • Coluna de início de período: O sistema registra a hora de início para a linha nesta coluna, denotado tipicamente como a coluna de SysStartTime .
  • Coluna de fim do período: O sistema registra a hora final para a linha nesta coluna, normalmente indicado na coluna SysEndTime .

A tabela atual contém o valor atual para cada linha. A tabela de histórico contém cada valor anterior para cada linha, se for o caso, e a hora de início e hora de término para o período para o qual foi válido.

A Figura 1 apresentada abaixo, ilustra de forma simples o funcionamento do sistema de controle dos dados aplicado a partir do uso de uma tabela temporal:

Temporal-HowWorks

Figura 1 – Funcionamento do sistema de controle de uma tabela temporal.

Este sistema de controle de versionamento dos dados é realizado sempre as instruções: Insert, Update, Delete ou Merge venham a ser realizadas de forma individual ou simultânea.

 

PORQUE UTILIZAR UMA TEMPORAL TABLE

Uma das coisas que eu aprendi a gostar no decorrer da minha carreira na área de tecnologia é a importância e as possibilidades de mudanças que um mesmo dado pode apresentar no decorrer de um período de tempo, este é um dos meus maiores prazeres entender o quanto aquele dado a uma minuto atrás agora já é outro dado e podem me trazer representar novas informações e conhecimentos.

Desta forma, ao analisarmos uma temporal table podemos também reconhecer ou fazer uso da mesma como uma Slowly Changing Dimension (Dimensão com mudanças lentas ou mudanças lentas em uma dimensão), o que vai nos possibilitar criar uma visão dos nossos dados com base uma período ou determinada data.

Uma outra funcionalidade que pode ser aplicada a uma temporal table se relacionada a controles de auditoria mais propriamente falando de auditoria de dados, normalmente as fontes de dados reais são dinâmicas e se tornam voláteis ao longo do tempo, para uma empresas isso pode influenciar diretamente em suas decisões as quais dependem de percepções que os analistas podem começar a identificar a partir da evolução ou mudanças de dados.

Já sabemos o porque escolhi fazer uso de uma temporal table, agora vou apresentar o cenário que me permitiu aplicar este recurso com base na minha ideia.

 

MINHA IDEIA

Estamos visando uma forte onda de calor em praticamente todo o Brasil, algo que muitos brasileiros adoram eu sinceramente não sou um destes brasileiros, pois eu não suporto estas altas temperaturas.

Para tentar de alguma maneira aprender algo de novo com este calor e tentando se distrair dentro das possibilidades, pensei em ter uma noção do quanto a temperatura aqui na minha casa localizada na cidade de São Roque interior do estado de São Paulo muda no decorrer de um período de tempo, sendo justamente esta a minha ideia de utilizar uma temporal table, talvez esta não tenha sido a melhor ideia ou até mesmo o melhor cenário para uso, mas entendo que pode ser uma possibilidade dentre as mais variadas possíveis.

Seguindo em frente e avançando mais um pouco, chegou a hora de colocar em prática a minha ideia, para isso vamos construir um simples cenário para fazer uso da Temporal Table.

NOSSO AMBIENTE

Como de costume vamos utilizar um ambiente isolado dos demais bancos de dados que você possa conter, desta maneira nosso cenário será constituído dos seguintes elementos:

  • Banco de Dados: DatabaseTemporalTabel;
  • Tabela Atual: TemporalTableTemperatura;
  • Tabela Historico: TemporalTableTemperaturaHistorico;
  • Colunas Temporais: DataHoraInicial e DataHoraFinal; e
  • Period For System formado por: DataHoraInicial e DataHoraFinal.

Criando o ambiente

Através do Bloco de Código 1 apresentado abaixo, vamos realizar a criação dos respectivos elementos destacados anteriormente:

— Bloco de Código 1 —

— Criando o Banco de Dados —
Create Database DatabaseTemporalTable
Go

— Acessando o Banco de Dados —
Use DatabaseTemporalTable
Go

— Criando a Tabela TemporalTableTemperatura —
Create Table TemporalTableTemperatura
(Codigo Int Identity(1,1) Primary Key Clustered,
Local Char(10) Default ‘Minha Casa’,
Cidade Char(9) Default ‘São Roque’,
DataAtual Date Default GetDate(),
HoraAtual Time Default GetDate(),
Temperatura TinyInt,
DataHoraInicial Datetime2 (0) GENERATED ALWAYS AS ROW START,
DataHoraFinal Datetime2 (0) GENERATED ALWAYS AS ROW END,
PERIOD FOR SYSTEM_TIME (DataHoraInicial, DataHoraFinal))
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.TemporalTableTemperaturaHistorico))
Go

A Figura 2 apresentada abaixo, ilustra a estrutura da tabela TemporalTableTemperatura e sua tabela espelho TemporalTableTemperaturaHistorico:

Figura 2 – Tabelas TemporalTableTemperatura e TemporalTableTemperaturaHistorico.

Observações

1 – Para que o Microsoft SQL Server reconheça uma tabela como Temporal Table as colunas temporais devem ser formadas pelo tipo de dados DateTime2 e logo após a declaração do seu tipo de dados informar as instruções:

  • Generated Always as Row Start – Valor gerado sempre no início da linha; e
  • Generated Always as Row End – Valor gerado sempre no final da linha.

2 – O controle do período dos valores é feito através da instrução PERIOD FOR SYSTEM_TIME, declarada obrigatoriamente no final da construção da tabela, formada pelas colunas que recebem os valores DateTime2.

3 – Ao declarar o nome da tabela a ser utilizada para o versionamento dos dados, é obrigatório informar o nome do ower ou schema a qual esta tabela irá pertencer, caso isso não seja feito o Microsoft SQL Server retornará a seguinte mensagem de erro:

Msg 13539, Level 15, State 1, Line 18
Setting SYSTEM_VERSIONING to ON failed because history table ‘TemporalTableTemperaturaHistorico2 is not specified in two-part name format.

4 – Ao informar a tabela que será utilizada para o versionamento dos dados o Database Engine realiza automaticamente a criação desta tabela histórico caso a mesma não exista.

Ótimo estamos no caminho certo, nosso próximo passo será abastecer a tabela TemporalTableTemperatura com dados iniciais e na sequência proporcionar alterações nestes mesmos dados iniciais para que o Database Engine faça uso da nossa Temporal Table registrando na Tabela TemperalTableTemperaturaHistorico todas as manipulações realizadas.

Para isso vamos utilizar o Bloco de Código 2 declarado abaixo:

— Bloco de Código 2 —

— Inserindo Dados na Tabela TemporalTableTemperatura —
Insert Into TemporalTableTemperatura (Temperatura)
Values (25)
Go

— Gerando um Delay de 20 segundos —
WAITFOR DELAY ’00:00:20′
Go

— Atualizando os dados na Tabela TemporalTableTemperatura —
Update TemporalTableTemperatura
Set Temperatura = 26,
HoraAtual = GetDate()
Go

— Gerando um novo Delay de 40 segundos —
WAITFOR DELAY ’00:00:40′
Go

— Atualizando os dados na Tabela TemporalTableTemperatura —
Update TemporalTableTemperatura
Set Temperatura = 27,
HoraAtual = GetDate()
Go

— Gerando um novo Delay de 1 minuto e 20 segundos —
WAITFOR DELAY ’00:01:20′
Go

— Atualizando os dados na Tabela TemporalTableTemperatura —
Update TemporalTableTemperatura
Set Temperatura = 27,
HoraAtual = GetDate()
Go

Até aqui tudo tranquilo, realizamos o processo de inserção de dados iniciais na tabela TemporalTableTemperatura e na sequência através do comando WaitFor forçamos a ocorrência de alguns delays (atrasos) de tempo para simular o aumento da temperatura como se fosse um termômetro realizando uma nova marcação, com isso, já temos neste momento um pequena porção de dados a serem consultados.

Vamos então executar o Bloco de Código 3 a seguir para identificar as possíveis maneiras de se consultar os dados armazenados em nossa temporal table:

— Bloco de Código 3 —

— Consultando dados na Tabela TemporalTableTemperatura —
Select * From TemporalTableTemperatura
Go

Após realizarmos o Select declarado acima teremos um retorno de dados similar ao apresentado na Figura 3 abaixo:
Figura 3 – Posição atual de dados armazenados na tabela TemporalTableTemperatura.

Observe que a coluna Temperatura apresenta o valor 27, número informado no último update realizado, a coluna DataHoraInicial apresentando o valor que representa o início da realização da última manipulação aplicada a tabela, no caso o comando Update e a coluna DataHoraFinal vai apresentar o valor final que representa o encerramento do período de controle de versionamento dos dados com o valor fixo e padrão 9999-12-31 23:59:59.

Pois bem, mas se quisermos então identificar ao longo do tempo todas as manipulação que podem ter ocorrido em nossa tabela temporal? É ai que entra em ação nossa tabela de espelho, nossa tabela TemporalTableTemperaturaHistorico, a qual é responsável em armazenar e controlar todo versionamento e alterações que venham a ser realizadas em nossa Temporal Table.

O próximo passo consiste na execução do Bloco de Código 4, o qual vai nos permitir consumir os dados temporais armazenados em nossa tabela TemporalTableTemperaturaHistorico:

— Bloco de Código 4 —

— Consultando dados Temporais, obtendo todas as manipulações realizadas —
Select * From TemporalTableTemperatura
For System_Time All — Apresenta todas as manipulações realizadas
Go

Figura 4 – Todas as manipulações realizadas na tabela TemporalTableTemperatura armazenadas de forma espealhada na tabela histórico TemporalTableTemperaturaHistorico.

Nota que a coluna DataHoraFinal apresenta na linha 1 o valor fixo e padrão 9999-12-31 23:59:59, mas no decorrer das demais linhas, de acordo com as operações realizadas os valores foram sendo atualizados, como podemos comprovar na linha 7 a qual apresenta o valor 2019-01-22 12:59:42.

Já estamos praticamente no final desta caminhada, nosso últimos passos consistem em realizar outras formas de consultar dados temporais, através das instruções:

  • For System_Time as Of;
  • For System_Time From ” To ”;
  • For System_Time Between ” And ”; e
  • For System_Time Contained In ().

Para realizar estas consultamos, vamos executar o Bloco de Código 5 apresentando abaixo:

— Bloco de Código 5 —

— Conhecendo outras formas de consultar dados temporais —
Select * From TemporalTableTemperatura
For System_Time as Of ‘2019-01-22 12:33:56’
Go

Select * From TemporalTableTemperatura
For System_Time From ‘2019-01-22 12:33:56’ To ‘2019-01-22 12:48:36’
Go

Select * From TemporalTableTemperatura
For System_Time Between ‘2019-01-22 12:48:36’ And ‘2019-01-22 12:58:22’
Order By Temperatura Desc
Go

Select * From TemporalTableTemperatura
For System_Time Contained In (‘2019-01-22 12:33:00′ ,’2019-01-22 12:55:00’)
Go

A Figura 5 a seguir apresentado o resultado tornado após a execução do Bloco de Código 5 declarado acima:Figura 5 – Resultados obtidos após a execução de cada comando select declarado no Bloco de Código 5.

Praticamente términos, mas quero finalizar este post com uma pequena amostra do quanto uma tabela temporal pode ser útil, imagine se excluirmos todos os dados da nossa tabela TemporalTableTemperatura.

O que aconteceria com os dados em nossa tabela espelho:

1 – Os dados seriam excluídos também?

2 – Os dados são mantidos?

3 – A tabela espelho será excluída?

4 – Não podemos remover dados em tabelas que utilizam versionamento de dados?

Bom, vou deixar o Bloco de Código 6 declarado abaixo, mas a respostas para esta pergunta você que vai descobrir e posteriormente publicar seu comentário aqui neste post:

— Bloco de Código 6 —

— Excluíndo os dados cadastrados na Tabela TemporalTableTemperatura —
Delete From TemporalTableTemperatura
Go

— Consultando dados na Tabela TemporalTableTemperaturaHistorico —
Select Local, Cidade, DataAtual, HoraAtual, Temperatura
From TemporalTableTemperaturaHistorico
Go

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/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-2017

https://en.wikipedia.org/wiki/Slowly_changing_dimension

https://docs.microsoft.com/en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table?view=sql-server-2017

https://social.technet.microsoft.com/wiki/pt-br/contents/articles/12580.slowly-changing-dimensions.aspx

https://docs.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/tables/getting-started-with-system-versioned-temporal-tables?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/tables/system-versioned-temporal-tables-with-memory-optimized-tables?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-table-metadata-views-and-functions?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql?view=sql-server-2017

Posts Anteriores

https://pedrogalvaojunior.wordpress.com/2018/10/23/dica-do-mes-comando-restore-database-page-restaurando-paginas-de-dados-de-uma-tabela-no-microsoft-sql-server/

https://pedrogalvaojunior.wordpress.com/2018/07/26/dica-do-mes-ocultando-uma-instancia-em-execucao-do-microsoft-sql-server/

https://pedrogalvaojunior.wordpress.com/2018/04/25/dica-do-mes-sql-operations-studio-view-as-chart/

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/

CONCLUSÃO

Como já destaquei em outros posts, a cada nova versão, atualização e correção a Microsoft transforma o SQL Server em um produto surpreende, ainda mais na sua capacidade e versatilidade de permitir aos profissionais de tecnologia, administradores de bancos de dados, programadores, entre outros, utilizar recursos nativos e também novos como ferramentas que podem nos ajudar a aplicar os mais variados possíveis cenários afim de obter soluções rápidas e práticas para nossas necessidades.

No post de hoje, mais uma vez isto foi constatado, o uso de novos recursos com base em funcionalidades já existentes se tornam ferramentas valiosas e de grande importância, podemos fazer esta relação com as tabelas temporais, funcionalidade que nos possibilita viajar, navegar, caminhar ao longo do tempo analisar e entendendo as mudanças ocorridas em nossos dados.

Desta forma, nos deparamos com uma poderosa ferramenta e sua gama de recursos que nos permitem realizar as mais diversas e variados preposições de análises de dados para identificarmos a melhor forma para se tomar uma decisão.

Este é o fantástico Microsoft SQL Server, produto tão fascinante que a cada dia eu não consigo deixar de querer estudar e conhecer mais ainda.

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.

Nos encontramos no próximo post da sessão Dica do Mês a ser publicado em breve.

Um forte abraço, sucesso, não se esqueça de se manter hidratado, passar bastante protetor solar para se proteger deste forte calor que estamos vivendo.

Até mais.

Anúncios

Você já ouvi falar na sigla AVIAO na área de banco de dados?


Olá pessoal, boa tarde.

Feliz Ano Novo, seja bem vindo ao primeiro post de 2019 do meu blog, que felicidade te encontrar aqui neste comecinho de ano, ainda mais após estes dias de feriados, festas, descansos e mesa farta (Graças a deus).

Pois bem, também estou tentando colocar meus pensamentos em ordem para redigir este post, tarefa bastante complexa de se realizar hoje, mas acredito que conseguirei.

Posso lhe garantir que este é um daqueles posts totalmente fora dos padrões que normalmente eu costumo utilizar nas sessões existentes neste blog, o conteúdo que você terá acesso no decorrer do mesmo, é resultado dos meus 25 (vinte e cinco) anos de carreira na área de tecnologia em abril deste ano, sendo que, deste totalmente de vinte e cinco anos, 19 (dezenove) deles estão totalmente envolvidos e relacionados com a área de banco de dados, tempo suficiente que me permitiu no ano de 2018 (recém encerrado no último dia 31 de dezembro) “criar” minha primeira sigla totalmente voltado para área de banco de dados, denominada AVIAO.

Antes de se aprofundar e conhecer o significado e como esta sigla foi criada, quero destacar o que me fez ter embasamento suficiente para idealização.


Um pouco de história não faz mal para ninguém

Diariamente nos deparamos com diversas situações, acontecimentos, circunstâncias, fatos e momentos que nos permitem ou apresentam um conjunto infinito de números ou até mesmos palavras que precisam demandar um pouco do nosso raciocínio afim de estabelecermos um possível cenário de entendimento e significado até chegarmos propriamente no reconhecimento do que aquele número ou palavra pode realmente nos ilustrar de significado, o que vai nos permitir então dizer que este conjunto infinito de números ou palavras podem representar um dado.

Mas como podemos definir este tão desconhecido “Dado ou Dados”?

Ao longo dos últimos 12 anos venho lecionando diversas disciplinas na área de banco de dados, entre as mais diversas instituições, faculdades, cursos e área de tecnologia, mas sempre me deparei em todos estes momentos e locais com a maior dúvida, como podemos definir ou afirmar que tal valor pode ser reconhecido como um dado ou informação?

Dados são fatos conhecidos, que podem ser registrados e possuem significado, o mesmo pode  ser definido como a matéria-prima ou o elemento básico para a geração de informações, é um elemento básico para um banco de dados.

Dado é Informação ou Informação é o Dado?

Eis a questão que constantemente me depare a cada inicio de semestre nas disciplinas básicas de banco de dados ou modelagem, e sempre respondo para meus discípulos (alunos): “Dado é tudo aquilo que existe no mundo real e nos permite atribuir ou obter um significado, algo que nos permita reconhecer um valor.”

Já a informação é justamente o valor, significado, atribuído ao dado, que nos estabelece um cenário de entendimento, reconhecimento, compreensão do que “este mesmo dado” quer nos dizer, quer nos revelar.

Então eu apresento o que chamo de Cadeia Evolutiva de um Dado, conforme ilustra a Figura 1 a seguir:
Figura 1 – Cadeia evolutiva de um dado.

Observe que todo e qualquer elemento que reconhecemos com um possível dado, o mesmo, passa por um conjunto de fases até se tornar verdadeiramente algo que nos ajude a tomar decisões e resolve em novos dados.

A Informação

Sabendo então que o dado é o estado anterior de algo que denominados constantemente como informação, o que exatamente pode ser definido ou entendido como informação? Vou tentar te responder de forma simples e objetiva:

A informação pode ser entendida com o dado com significado, passível de interpretação e de entendimento por parte de quem o usa, enfim, é o dado capaz de transmitir conhecimento para a ação ou para a tomada de decisão.

As empresas precisam armazenar os dados relevantes ao seu negócio de alguma forma controlada, organizada, integra e segura. A Tecnologia da Informação oferece recursos para atender a esta importante necessidade das empresas através de sistemas de informação que manipulam as informações da empresa que são armazenadas em um banco de dados.

Um sistema automatizado lida com tarefas comuns aos processos de negócios tais como: contabilidade, controle de estoque, compra e venda. A compreensão de que as informações mantidas por esses sistemas podem ser classificadas, organizadas e pesquisadas apoiando das atividades e tomada de decisões da empresa. Foi a partir deste momento que surgiu a ideia de um Sistema de Informações Gerenciais (SIG). A partir do momento em que os dados estão armazenados, ordenados e organizados, tinha-se a matéria prima disponível para análise por um sistema de suporte à decisão.

A tomada de decisão, ou preparação para o futuro, é a atividade central das organizações modernas. Sendo assim, o sucesso de uma empresa depende da boa tomada de decisão, e para isso a qualidade e disponibilidade dos dados é fundamental.

Sendo assim, todo que qualquer profissional independente da sua área de atuação que consiga reconhecer, entender e diferenciar Dado de uma Informação, estará sempre a frente.


E a sigla AVIAO, o que ela tem haver com estes elementos? Esta resposta eu lhe apresento a seguir:

A Sigla AVIAO

A necessidade de se estudar periodicamente esta cadeia evolutiva que um dado pode apresentar, principalmente estes dois primeiros elementos Dado e Informação, ou Dados e Informações que para muitos representam a mesma coisa, mas obrigatoriamente a maneira que eu sempre busquei, tentei e demorei um certo tempo para encontrar uma forma mais simples e direta visando transmitir para meus alunos como estes “amiguinhos” são tão significantes e importantes para a vida, fez com que eu busca-se de forma mais que constante definir um elemento único para em poucos minutos dizer que estava escrito em diversos livros, apostilas e apresentações.

Além disso, a conjunto de dúvidas, questionamentos e até mesmo críticas em minha abordagem durantes as aulas de Modelagem, Introdução a Banco de Dados, entre outras disciplinas de forma a se relacionar com a área de tecnologia se serviram como base e parâmetro para sua criação.

Como ela foi idealizada

Muito bem, mas posso dizer e garantir que a origem e criação desta sigla não ocorreu dentro de uma sala de aula ou laboratório, na verdade ela surgiu como boa parte das invenções e ideias criada pelo homem, foi em um momento que eu talvez não estivesse de corpo presente mas somente com a minha mente.

Eram quatro horas da manhã do dia 14/11, como sempre em véspera de provas de concurso ou processos de seleção eu tenho dificuldade para dormir, o sono fica leve, como também ansioso para que o tempo passe rápido, naquele mesmo dia eu tinha uma apresentação a ser realizada para um processo de seleção, esta apresentação teria três possíveis temas para serem escolhidos, todos relacionados a área de banco de dados, e eu queria achar uma maneira de tentar justamente resolver em uma única apresentação a junção dos três possíveis temas, foi então que virando várias vezes de um lado para outro e pensando em possibilidades que surgiu  sigla AVIAO, ela é recente, mas vem me orgulhando muito, pois me ajudou absurdamente a resolver sérias dificuldades acadêmicas e profissionais nos últimos dias, como principalmente facilitou o entendimento dos meus alunos.

Neste momento você estar fazendo basicamente estas duas perguntas:

1 – O que representa a sigla Aviao?

2 – Quais são as palavras que forma esta sigla?

Eis as respectivas respostas:

1 – A sigla AVIAO representa um conjunto de definições e características relacionadas diretamente com um dado e seu primeiro estado de evolução conhecido como Informação.

2 – As palavras que forma a sigla AVIAO são: Atomicidade, Veracidade ou Valor, Integridade, Autenticidade e Obrigatoriedade.

Para tentar lhe ajudar a entender melhor o quanto a sigla AVIAO pode lhe ser útil, vou descrever brevemente cada uma destas siglas:

  • Atomicidade: Característica que podemos atribuir diretamente a um dado que nos permite dizer se ele é atômico ou não atômico, ou seja, não divisível ou divisível em partes;
  • Veracidade: Característica que garante que o valor atribuído ou estabelecido para aquele elemento de dado pode ser tratado como algo correto, algo verdadeiro, confiável em sua essência e posteriormente para tomada de decisão;
  • Integridade: Propriedade que devemos estabelecer a um dado, quando estamos analisando a sua origem, ou seja, quem ou o que criou, armazenou ou até mesmo tratou tão conjunto de valores que nos permitem reconhecer como um dado. A integridade se relaciona com o quanto o mesmo o mesmo dado pode ser tratado como verídico, verdadeiro;
  • Autenticidade: Propriedade que nos garante o que valor ou algo que esta sendo apresentado e posteriormente reconhecido pelo dado, realmente é algo que pode existir ou coexistir no mundo real, no qual utilizamos como base as análises e aprendizados obtidos no mundo real, afim de reconhecer e fortalecer que aquele valor é autentico em sua essência, o que nos permite atribuir novos valores, trazendo assim a analise para geração de novos dados; e
  • Obrigatoriedade: Característica que atribuímos a determinados dados, a qual se relaciona com sua importância e posteriormente o quanto este dado pode representar de valor importante para tomada de decisão, ou seja, a obrigatoriedade tem como objetivo principal garantir a qualidade dos nossos dados, um dado que não é obrigatório não pode ser reconhecido, com um dado, verdadeiro, integro ou autentico, esta característica é essencial para definir se aquele dado deve ou não fazer parte de um estudo ou pesquisa.

Sendo assim, acabo de apresentar a sigla AVIAO que venho utilizando desde mês de novembro de 2018, nascida em uma madrugada de sono leve e ansioso devido a um momento importante que iria me deparar na manhã seguinte.


Conclusão

O conhecimento que aprendemos ao longo de nossas vidas é algo transformador, saber a cada dia reconhecer, entender, transmitir e aprender que este conhecimento é nosso dever, o que para muitos pode se tornar uma ameaça, medo ou receio.

Este mesmo elemento chamado de conhecimento, antes de mais nada é um valor ou melhor um dado que passou para algumas fases de evolução até ser reconhecido e tratado como possibilidade de se aprender, tal aprendizado que nos permite criar novos conhecimentos transformando e gerando novos valores.

Foi justamente desta forma, com base, nas minhas experiência profissionais e acadêmicas coletadas ao longo dos anos, reconhecendo e entendendo minhas limitações e dificuldades que me permitiram “criar” um elemento que representa em poucas palavras a junção de diversas conhecimento obtidos durantes anos.

Desta mesma maneira, estou fazendo com que a cadeia de evolução de um dado, continue visa, transformando e criando novos valores, afim de gerar um novo resultando, não deixando que o conhecimento mora comigo, com isso a sigla AVIAO tem me ajudado e transmitir mais facilmente conceitos básicos e de grande importância relacionados com a área de banco de dados e tecnologia.

Agradecimentos

Obrigado por sua visita mesmo primeiro post de 2019, espero que você tenha gostado do conteúdo aqui compartilhado e que o mesmo lhe sirva de inspiração para criar formas de se renovar e transmitir qualquer tipo de conhecimento mais facilmente.

Nos encontraremos nos outros 363 anos de 2019 nos mais variados posts do meu blog.

Um grande abraço, mais uma vez feliz ano novo.

Retrospectiva 2018 – Um ano muito diferente na minha vida


Alô você, boa noite…

Tudo bem? Eu estou bem, mesmo após estes últimos dias de comilança (“Festas de final de ano sempre abusamos um pouco.”).

Pois bem, este não um post dedicado a tecnologias ou produtos da Microsoft, ao contrário, a muito tempo venho pensando e criando coragem para elaborar um post que conte um pouco do meu trabalho, das minhas atividades acadêmicas e profissionais, como também da minha correria como MVP e MIE Expert nas ações e atividades promovidas pela Microsoft que eu estou sempre envolvido.

Introdução

Atribui o título de Retrospectiva, mas não sei bem se este post pode ser chamado ou intitulado desta forma, mesmo assim, vou dividir e até mesmo compartilhar com vocês minha rotina realizada nos 365 que se decorreram ao longo deste ano de 2018, sabendo que o ano ainda não acabou e que alguma coisa de diferente pode acontecer, sei que você que esta neste momento lendo este post entende e compreende o que estou dizendo.

De uma forma bastante simples, vou destacar mês a mês os posts aqui compartilhados, os eventos presenciais e online que participei (alias se eu for participar de todos que recebo convite, teria que se multiplicar em três ou quatros, sinceramente falando melhor são, pois um só já é bastante chato….kkkkkkk), palestras, atividades diárias nos fóruns MSDN e TechNet, Participação Mensal no Gallery TechNet, Participação Semanal no SQLServerCentral.com, bancas de TCCs e TGs, entre demais momentos que possa julgar importante.

2018 chegou e já passou, 2019 esta pedindo passagem…

Então, vamos lá, espero que de alguma forma você possa se sentir parte da minha vida no decorrer deste post, além de uma pequeno história do que aconteceu em cada mês, vou destacar os principais posts publicados no meu blog, como também os scripts que foram disponibilizados no Gallery TechNet e outras ações de destaque em outras mídias sociais, blogs e portais de tecnologia:

Janeiro

Começo de ano não é fácil, entrar novamente na rotina, se organizar após a festas de natal e ano novo é sempre complicado, mas em 2018 tudo começou bem cedo, compra dos uniformes escolares, materiais para volta as aulas, logicamente o aniversário da minha pequena Fernanda e sua nova oportunidade profissional, este foi um mês que mudou o decorrer do 2018.

Claro que não foi somente isso, pude descansar muito, voltar a ficar 30 dias em casa após o ano de 2017 de grandes mudanças profissionais, impactos financeiros e principalmente voltar a colocar minha consultoria de volta aos trabalhos foi bastante desgastante, conflitante e temoroso, mas a vida tem que continuar e já no segundo dia de 2018 publiquei o primeiro post do ano que me trouxe uma nova oportunidade de mostrar o meu trabalho.

Destaques:

#19 – Para que serve

Dica do Mês – SQL Setup ToolSuite Introduction

Microsoft SQL Server – Audit Events – Ocorrência de Restore Database

Microsoft SQL Server – Audit Events – Ocorrência de Backup Database

Fevereiro

Segundo mês do ano, voltamos ao trabalho, novas turmas, novos alunos, novos desafios e com ele sempre algumas mudanças, dentre elas o desafio de lecionar um pouco sobre IoT e principalmente Arduino (plaquinha danada de boa, mas que eu levei um tempinho para conhecer), tirando um pouco da tensão por trabalhar com este conteúdo, outro grande obstáculo a ser superado era a ideia de organizar um evento voltado para IoT na Fatec São Roque, evento que no mês de Junho você vai saber como foi.

Não posso deixar de citar o aniversário da minha pequena Malú.

Destaques:

Material de Apoio – Fevereiro 2018

Microsoft SQL Server – Audit Events – Find Errors for Sort Warnings

Microsoft SQL Server – Audit Events – Find Errors for Missing Column Statistics

Short Scripts – Fevereiro 2018 – Transaction Log

Março

Legal, chegamos no primeiro trimestre de 2018, agora sim o ano esta começando pois o carnaval acabou e com ele os “brasileiros” começam a pensar de verdade no que vão fazer no resto do ano (este não é o meu pensamento, mas sim um fato que a cada ano fica mais evidente), deixando um pouco de demagogia e até crítica de lado, um novo desafio se apresentava no decorrer deste mês, como aumentar ainda mais a audiência e visitação do meu blog que estava passando por um momento de turbulências, foi então que no dia 01/03 resolvi “ressuscitar” a antiga sessão que estava bastante esquecida no meu blog denominada Script Challenge (uma similaridade a sessões já existentes em outros blogs dedicados ao Microsoft SQL Server).

Estava também esperançoso para retornar ao mestrado, mais isso não aconteceu da forma que eu esperava, sendo assim, decidi voltar a me dedicar ao meu blog e tentar reconquistar novos seguidores em minhas redes sociais.

Essa não foi uma tarefa muito fácil, definir um novo formato, abordagem e até mesmo algo que trouxe-se mais visitantes ao blog sem conflitar com as sessões já existentes tomou um pouco do meu tempo, mas no final das contas de seu certo e no decorrer de 2018 outros posts desta mesma sessão foram publicados e em 2019 serão mais ainda.

O mês de março já estava acabando, parecia que tudo esta tranquilo, mas um situação bem fora do comum se apresentou, recebi informações da possível existência de um farsante como usuário dos fóruns do MSDN e TechNet aqui Brasil, e neste caso eu como moderador era responsável em tentar evidenciar e reportar o fato, foi então um momento muito incomum, contatar o profissionais da Microsoft localizados em Redmond em conjunto com meu MVP Leader Glauter Januzzi afim de monitorar este usuário, situação que somente no final deste ano conseguimos resolver.

Destaques:

Script Challenge – 13 – A resposta….

Dica do Mês – Microsoft SQL Server 2017 – SQL Graph Databases

Microsoft SQL Server – Audit Events – Identifying File Shrink Events

Microsoft SQL Server – Audit Events – Auto Database Growth Information

Abril

Mês um pouco mais de tensão e receios, este é o mês que passo pelo processo de análise e renovaçã anual como MVP, todas as minhas contribuições nos últimos 12 meses são sumarizadas, computadas, analisadas e principalmente ponderadas para que estabelecer um mínimo de relevância no meu trabalho que me permita ou não ser novamente reconhecido como MVP, mas esta história eu lhe como mais no mês de Julho, o que posso lhe dizer que entre Maio de 2017 e Abril de 2018 moderei mais de 8.700 dúvidas e posts publicados nos fóruns de SQL Server no Brasil.

Outro momento importante neste primeiro quartil do ano de 2018, foi a publicação de mais uma questão minha no maior portal dedicado ao Microsoft SQL Server, o SQLServerCentral.Com, em sua sessão QotD – Question of the Day, contendo um total de 666 visualizações e respostas.

Além disso, participei presencial do MVP.Conf, primeira conferência nacional dos MVPs da Microsoft realizada em São Paulo, tive a honra de levar os alunos da Etec São Roque neste evento, foi a maior caravana de estudantes presentes, um momento muito marcante na minha vida acadêmica.

Estava me esquecendo de destacar o aniversário da minha mãe (ela merece um post exclusivo por ter me aguentado em seu ventre) e o meu no dia 28.

Destaques:

Material de Apoio – Abril 2018

#20 – Para que serve

Microsoft libera Cumulative Update #6 para SQL Server 2017 RTM

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

Microsoft SQL Server – Audit Events – Adding and Finding Auto Statistics

Microsoft SQL Server – Audit Events – Find Errors for Missing Join Predicates

Manage the suspect_pages Table on SQL Sever 2017

Maio

O mês de maio foi bastante tranquilo, já começamos a se organizar para o final do semestre, este foi um período de 2018 que mais me deparei com demandas profissionais, foi um momento que tive a oportunidade de atender clientes em três localidades distantes ao mesmo tempo: Rio Grande do Sul, Bahia e Paraná isso me representou uma grande oportunidade e satisfação em poder demonstrar o meu trabalho em localidades geograficamente distantes da minha localidade.

Mas nem todos os momentos foram de alegria, neste mês me deparei com uma situação que a muito anos não vivenciava, o quanto algumas “pessoas” podem ser tão desonestas, a devido a uma situação que não vou detalhar mas que marcou muito que mudei brutalmente a minha forma de negociação e prestação de serviços, e não somente isso, me fez tomar a decisão de novamente interromper minhas atividades de consultoria na área de banco de dados para um período, fui buscar me aperfeiçoar, amadurecer profissionalmente como um empreendedor e dono do seu próprio negócio, mas nada de buscar ajuda do Sebrae ou algo parecido, fui na verdade conversar com pessoas que possuem seus próprios negócios aqui em São Roque para entender como eles sobrevivem, posso dizer que foi um momento de grande aprendizado.

A primeira decisão após este período sabático, mudar o nome fantasia da minha empresa, deixando de chamar Jr-Softwares para se tornar Galvão Tecnologia, momento de muito temor pois mudar o nome ou razão social não é tão simples.

Destaques:

Short Scripts – Maio 2018

Microsoft disponibiliza atualização cumulativa 7 para o Microsoft SQL Server 2017

#21 – Para que serve

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

Page considered Suspect in SQL Server 2017

Microsoft SQL Server – TempDB – Number of Reads and Writes

Microsoft SQL Server – TempDB – Monitoring space used by queries

Junho

Agora sim, estamos na metade do ano, 2018 esta voando, passando rápido, você se lembra que no mês de Fevereiro eu havia comentado do evento que estava ajudando a idealizar e organizar, pois bem, ele de fato aconteceu, o chamado 1º Encontro Tecnológico de Internet das Coisas foi devidamente no dia 26/06 com a presença de diversos profissionais de tecnologia da região.

Uma nova conquista também me foi conferida no decorrer do mês de Junho, a publicação de um Script de minha autoria no portal SQLServerCentral.com em sua sessão Scripts, honra e reconhecimento que aconteceu novamente no mês de Julho com um outro Script que me permitiu aprender muito.

Destaques:

Windows 10 IoT Core Services, nova versão do Windows 10 para dispositivos inteligentes

Material de Apoio – Junho 2018

Script Challenge – 2018 – Post 14

Entering random data into a table

Microsoft SQL Server-Comparative between sparse column and non-sparse column

Microsoft SQL Server – Identificar relacionamento lógico de registros em tabelas

Julho

Estamos virando a chave do ano, entramos na segunda metade de 2018, dois trimestres já se passaram, mês que me permitiu comemorar mais um reconhecimento como MVP sendo esta a minha décima primeira renovação anual consecutiva, meu décima segundo ano no programa como MVP e a partir desta renovação o MVP de Data Platform mais antigo do Brasil.

Continuando neste mês de conquistas, tive o prazer de compor as bancas de professores avaliadores dos trabalhos de graduação dos alunos do curso de Sistemas de Informação para Internet da Fatec São Roque.

Com destacado no mês de Junho, tive o reconhecimento de ter um novo Script de minha autoria publicado no SQLServerCentral.com, script que me possibilitou a troca de conhecimento com um dos maiores profissionais de banco de dados relacional do mundo Jeff Moden , agradeço muito a ele pela oportunidade de aprender.

Destaques:

Windows Server 2019 Preview build 17709 disponível para download

Microsoft SQL Server 2017 Cumulative Update 9 disponível

Dica do Mês – Ocultando uma instância em execução do Microsoft SQL Server

Microsoft SQL Server-Creating an annual calendar with holidays

Microsoft SQL Server-Identifying indexes that present duplicate columns

User Stored Procedure for Backup of user databases

Agosto

Meu deus, o segundo semestre chegou, este é o segundo quartil do ano, estamos próximos de terceiro trimestre de 2018, e como de costume mais um desafio é colocado na minha vida, voltar a lecionar uma das disciplinas que eu não trabalhava desde 2012 conhecida por muitos como Sistemas Operacionais, mas que para o Centro Paulo Paulo no curso de sistemas para internet é denominada Servidores e seus Sistemas Operacionais, tive que voltar a estudar, lêr os bons e tradicionais livres de Andrew Stuart Tanenbaum.

Não somente isso, voltar a estudar e praticar a administração de servidores Windows Server algo que eu sempre faço, mas o desafio era trabalhar de forma prática com Suse Linux, RedHat e Ubuntu, olha foram manhã de muito estudo e práticas para conseguir entregar algo de qualidade para meus pupilos, acredito ter feito da melhor forma possível.

Por outro lado, agreguei em minha coleção de disciplinas novas, um dedicada a área de gestão e negócios que esta totalmente relacionada com Banco de Dados, disciplina que mistura dado, informação, conhecimento e tomada de decisão com as possibilidades que as empresas podem ter a partir do momento que fazem uso de um banco de dados relacional e evoluem para um Data Warehouse.

Passado alguns dias, uma boa notícia, havia sido escolhido para a disciplina de Introdução a Criptografia no Mestrado da UFSCar em Sorocaba, mas devido a questões particulares tomei a decisão de não dar continuidade ao mestrado em 2018 e buscar uma nova oportunidade em outra instituição em 2019.

Um momento muito especial neste mês de agosto, foi a oportunidade de bater um papo com o MVP Leader Glauter Januzzi em umas das suas ações com líder dos MVPs, foi um momento impar e totalmente diferente, como também, poder fazer parte das ações de tradução de produtos da Microsoft, ação que eu já havia participado nos anos de 2008, 2009 e 2010, mas que agora tinha um objetivo diferente.

Outro momento muito importante que vivenciei no dia 03/08 a oportunidade de ter participado da Bienal do Livro em conjunto com minha esposa Fernanda, e conhecer alguns dos maiores nomes do Time de Hacking e Stem da Microsoft Corporation que estavam presentes nos estandes da Microsoft na Bienal.

Para fechar o mês, mais um reconhecido a fim conferido e ofertado pela Microsoft, agora na área de Educação, pelo segundo ano seguido foi nomeado MIE Expert – Microsoft Innovative Educator Expert for 2018-2019, prêmio me permitiu ter um engajamento ainda maior na área acadêmica.

Destaques:

Material de Apoio – Agosto 2018

#22 – Para que serve

Microsoft SQL Server 2017 – Cumulative Update 10

Windows Admin Center Preview v1808 disponível

Microsoft SQL Server-transaction relationship using Transaction Log

Microsoft SQL Server – Diferença básica entre operadores Rollup e Cube

Setembro

O mês de setembro, acredito que tenha sido o mais diferente do todos os outros que havia se passado em 2018, voltei a participar das reuniões mensais de MVPs realizadas pelo Glauter Januzzi, reuniões que também participei em Outubro, Novembro e Dezembro.

Tive a oportunidade de ter o meu nome destacou em neste reunião com um curador e mantenedor dos fóruns nacionais de SQL Server tanto no MSDN e TechNet, como também, me destaquei como um dos principais MVPs envolvidos no projeto de localização e tradução do termos, frases e palavras para os novos produtos da Microsoft.

Por fim no dia 06 o aniversário do Edu e no dia 28 do João Pedro, ambos meus “pequenos” garotos.

Destaques:

Short Scripts – Setembro 2018

Microsoft oficializa a disponibilidade geral do novo Office 2019

Microsoft SQL Server Data Tools v15.8.1 para Visual Studio 2017 liberado para download

Microsoft SQL Server – Informações sobre a execução de Jobs e Steps

Microsoft SQL Server – Obtendo o histórico de execução de jobs

Outubro

Segundo quartil de 2018 se apresenta, nele continuo minha caminhada semanal de respostas e moderadores de perguntas e dúvidas aplicadas no decorrer do ano nos fóruns MSDN e TechNet Brasil dedicados ao Microsoft SQL Server, ainda mais agora com esta responsabilidade de ser um curador ou mantenedor destas plataformas, atividade que tento fazer quase que diariamente mas requer tempo, cuidado e muito sensatez para diferenciar a dúvida da profanação.

Algo um pouco fora do comum acontece neste período, recebo solicitação de alguns participantes dos Fóruns para indicação como futuros novos MVPs, uma situação bastante fora do comum e até mesmo difícil de se resolver, mas como de costume deixou bem claro que não faço indicações pois cabe a própria Microsoft identificar seus futuros representantes.

Uma outra situação que também se apresenta neste mesmo momento, é a confirmação de um usuário dos fóruns brasileiros forjando a postagens de dúvidas e respostas, ou seja, ele mesmo postava e respondia com outro perfil somente para aumentar sua pontuação e se tornar líder no ranking, situação que como eu destaquei no mês de Março, deu muito trabalho mais conseguimos comprovar que era um mal elemento.

Fora tudo isso, tive a oportunidade de realizar a única palestra presencial de 2018 na 6ª Semana da Tecnologia da Fatec São Roque, com o tema: Introdução ao Data Mining aplicado em Business para Commerce, como também, a satisfação de conhecer pessoal dois grandes profissionais conhecedores de MongoDB: Leandro Domingues e Jhonatan de Souza Soares.

Para fechar o mês publico mais uma questão do dia para o SQLServerCentral.com, esta que até o presente momento ainda não foi publicada.

Destaques:

Microsoft divulga a disponibilidade do novo Microsoft Windows Server 2019

Microsoft Hyper-V Server 2019 disponível

Script Challenge – 14 – A resposta….

Microsoft confirma desativação dos protocolos TLS 1.0 e 1.1 para Microsoft Edge e Internet Explorer em 2020

Dica do Mês – Comando Restore Database Page – Restaurando páginas de dados de uma tabela no Microsoft SQL Server

Material de Apoio – Outubro 2018

Microsoft SQL Server – Identificando as querys com maior média de consumo de CPU

Microsoft SQL Server – Identificando o consumo de CPU por Banco de Dados

Novembro

Penúltimo mês de 2018 se apresentando para fazer parte desta história, em novembro tive a oportunidade de participar nos dia 19/11 e 28/11 das bancas de avaliação dos Trabalhos de Conclusão do Curso dos alunos da Etec São Roque, momento muito especial vivido no dia 28/11 na Câmara dos Vereadores de São Roque.

Por outro lado, foi no mês de novembro que alguns sustos e medos se apresentaram, minha esposa Fernanda teve alguns problemas de saúde se agravando, consultas com Neurologista, Ginecologista foram necessárias mas graças a deus tudo correu bem e no mês de dezembro tivemos boas notícias.

O final de semestre se aproximando e com ele o final de ano, a correria começando a aumentar devido aos prazos finais de para conclusão de notas, faltas, correção de provas, trabalhos, bancas de tccs e mais um evento a ser realizado na Fatec São Roque o qual eu estava totalmente envolvido.

No finalzinho do mês, passado alguns meses desde a última consultoria, decido retornar a minhas atividades de consultor, atualizo minhas apresentações, portfólio, página da minha empresa, cadastrados nos websites do governo, coloco novamente no ar a Galvão Tecnologia e passado dois ou três dias meu telefone particular toca, e um novo cliente se apresenta.

Destaques:

Próximas versões do Windows 10 poderão ter os codinomes Vanadium e Vibranium

Nova versão do Kit de Desenvolvimento Quântico da Microsoft

Microsoft SQL Server 2019 Preview 2.1 liberado

Short Scripts – Novembro 2018

Microsoft SQL Server 2014 SP3 liberado para download

Microsoft SQL Server – Identificando as contas que estão executando os serviços

Microsoft SQL Server – Monitorando os serviços através da XP_ServiceControl

Dezembro

E ai chegamos no último mês de 2018, último trimestre, último quartil, últimos 31 dias de um ano totalmente diferente dos demais 37 que eu já havia vivido, um ano totalmente dedicado aos estudos, tanto profissionais, acadêmicos, mas principalmente pessoais e espirituais.

Os primeiros 15 dias de dezembro foram muito, mas muito intensos, final de semestre chegou, tinha mais de 120 provas, trabalhos, listas de exercícios para serem corrigidos, terem suas notas validadas e lançadas, 21 bancas de trabalho de graduação para serem assistidas, bem como, o evento que encerrava uma das minhas disciplinas, aquela que eu comecei em 2018 e me dedicar mais afinco que envolvia IoT.

Pois bem, no dia 08/12 em conjunto com meus alunos do 4º Semestre de Sistemas para Internet, realizado o 2º Encontro Tecnológico de IoT da Fatec São Roque.

Neste mesmo período de dias aconteceram o Microsoft Ignite e o MVP Day em São Paulo, mas infelizmente não tive a oportunidade de participar destes eventos.

No dia 15 aniversário do meu herói, meu pai, completou mais um aninho de vida.

Desta forma, estou aqui neste momento finalizando este post no dia 27/12 ás 02:50hrs, tendo seu início no dia 26/12 ás 23:34hrs.

Destaques:

Aproximadamente 120 milhões de brasileiros tiveram seus números de CPF expostos de forma indevida na Internet

Quatro novos tema para Windows 10

Novos ícones para o Microsoft Office 365 são apresentados

Microsoft 365 Insider Program anunciado pela Microsoft

Material de Apoio – Dezembro 2018

#23 – Para que serve

Retrospectiva 2018 – Um ano muito diferente na minha vida

Microsoft SQL Server – Monitorando – Fila de disco em tempo real

Microsoft SQL Server – Alterando o valor mínimo de Memória RAM alocada

Conclusão

Talvez você que esta lendo este post, possa se perguntar: Não seria melhor ele ter feito uma retrospectiva destacando em números os resultados obtidos ou até mesmo o que ele alcançou?

A resposta para esta dúvida ou pergunta é muito simples NÃO. 

Pois muitos vezes os números podem ser mal interpretados, ou como eu costumo dizer para meus alunos, os números podem se tornar gelados, algo sem significado ou relevância para quer os identifica, análise, julga ou interpretar.

Procurei mostrar como minha vida no decorrer deste ano foi intensa, tenho a certeza que fatos, situações ou momentos foram esquecidos ou até mesmo deixados de lado, mas talvez a relevância do que aqui foi apresentado pode ilustrar o quanto temos de afazeres, responsabilidades e momentos de grande importância que nos permitem alcançar tudo aquilo que em algum momento sonhados ou desejamos para nossas vidas.


Agradecimento

Quero agradecer em muito a sua visita, sinto-me honrado em poder compartilhar um pouco do que fiz e produzi no decorrer de ano de 2018.

Felicidades, lhe desejo um final de ano fantástico e 2019 com muita saúde e paz.

Abraços.

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

Material de Apoio – Dezembro 2018


Olá, muito bom dia….

Tudo bem? Estamos no mês de dezembro, mês de festividades, e os brasileiros correndo nas ruas, shoppings, comércios em geral para escolher seus presentes e lembrança de Natal, como de costume e a cada ano parece que o tempo voa e não nos damos conta de o quanto nossas vidas tem se tornado um grande roda gigante, repleta de altos e baixos em todos os sentidos.

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

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

O post de hoje

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

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

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

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

  • Alter Database;
  • Arquivos de Dados;
  • Colunas Dinâmicas;
  • Contagem de Caracteres;
  • Data e Hora;
  • DBCC ShowFileStats;
  • DBCC ShrinFile;
  • DBCC TraceStatus;
  • Espaço em Disco;
  • Espaço Ocupado em Disco;
  • Extents;
  • FileGroups;
  • Função Char();
  • Função FileProperty;
  • Função Len();
  • Função PadIndex();
  • Função Replace();
  • Função Revert();
  • Função SubString();
  • Operador Composto;
  • Operador Like;
  • Páginas de Dados;
  • Pivot;Strings; e
  • View sys.database_files.

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

Material de Apoio

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

1 – Material de Apoio – Dezembro – 2018 – Adicionando novos arquivos de dados.sql

2 – Material de Apoio – Dezembro – 2018 – Criando um Pivot com Colunas dinâmicas através da hora.sql

3 – Material de Apoio – Dezembro – 2018 – Invertendo a posição de palavras em uma linha.sql

4 – Material de Apoio – Dezembro – 2018 – Movendo páginas não alocadas, Truncando, Esvaziando e Removendo um arquivo de dados.sql

5 – Material de Apoio – Dezembro – 2018 – Utilizando operador Like em conjunto com Colchetes.sql

6 – Material de Apoio – Dezembro – 2018 – Utilizando operador composto.sql

7 – Material de Apoio – Dezembro – 2018 – Identificando o espaço ocupado e livre para arquivos de dados e log.sql

8 – Material de Apoio – Dezembro – 2018 – Simulando a contagem de um caracter específico dentro de uma string.sql

9 – Material de Apoio – Dezembro – 2018 – Dbcc ShowFileStats – Identificando o número de páginas alocados por extents de acordo com o filegroup.sql

10 – Material de Apoio – Dezembro – 2018 – DBCC TraceStatus – Validar as Trace Flags de inicialização habilitadas.sql

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

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

Links

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

https://pedrogalvaojunior.wordpress.com/2018/10/30/material-de-apoio-outubro-2018/

https://pedrogalvaojunior.wordpress.com/2018/08/14/material-de-apoio-agosto-2018/

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

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

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

Agradecimento

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

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

Um forte abraço, muita saúde, sucesso e nos encontramos em 2019 (Ano Novo, vida nova e SQL Server 2019 pintando na área).

Valeu.

Microsoft SQL Server 2014 SP3 Atualização Cumulativa 1 liberada


A Microsoft informou no decorrer desta semana em seu blog SQL Server Release Services a disponibilidade da Atualização Cumulativa 1 para SQL Server 2014 SP3.

Com base, no artigo KB4470220 publicado no site de suporte, a atualização traz correções para múltiplos bugs no SQL Server 2014 SP3.

A lista com os bugs corrigidos destaca um dos mais reportados após o lançamento do Service Pack, conhecido por causar a ocorrência de resultados incorretos quando você converte o parâmetro pollinginterval de segundos para horas na System Stored Procedure sys.sp_cdc_scan, outro bug destacado se relacionado com um erro de violação de acesso no SQL Server Analysis Services durante o processamento de um banco de dados analítico.

A Atualização Cumulativa 1 para SQL Server 2014 SP3 está disponível para download em múltiplos idiomas para plataformas 32 e 64 bits, após a instalação desta atualização o Build Version será evoluído para o número: 12.0.6205.1.

A seguir destaco relação completa de atualizações disponíveis para o Microsoft SQL Server 2014 desde o seu lançamento, em destaque as mais recentes dentre elas o Service Pack 3.

SQL Server 2014 Service Pack 3 (SP3) e atualização cumulativa (CU) compilações


Nome da atualização cumulativa Versão da compilação Número da base de dados de conhecimento Dia do lançamento
SQL Server 2014 SP3 CU1 12.0.6205.1 KB4470220 12 de dezembro de 2018
SQL Server SP3 de 2014 12.0.6024.0 KB4022619 30 de outubro de 2018

SQL Server 2014 Service Pack 2 (SP2) e atualização cumulativa (CU) compilações


Nome da atualização cumulativa Versão da compilação Número da base de dados de conhecimento Dia do lançamento
SQL Server 2014 SP2 CU15 12.0.5605.1 KB4469137 12 de dezembro de 2018
SQL Server 2014 SP2 CU14 12.0.5600.1 KB4459860 15 de outubro de 2018
SQL Server 2014 SP2 CU13 12.0.5590.1 KB4456287  27 de agosto de 2018
SQL Server 2014 SP2 CU12 12.0.5589.7 KB4130489 18 de junho de 2018
SQL Server 2014 SP2 CU11 12.0.5579.0 KB4077063 19 de março de 2018
SQL Server 2014 SP2 CU10 12.0.5571.0 KB4052725 16 de janeiro de 2018
SQL Server 2014 SP2 CU9 12.0.5563.0 KB4055557 18 de dezembro de 2017
SQL Server 2014 SP2 CU8 12.0.5557.0 KB4037356 16 de outubro de 2017
SQL Server 2014 SP2 CU7 12.0.5556.0 KB4032541 28 de agosto de 2017
SQL Server 2014 SP2 CU6 12.0.5552.0 KB4019094 17 de julho de 2017
SQL Server 2014 SP2 CU5 12.0.5546.0 KB4013098 17 de abril de 2017
SQL Server 2014 SP2 CU4 12.0.5540.0 KB4010394 21 de fevereiro de 2017
SQL Server 2014 SP2 CU3 12.0.5538.0 KB3204388 19 de dezembro de 2016
SQL Server 2014 SP2 CU2 12.0.5522.0 KB3188778 17 de outubro de 2016
SQL Server 2014 SP2 CU1 12.0.5511.0 KB3178925 25 de agosto de 2016
SQL Server 2014 SP2 12.0.5000.0 KB3171021 11 de julho de 2016

SQL Server 2014 Service Pack 1 (SP1) e atualização cumulativa (CU) compilações


Nome da atualização cumulativa Versão da compilação Número da base de dados de conhecimento Dia do lançamento
SQL Server 2014 SP1 CU13 12.0.4520.0 (build mais recente) KB4019099 17 de julho de 2017
SQL Server 2014 SP1 CU12 12.0.4511.0 KB4017793 17 de abril de 2017
SQL Server 2014 SP1 CU11 12.0.4502.0 KB4010392 21 de fevereiro de 2017
SQL Server 2014 SP1 CU10 12.0.4491.0 KB3204399 19 de dezembro de 2016
SQL Server 2014 SP1 CU9 12.0.4474.0 KB3186964 17 de outubro de 2016
SQL Server 2014 SP1 CU8 12.0.4468.0 KB3174038 15 de agosto de 2016
SQL Server 2014 SP1 CU7 12.0.4459.0 KB3162659 20 de junho de 2016
SQL Server 2014 SP1 CU6 12.0.4457.0 KB3167392 30 de maio de 2016
SQL Server 2014 SP1 CU6 (preterido) 12.0.4449.0 KB3144524 18 de abril de 2016
SQL Server 2014 SP1 CU5 12.0.4439.1 KB3130926 22 de fevereiro de 2016
SQL Server 2014 SP1 CU4 12.0.4436.0 KB3106660 21 de dezembro de 2015
SQL Server 2014 SP1 CU3 12.0.4427.24 KB3094221 19 de outubro de 2015
SQL Server 2014 SP1 CU2 12.0.4422.0 KB3075950 17 de agosto de 2015
SQL Server 2014 SP1 CU1 12.0.4416.1 KB3067839 19 de junho de 2015
SQL Server SP1 de 2014 12.0.4100.1 KB3058865 4 de maio de 2015

Compilações do SQL Server 2014 atualização cumulativa (CU)


Nome da atualização cumulativa Versão da compilação Número da base de dados de conhecimento Dia do lançamento
CU14 12.0.2569.0 (build mais recente) KB3158271 20 de junho de 2016
CU13 12.0.2568.0 KB3144517 18 de abril de 2016
CU12 12.0.2564.0 KB3130923 22 de fevereiro de 2016
CU11 12.0.2560.0 KB3106659 21 de dezembro de 2015
CU10 12.0.2556.4 KB3094220 19 de outubro de 2015
CU9 12.0.2553.0 KB3075949 17 de agosto de 2015
CU8 12.0.2546.0 KB3067836 19 de junho de 2015
CU7 12.0.2495.0 KB3046038 20 de abril de 2015
CU6 12.0.2480.0 KB3031047 16 de fevereiro de 2015
CU5 12.0.2456.0 KB3011055 17 de dezembro de 2014
CU4 12.0.2430.0 KB2999197 21 de outubro de 2014
CU3 12.0.2402.0 KB2984923 18 de agosto de 2014
CU2 12.0.2370.0 KB2967546 27 de junho de 2014
CU1 12.0.2342.0 KB2931693 21 de abril de 2014

Fontes e Direitos Autorais: Suporte da Microsoft – Versões de compilação do SQL Server 2014 – 14/12/2018 – https://support.microsoft.com/pt-br/help/2936603/sql-server-2014-build-versions

Short Scripts – Novembro 2018


Muito boa tarde, já estamos no mês de novembro, e este é mais um post da sessão Short Scripts.

Tudo bem? Já esta se preparando para as festividades de final de ano?

Eu particularmente ainda não, na verdade a grana esta curta então tenha que esperar um pouquinho….

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 35 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 a mesma forma que o anterior, compartilhar scripts relacionados a um tema específico, sendo o tema de hoje a propriedade Identity(), desta maneira, você vai se deparar com alguns códigos que estejam envolvidos com este tema e que também se vinculem com outros, dentre os quais destaco:

  • Ativando e Desativando a propriedade Identity;
  • Capturando o último valor Identity;
  • Comando DBCC CheckIdenty();
  • Função Identity;
  • Ident_Current;
  • Realizando insert com a propriedade Identity;
  • Refazer numeração sequencial;
  • Scope_Identity;
  • Select Into;
  • Sequência Numérica;
  • Set Identity_Insert On / Off;
  • Tabela de sistema sys.indexes;
  • Tabela de sistema sys.objects;
  • Tabela de sistema sys.identity_columns;
  • Tabela de sistema sys.index_column; e
  • Variáveis de sistema @@Identity.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Novembro 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  – Ativando e Desativando a propriedade Identity() —

SET IDENTITY_INSERT NomedaTabela On
Go

SET IDENTITY_INSERT NomeDaTabela Off
Go

— Short Script 2  – Comando DBCC CheckIdent(), redefinindo a sequência Identity() —
Declare @Identity Int

— Obtendo o último valor Identity() —
Set @Identity=(Select Ident_Current(‘NomedaTabela’))

— Aplicando e redefinindo a sequência Identity através do último valor obtido —
DBCC CheckIdent(‘NomedaTabela‘,Reseed,@Identity)
Go

— Short Script 3  – Identificando se a chave primária possui a propriedade Identity aplicada —
Select O.Object_Id,
O.Name,
Case IC.is_identity
When 0 Then ‘Identity desabilitado’
When 1 Then ‘Identity habilitado’
End As ‘Identity’
From sys.objects O Inner Join sys.identity_columns IC
On O.object_id = IC.object_id
Where IC.is_identity=1

— Short Script 4  – Obtendo o último valor Identity de cada tabela —
SELECT sys.tables.name AS [Table Name],
sys.identity_columns.name AS [Column Name],
sys.types.name as Type,
last_value AS [Last Value]
FROM sys.identity_columns INNER JOIN sys.tables
ON sys.identity_columns.object_id = sys.tables.object_id
Inner join sys.types
on sys.types.user_type_id = sys.identity_columns.user_type_id
ORDER BY last_value DESC

— Short Script 5  – Resentando o valor Identity atualmente em uso — 
DBCC CHECKIDENT (‘NomedaTabela’, RESEED, 0)
Go

— Short Script 6 – Identificando o valor Identity atualmente em uso —
DBCC CHECKIDENT (‘NomedaTabela’, NORESEED)
Go

— Short Script 7 – Utilizando a função Identity() em conjunto com o comando Insert —

— Exemplo 1 —
Create Table Valores
(Codigo Int)

Insert Into Valores Values(1)
Go 100

Select Identity(Int, 2,2) As Linha, Codigo Into Registros from Valores
Go

— Exemplo 2 —
Select identity(int, 1,1) As Seq, name from sys.sysdatabases
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/09/18/short-scripts-setembro-2018/

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/

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 a ser publicado somente em 2019, mais especificamente no mês de fevereiro.

Um forte abraço, lhe desejo um ótimo final de ano.

Até mais.

Microsoft SQL Server 2019 Preview 2.1 liberado


A Microsoft disponibilizou na semana passada através do Microsoft Evaluation Center o Microsoft SQL Server 2019 Preview 2.1. Esta versão está disponível em múltiplos idiomas, este é o segundo Preview público liberado pela Microsoft da nova versão do Microsoft SQL Server.

De acordo com a empresa, o SQL Server 2019 oferece mais segurança, disponibilidade e desempenho para todas as cargas de dados, além de trazer novas ferramentas de conformidade, melhor desempenho em hardware moderno e alta disponibilidade em Windows, Linux e contêineres.

Alguns dos principais recursos do produto, nesta nova versão estão recebendo mais atenção, dentre eles o PolyBase, que apresenta alguns aprimoramentos, permitindo que você possa consultar outros bancos de dados como Oracle, Teradata e Mongo DB diretamente do SQL Server sem mover ou copiar os dados, além disso, pela primeira vez, o SQL Server 2019 vai além do banco de dados relacional com Spark e o Sistema de Arquivos Distribuído (HDFS) inclusos.

Baixe o Microsoft SQL Server 2019 Preview 2.1

O Microsoft Server 2019 Preview 2.1 para Windows está disponível para download, como ISO e como arquivo .cab nos seguintes idiomas: ‎

  • Inglês,
  • Alemão,
  • Japonês,
  • Espanhol,
  • Coreano,
  • Russo,
  • Italiano,
  • Francês,
  • Chinês (simplificado),
  • Chinês (tradicional) e
  • Português (Brasil)‎.

Para maiores detalhes e Instruções para as versões Red Hat Enterprise Server, SUSE Linux Enterprise Server, Ubuntu e Docker estão disponíveis aqui.

Fontes e Direitos Autorais: https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-ver15?view=sqlallproducts-allversions

Microsoft SQL Server 2014 SP3 liberado para download


A Microsoft anunciou na semana passada em seu blog SQL Server Release Services a disponibilidade do SQL Server 2014 SP3 (Service Pack 3), seu pacote cumulativo de atualizações mais recente para esta versão do SQL Server.

Os service packs do SQL Server 2014 são atualizações cumulativas e atualizam todas as edições e níveis de serviço do SQL Server 2014 para o SP3.

Microsoft anuncia disponibilidade do SQL Server 2014 SP3De acordo com a Microsoft, o Service Pack 3 traz diversas melhorias com foco na performance, escalabilidade e diagnósticos com base no feedback de seus clientes e da comunidade.

Ele também traz correções para múltiplos bugs e altera o build do SQL Server 2014 para 12.0.6024.0.

A lista com os bugs corrigidos inclui um que causa o erro Non-yielding Scheduler e faz com que o SQL Server pareça travado, um que causa erro de violação de acesso quando uma consulta faz referência à função SQLCLR em certos cenários e um que causa o erro EXCEPTION_ACCESS_VIOLATION para consultas usando sys.dm_os_memory_objects statement.

O Feature Pack para esta versão será disponibilizado para download em novembro deste ano, a relação completa de bugs corrigidos pode ser vista no artigo KB4022619 publicado no site de suporte da Microsoft.

Para realizar download específico para edição Express clique na imagem abaixo:

Para as demais versões clique na imagem a abaixo:

Fontes e Direitos Autorais: SQL Server Release Services – Server & Tools Blogs > Data Platform Blogshttps://blogs.msdn.microsoft.com/sqlreleaseservices/sql-server-2014-service-pack-3-is-now-available/

Material de Apoio – Outubro 2018


Bom dia, bom dia, bom dia…

Tudo bem? Estamos no mês de outubro, as eleições terminaram, e os brasileiros escolheram os seus representantes, passado estes últimos acontecimentos, começamos a direcionar nossos esforços e pensamentos nos acontecimentos de final de ano, aquele momento tão esperado por todos esta mais uma vez se aproximando e nossos sonhos de um futuro melhor começam novamente a serem renovados.

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

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

O post de hoje

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

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

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

Neste post você vai encontrar arquivos relacionados exclusivamente ao recurso de Linked Server, sendo este, uma funcionalidade existente a muitos anos no Microsoft SQL Server, que nos permite de uma forma bastante simples, mas não muito prática e performática estabelecer um canal de acesso entre fontes de dados distintas, possibilitando em tempo real que o próprio SQL Server possa acessar e manipular dados entre estas fontes, bem como, armazenar estes mesmos dados internamente.

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

  • Access;
  • Active Directory;
  • Excel;
  • Query Dinâmica;
  • Remote Servers;
  • Senhas;
  • sp_addlinkedserver;
  • sp_addlinkedsrvlogin;
  • sp_droplinkedsrvlogin;
  • sp_dropserver;
  • Stored Procedure;
  • sys.linked_logins;
  • sys.server_principals;
  • sys.servers;
  • Transações; e
  • Variáveis.

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

Material de Apoio

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

1 – Material de Apoio – Outubro 2018 – Linked Server – Acessando – Active Directory via Linked Server.sql

2 – Material de Apoio – Outubro 2018 – Linked Server – Configurando – Linked Server entre Access 2010 e SQL Server 2008.sql

3 – Material de Apoio – Outubro 2018 – Linked Server – Criando – Linked Server entre Access e Banco de Dados com Senha.sql

4 – Material de Apoio – Outubro 2018 – Linked Server – Criando – Linked Server para acesso ao Excel.sql

5 – Material de Apoio – Outubro 2018 – Linked Server – Trabalhando com Transaçoes no Linked Server.sql

6 – Material de Apoio – Outubro 2018 – Linked Server – Obtendo informacoes sobre o Linked Server.sql

7 – Material de Apoio – Outubro 2018 – Linked Server – Trabalhando com Query Dinâmica em conjunto com Linked Server e Variável.sql

8 – Material de Apoio – Outubro 2018 – Linked Server – Trabalhando com Linked Server e seus recursos básicos.sql

9 – Material de Apoio – Outubro 2018 – Linked Server – Realizando um update através de uma conexão via Linked Server.sql

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

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

Links

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

https://pedrogalvaojunior.wordpress.com/2018/08/14/material-de-apoio-agosto-2018/

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

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

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

Agradecimento

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

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

Um forte abraço, muita saúde, sucesso e nos encontramos no final do ano (que na verdade já chegou)….

Dica do Mês – Comando Restore Database Page – Restaurando páginas de dados de uma tabela no Microsoft SQL Server


Olá boa tarde, que surpresa te encontrar mais uma vez no meu blog, caso esta seja a sua primeira vez, fico mais feliz ainda, seja muito bem vindo.

Este é mais um post da sessão Dica do Mês, sessão dedicada a compartilhar bimestralmente dicas, novidades, curiosidades e demais assuntos, conteúdos e informações relacionadas ao Microsoft SQL Server, Banco de Dados e Tecnologias de Banco de Dados.

No post de hoje, quero compartilhar com vocês uma das funcionalidades adicionadas ao Microsoft SQL Server a partir da versão 2016 e que recentemente acabei conhecendo com um pouco mais. 

Funcionalidade que trouxe um grande salto de qualidade ao produto, ainda mais se levarmos em consideração sua praticidade e simplicidade de uso.

Como você já pode notar no título deste post, estou me referindo a nova capacidade de recuperação de dados através do comando Restore Database em conjunto com a opção Page.

Pois bem, sem mais delongas, 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 – Comando Restore Database Page – Restaurando páginas de dados de uma tabela no Microsoft SQL Server.


Introdução

Umas das tarefas mais ingratas para qualquer profissional de tecnologia, principalmente aqueles que estão diretamente relacionadas as tarefas de administração, retenção e armazenamento de dados se relaciona ao momento em que nossos ambientes começam apresentam comportamentos fora do comum ou até mesmo instabilidades. 

Quem nunca se deparou com este tipo de situação! Eu por diversas vezes passei por isso nesta minha longa estrada da vida na área de tecnologia da informação.

Mas não somente isso é importante, algo muito maior e mais preocupante podemos enfrentar, o tão temido momento de restauração de um banco de dados o chamado Restore Database, imagina então você ter que recuperar uma parte específica de uma tabela ou índice que de uma hora para outra começou a apresentar falhas e simplesmente tornou-se inacessível.

Foi justamente com base neste tipo de cenário, que o time de engenheiros da Microsoft dedicados no desenvolvimento do Microsoft SQL Server adicionaram no comando Restore Database e também no interface gráfica do Management Studio a capacidade de verificar a integridade física e lógica de uma ou mais páginas de dados, como também, a possibilidade de realizar sua restauração.

Até aqui tranquilo, nada de novidade, vamos então seguir em frente e conhecer a opção Page existente no comando Restore Database.

Tabelas e Índices

As tabelas são o coração do Microsoft SQL Server e do modelo relacional em geral, pois é onde o dado é armazenado. Cada instância de um dado na tabela representa uma entidade simples ou registro (formalmente chamado de tupla). A maioria das tabelas serão relacionadas entre si. Por exemplo: A tabela Clientes possuí um identificador único CodigoCliente que é usado como chave estrangeira no relacionamento com a tabela Pedido.

As tabelas devem ser modeladas de acordo com a teoria de banco de dados relacionais, respeitando as formas normais.

Ao criarmos nossas tabelas e índices, estamos criando internamente estrutura responsáveis em armazenar em tempo real nossos dados em áreas físicas das unidades de armazenamento de dados.

Não vou me aprofundar nos conceitos relacionados a páginas de dados, pois este não é objetivo deste post, mas sim de destacar como a Restore Database Page é importante, sua finalidade e forma de uso.

Restore Database Page

Seu objetivo é possibilitar a restauração de uma página de dados danificada sem restaurar todo o banco de dados, muito menos provocar qualquer tipo de impacto ou instabilidade no acesso aos dados após sua resturaçao.

Normalmente, as páginas que são candidatos para restauração foram marcadas como “suspeita” devido a um erro que é encontrado ao acessar a página.

As páginas suspeitas são identificadas na tabela suspect_pages no banco de dados msdb.  

Avançando mais um pouco, neste momento, já temos uma noção dos elementos básicos: Tabelas e Índices, sabemos também da estrutura que as compõem chamada de páginas de dados e de que forma estas estruturas são controladas e gerenciadas, agora vamos construir nosso cenário de testes que justamente vai nos permitir ter a visão completa de toda esta estrutura e como poderemos realizar os procedimentos de sobrescrever uma página de dados e posteriormente realizar sua restauração.

Nosso ambiente

Como de costume vamos utilizar um ambiente isolado dos demais bancos de dados que você possa conter, desta maneira nosso cenário será constituído dos seguintes elementos:

  • Banco de Dados:  RestoreDatabasePage;
  • Database Recovery Model: Full;
  • Database Page_Verify: CheckSum;
  • Tabela: TabelaCorrompida; e
  • Índice Clusterizado: Ind_TabelaCorrompida_Codigo. 

Criando o ambiente

Através do Bloco de Código 1 apresentado abaixo, vamos realizar a criação dos respectivos elementos destacados anteriormente:

— Bloco de Código 1 – Criação do Ambiente —

— Criando o Banco de Dados —
Create Database RestoreDatabasePage
Go

— Acessando —
Use RestoreDatabasePage
Go

— Criando a TabelaCorrompida —
Create Table TabelaCorrompida
(Codigo Int Identity(0,2),
ValorGUID UniqueIdentifier,
ValorRandomico BigInt,
ColunaGrande Char(100) Default ‘TC’)
Go

— Criando o Índice Clusterizado na TabelaCorrompida —
Create Clustered Index Ind_TabelaCorrompida_Codigo On TabelaCorrompida(Codigo)
Go

Como nossa estrutura base pronta, chegou a hora de popular nossa tabela realizando o processo de inserção de uma aleatória massa de dados em nossa tabela, para tal, vamos utilizar o Bloco de Código 2 apresentado a seguir:

— Bloco de Código 2 – Populando a TabelaCorrompida —
— Desabilitando a contagem de linhas processadas —
Set NoCount On
Go

— Declarando a variável de controle @Contador —
Declare @Contador Int = 0

— Abrindo bloco de transação Trans1 —
Begin Transaction Trans1

While @Contador <= 132768
Begin

Insert Into TabelaCorrompida(ValorGUID, ValorRandomico)
Values (NewId(), ABS(CHECKSUM(Rand()* 200000000)))

Set @Contador += 2
End

— Confirmando e encerrando o bloco de transação Trans1 —
Commit Transaction Trans1
Go

Observação: Note que estou fazendo uso dos comandos Begin Transaction e Commit Transaction, como forma de controle e adoção de transações explícita, sendo assim, estou informando o Microsoft SQL Server quando a transação começa e deverá ser obrigatoriamente encerrada, além disso, estou evitando e isolando o processo de inserção de dados de qualquer possibilidade de bloqueio.

Neste momento, nossa tabela já esta populada “abastecida de dados”, com um total fixo de 66385 linhas de dados, denominados tecnicamente como registros lógicos.

Vamos caminhar mais um pouco, antes de realizarmos o processo de consultar a estrutura de nossas páginas de dados e posteriormente forçar sua reescrita, vamos realizar um procedimento de backup database de nosso banco de dados, procedimento importante para garantir e possibilitar a restauração das páginas, para tal utilizaremos o Bloco de Código 3 apresentado abaixo:

— Bloco de Código 3 – Backup Database —
Backup Database RestoreDatabasePage
To Disk = ‘S:\MSSQL-2017\Backup\RestoreDatabasePage-Backup-Full.bak’  — Troque para sua                                                                                                                                              unidade de disco
With Compression,
NoFormat,
Init,
Stats=10
Go

Pronto, nosso backup já esta realizado, estamos prontos e preparados para começar a brincadeira, nosso próximo passo será obter a relação das páginas de dados que forma nossa TabelaCorrompida, para isso, vamos utilizar a não documentada function sys.fn_PhysLocFormatter, solicitando ao Microsoft SQL Server a apresentação das 100 primeiras páginas de dados da nossa tabela, conforme apresenta o Bloco de Código 4:

— Bloco de Código 4 – Obtenção a relação das páginas de dados da TabelaCorrompida —
Select TOP 100 sys.fn_PhysLocFormatter(%%physloc%%) PageId,
*
FROM TabelaCorrompida
Go

A Figura 1 apresentada a seguir ilustra o resultado obtido após a execução do Bloco de Código 4:
Figura 1 – Relação das páginas de dados e seus respectivos dados.

Legal, esta ficando interessante esta brincadeira, por enquanto sem nenhum perigo!

Para que possamos realizar o processo de reescrita de uma ou mais páginas de dados, vou selecionar duas páginas (256 e 258) e seus valores para utilizar em nosso cenário, conforme a Tabela 1 apresentada abaixo:

PageID Codigo ValorGuid
(1:256:10) 20 6460AAB3-AD12-47BB-B179-8C1930B1A287
(1:258:1) 120 AEF17F9D-D838-4FEF-B723-CA3658D03319

Tabela 1 – Relação de páginas de dados e valores que iremos utilizar.

Já sabemos com quais estruturas vamos fazer o processo de reescrever suas estruturas, devemos então preparar nosso banco de dados para que nos possibilite a realização desta tarefa, desta forma, utilizaremos o Bloco de Código 5, apresentado abaixo:

— Bloco de Código 5 — Alterando a forma de acesso do banco de dados RestoreDatabasePage —

— Preparando-se para corromper a estrutura de páginas —
Use Master
Go

— Limitando a conexão do Banco de Dados para Single_User —
Alter Database RestoreDatabasePage
Set Single_User
With Rollback Immediate
Go

Ótimo, acabamos de limitar o acesso físico e lógico do nossa banco de dados para Single_User, desta forma, nenhuma outra conexão ou solicitação de acesso será permitida ao mesmo, neste momento temos acesso único e exclusivo.

O passo seguinte, consiste na consulta da estrutura da página de dados 256 e posteriormente na procura do valor 6460AAB3-AD12-47BB-B179-8C1930B1A287 armazenado no Slot 10, vamos então executar o Bloco de Código 6, apresentado abaixo:

— Bloco de Código 6 — Obtendo as informações sobre a página de dados 256 e pesquisando valor 6460AAB3-AD12-47BB-B179-8C1930B1A287 —

Para que possamos obter as informações de retorno apresentadas pelos comandos DBCC – Database Command Console, precisamos fazer uso do comando Dbcc TraceOn ativando a Trace Flag 3604 que orienta e informa ao Microsoft SQL Server que o mesmo deverá apresentar logo após a execução dos comandos DBCCs seus respectivos resultados.

— Obtendo informações sobre os slots de alocação de dados —
Dbcc TraceOn (3604)
Go

Seguindo nossa caminhada, vamos utilizar o comando DBCC Page, comando que vai nos possibilitar obter o conjunto de informações internas que formam a estrutura da nossa tabela, neste caso, vamos buscar toda estrutura da página de dados de número 256.

— Procurando valor 6460AAB3-AD12-47BB-B179-8C1930B1A287 e guardar slots —
Dbcc Page (‘RestoreDatabasePage’, 1, 256, 3);
Go

A Figura 2 apresentada abaixo, ilustra uma parte da estrutura interna da página de dados 256, apresentando sua área de buffer e page hearder:
Figura 2 – Estrutura interna da página de dados 256.

Pois bem, precisamos agora procurar o valor 6460AAB3-AD12-47BB-B179-8C1930B1A287 dentro da área de dados desta mesma página, afim de encontramos o refiro Slot 10 que armazena este dado.

Para que possamos encontrar o referido valor clique na guia de mensagens do Management Studio e preciso posteriormente a tecla de atalho CTRL + F, informando o valor na campo de busca.

A Figura 3 ilustra o 6460AAB3-AD12-47BB-B179-8C1930B1A287 localizado na estrutura interna da página de dados 256:
Figura 3 – Valor 6460AAB3-AD12-47BB-B179-8C1930B1A287 localizado.

O mesmo procedimento deverá ser feito para página 258 referente ao código 120 e ValorGuid AEF17F9D-D838-4FEF-B723-CA3658D03319.

Além disso, recomendo que você anote as informações referente OffSet e Length de dados valor pesquisado em sua referida página, pois ambos serão utilizado no procedimento de reescrita, mas como eu sou bonzinho, a Tabela 2 apresentada abaixo destaca estes valores:

Collumn Offset Length ValorGuid
2 0x8 16 6460aab3-ad12-47bb-b179-8c1930b1a287
2 0x8 16 AEF17F9D-D838-4FEF-B723-CA3658D03319

Tabela 2 – Informações sobre Offset e Length dos respectivos ValorGuid.

Agora chegou a tão esperada hora de suar o barraco (kkkk), não é bem assim, mas chegou o momento de reescrevermos a estrutura das páginas de dados: 256 e 258, através do comando DBCC WritePage declarado no Bloco de Código 7 apresentado na abaixo:

— Reescrevendo a página de dados 256 no OffSet 0x8 —
Dbcc WritePage (‘RestoreDatabasePage’, 1, 256, 8, 16, 0x00000000000000000000000000000001, 1)
Go

— Reescrevendo a página de dados 256 no OffSet 0x8 —
Dbcc WritePage (‘RestoreDatabasePage’, 1, 258, 8, 16, 0x00000000000000000000000000000001, 1)
Go

Se você conseguiu realizar o processamento destes dois comandos DBCC WritePage, isso significa que neste momento as páginas de dados 256 e 258 estão apresentando inconsistência em suas estruturas, algo que podemos comprovar através da execução do Bloco de Código 8, apresentado abaixo:

— Bloco de Código 8 – Verificando a Integridade da TabelaCorrompida —
— Alterando o acesso ao Banco de Dados para Multi_User —
Alter Database RestoreDatabasePage
Set Multi_User
Go

— Realizar testes de integridade consultando dados na TabelaCorrompida —
Use RestoreDatabasePage
Go

Select Count(Codigo) From TabelaCorrompida
Go

Ao realizarmos o comando Select Count() para tentarmos contar a quantidade de linhas de registros existentes na TabelaCorrompida, o Management Studio nos retorna a seguinte mensagem de erro:
Msg 824, Level 24, State 2, Line 162
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x4bd220eb; actual: 0xcb53a034). It occurred during a read of page (1:256) in database ID 11 at offset 0x00000000200000 in file ‘S:\MSSQL-2017\Data\RestoreDatabasePage.mdf’. Additional messages in the SQL Server error log or operating system error log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

Vamos avançar mais ainda, estamos nos aproximando do final deste post, agora que nosso ambiente esta danificado podemos fazer uso da opção Page existente no comando Restore Database que vai nos permitir restaurar a estrutura física e lógica da nossa tabela, sendo assim, vamos utilizar o Bloco de Código 9, apresentado abaixo:

— Bloco de Código 9 – Iniciando o processo de restauração e recuperação das páginas de dados —
— Realizando a Restauração das Páginas de Dados —
Use Master
Go

— Restore Database Page —
Restore Database RestoreDatabasePage
PAGE=’1:256, 1:258′ — Informando os números de páginas
From Disk = N’S:\MSSQL-2017\Backup\RestoreDatabasePage-Backup-Full.bak’
With File = 1, — Especificando o arquivo de dados
NoRecovery, — Não liberando o banco para acesso
Stats = 10
Go

 

Perfeito, realizamos o procedimento se restauração das páginas de dados 256 e 258 sem restaurar toda estrutura do nosso banco, agora podemos realizar um novo teste e verificar se a a estrutura da nossa TabelaCorrompida encontra-se funcional, conforme apresenta o Bloco de Código 10 a seguir:

— Bloco de Código 10 — Realizando um novo teste de integridade consultando dados na TabelaCorrompida —
Use RestoreDatabasePage
Go

Select Count(Codigo) From TabelaCorrompida
Where Codigo Not Between 20 And 120
Go

E para nossa surpresa o Management Studio retornou mais uma vez outra mensagem de erro:
Msg 829, Level 21, State 1, Line 186
Database ID 11, Page (1:256) is marked RestorePending, which may indicate disk corruption. To recover from this state, perform a restore.

Esta mensagem nos informa que não podemos realizar o acesso a TabelaCorrompida pois neste momento a página 256 esta marcado como pendente de restauração, este é um comportamento normal apresentado pelo SQL Server, pois o mesmo depende da realização de um backup de log e posteriormente da restauração (conhecido como Tail Log) para realizar a limpeza e desmarcar esta página de dados como pendente.

Para tal procedimento, utilizaremos o Bloco de Código 11, apresentado abaixo:

— Bloco de Código 11 — Realizando Backup Log e Restore Log (Tail Log) —
— Backupear o Log e Restaura para Liberar páginas marcadas como pendentes —
Use Master
Go

Backup Log RestoreDatabasePage
To Disk = ‘S:\MSSQL-2017\Backup\RestoreDatabasePage-Backup-Log.bak’
With NoFormat,
Init,
Name = N’RestoreDatabasePage-Backup-Log’,
Stats=10
Go

— Restaurar Log —
Restore Log RestoreDatabasePage
From Disk = ‘S:\MSSQL-2017\Backup\RestoreDatabasePage-Backup-Log.bak’
With Recovery,
Replace,
Stats = 10
Go

Acredito que o procedimento de Backup Log e Restore Log tenha ocorrido normalmente, basta agora realizar o último teste de acesso a TabelaCorrompida para poder consultar todos os dados armazenados na mesma, conforme apresenta o Bloco de Código 12:

— Bloco de Código 12 — Realizar último teste de integridade consultando dados na TabelaCorrompida —
Use RestoreDatabasePage
Go

A Figura 4 apresentada abaixo ilustra a massa de dados existente na TabelaCorrompida, após o procedimento de restauração e recuperação das páginas de dados: 256 e 258.
Figura 4 – Relação de dados existentes na TabelaCorrompida, recuperados após o procedimento de Restore Database Page.

— Obtendo a quantidade de registros armazenados na TabelaCorrompida —
Select Parcial=(Select Count(Codigo) From TabelaCorrompida Where Codigo Not In (20,120)),
Geral=(Select Count(Codigo) From TabelaCorrompida)
Go

Show de bola, muito bom, conseguimos, seguimos todos os passos desde a criação do nosso ambiente, inserção de dados, identificação das páginas e suas estrutura, reescrita na estrutura das páginas e o tão esperado procedimento de restauração.

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/en-us/sql/relational-databases/backup-restore/restore-pages-sql-server?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/statements/backup-transact-sql

https://www.mssqltips.com/sqlservertip/1925/how-to-use-the-sql-server-sysfnphyslocformatter-undocumented-function/

https://blogs.msdn.microsoft.com/fcatae/2016/04/12/dbcc-page/

https://docs.microsoft.com/pt-br/sql/t-sql/database-console-commands/dbcc-transact-sql

http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-New-%28undocumented%29-physical-row-locator-function.aspx

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2006/12/13/more-undocumented-fun-dbcc-ind-dbcc-page-and-off-row-columns/

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

Posts Anteriores

https://pedrogalvaojunior.wordpress.com/2018/07/26/dica-do-mes-ocultando-uma-instancia-em-execucao-do-microsoft-sql-server/

https://pedrogalvaojunior.wordpress.com/2018/04/25/dica-do-mes-sql-operations-studio-view-as-chart/

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/

Conclusão

Como já destaquei em outros posts, a cada nova versão, atualização e correção a Microsoft transforma o SQL Server em um produto surpreende, ainda mais na sua capacidade e versatilidade de permitir aos profissionais de tecnologia, administradores de bancos de dados, programadores, entre outros, utilizar recursos nativo e também os não documentados oficialmente como um elemento capaz de se superar e sobreviver a  inúmeras falhas ou situações de perdas de dados.

No post de hoje, mais uma vez este foi constatado, a possibilidade através do comando DBCC Page de se obter informações sobre as páginas de dados, o comando DBCC WritePage (muito cuidado com ele) sensacional na sua funcionalidade em permitir uma reescrita de dados na estrutura das páginas que formam uma tabela, e principalmente a não documentada function sys.fn_physLocFormatter que de forma simples, fácil e confiável nos apresenta a distribuição de páginas de dados que compõem nossas tabelas em conjunto com os respectivos slots que armazenam nosso dados.

Acredito que você tenha conseguido entender e observar como consultamos a estrutura de páginas, a forma que alteramos seu conteúdo forçando uma reescrita de dados e depois como conseguimos através do comando Restore Database Page recuperar estas áreas.

Este é o fantástico Microsoft SQL Server, produto tão fascinante que a cada dia eu não consigo deixar de querer estudar e conhecer mais ainda.

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.

Nos encontramos no próximo post da sessão Dica do Mês a ser publicado no mês de dezembro.

Um forte abraço, sucesso, até mais…

Microsoft SQL Server 2014 SP2 recebe atualização cumulativa 14


A Microsoft anunciou na última segunda-feira no blog SQL Server Release Services a disponibilidade da Atualização Cumulativa 14 para SQL Server 2014 SP2, esta atualização contém correções para os problemas que foram descobertos depois do lançamento do SQL Server 2014 SP2 e das atualizações cumulativas anteriores.

O artigo KB4459860 publicado no site de suporte da Microsoft, a atualização traz correções para múltiplos bugs no SQL Server 2014 SP2.

Atualização Cumulativa 14 para SQL Server 2014 SP2

A lista com os bugs corrigidos inclui um que causa erro de violação de acesso no SQL Server Analysis Services durante o processamento de certos bancos de dados, um que causa erro de violação de acesso durante uma consulta que faz referência ao tipo de dado Extended Markup Language (XML) e um que causa erro de falta de memória em certos cenários.

A relação completa com todos os bugs corrigidos pode ser vista através do link: https://support.microsoft.com/en-us/help/4459860/cumulative-update-14-for-sql-server-2014

A Figura 1 abaixo destaca a relação de arquivos disponíveis para download relacionados a  atualização cumulativa 14, nas arquiteturas de sistemas operacionais 32 e 64 bits:

Figura 1 – Relação de arquivos disponíveis para download relacionados ao SQL Server 2014 SP2 CU 14.

A Atualização Cumulativa 14 para SQL Server 2014 SP2 (build 12.0.5600.1) está disponível para download clicando na imagem abaixo:

Compatível com os seguintes sistemas operacionais (para múltiplos idiomas):

  • Windows 10,
  • Windows 7,
  • Windows 7 Service Pack 1,
  • Windows 8,
  • Windows 8.1,
  • Windows Server 2008 R2,
  • Windows Server 2008 R2 SP1,
  • Windows Server 2012,
  • Windows Server 2012 R2, e
  • Windows Server 2016.

Fontes e Direitos Autorais: Microsoft – Download Center: 15/10/2018.

Script Challenge – 14 – A resposta….


Boa tarde, pessoal…

Tudo bem?  Seja mais uma vez muito bem vindo ao meu blog, mais especificamente ao post que apresenta a resposta para o Script Challenge – 2018 – Post 14, publicado em junho de 2018, sendo este respectivamente o segundo post após o retorno desta desafiadora sessão em meu blog denominada Script Challenge (Script Desafiador ou Desafio do Script) como queiram traduzir.

Espero que você já tenha ouvido falar desta sessão ou acessado alguns dos posts publicados na mesma, caso ainda não tenha feito, fique tranquilo você vai encontrar no final deste post uma pequena relação contendo os últimos desafios lançados e seus respostas.

Vamos então falar um pouco mais sobre o último desafio, estou me referindo ao Script Challenge 14, desta forma, seja bem vindo a mais um post da sessão Script Challenge.


Script Challenge 14

Falando do desafio de número 14, o mesmo foi publicado no mês de junho de 2018, período de data em que o mundo todo praticamente direcionou os seus olhares para a Rússia, mais especificamente para os jogos de futebol que estavam ocorrendo no país naquele momento.

Pois bem, o Script Challenge 14 não tem nenhum relação com o mundo do futebol, muito menos com o esporte, e como diria aquele apresentador do programa que passa ao domingos: “Sabe o que isso significa? Nada…..”.

Na verdade não é bem assim, para todos aqueles que trabalham com tecnologia e são responsáveis em armazenar, compartilhar, gerenciar e manter dados armazenados em banco de dados, sabe muito bem o quanto temos que nos preocupar em estabelecer boas práticas de retenção de dados afim de podermos ter uma quem sabe vida tranquila ou momentos de lazer.

Continuando nossa história, quero lhe perguntar: E ai já matou a charada? Eu acredito que sim!

Mas para te ajudar mais um pouco vou apresentar a Figura 1 que contem todo código Transact-SQL utilizado neste desafio, contendo trechos ou partes de código ocultas, procedimento que realizei no post que contempla o lançamento deste desafio como forma de aumentar o nível de dificuldade:

Figura 1 – Código Transact-SQL apresentado no Script Challenge 14.

Bom chegou a hora de revelar o que exatamente este bloco de código esta fazendo, chegou o momento de revelar e desvendar este desafio, a seguir apresento a resposta para o Script Challenge 14 e o trecho de código disponível para você utilizar em seus ambientes de trabalho ou estudos.

A resposta

Tanto no post de lançamento do desafio, bem como, neste post que a resposta para o mesmo, eu deixei algumas pequenas dicas para tentar ajudar a identificar a resposta, dentre as quais a relação do script com uma das mais tradicionais atividades desempenhadas por um Administrador de Banco de Dados ou Profissional de tabela, mais diretamente falando a execução de uma operação de backup de banco de dados.

Mas se mesmo assim, você ainda não conseguiu adivinhar ou até mesmo esta se perguntando qual a relação do Script Challenge – 14 tem haver com um momento de lazer, a resposta é muito simples, para qualquer Administrador de Banco de Dados, Administrador de Servidores, Desenvolvedor, enfim um profissional de tecnologia, tudo o que fazemos basicamente em um computador é manipular dados (Criar, Atualizar, Excluir).

Tudo o que fazemos esta relacionado com esta palavrinha pequena mas de altíssima importância e pensando neste sentido a resposta para este desafio se relaciona a estimativa de crescimento de um arquivo de backup, e o quanto esta atividade tão importante e de alta complexidade pode impactar totalmente na vida daqueles que assim como eu um dia ou por diversos momentos teve que abrir mão do seu convívio familiar para se dedicar a acompanhar esta atividade.

Então a resposta para o Script Challenge 14 se relaciona com a possibilidade que o script apresenta em nos ajudar a identificar e estimar o quanto de espaço livre em disco em megabytes ainda teremos antes da execução do backup database levando-se em consideração o tamanho do arquivo de backup a ser criado.

Isso mesmo, esta é a resposta, e o script original que apresenta esta funcionalidade apresentada abaixo:

— Script Challenge 14 – A resposta – Identificando o total de espaço livre em disco antes da realização do backup database — 

— Criando a Stored Procedure —
USE AdventureWorksDW2016
Go

CREATE PROCEDURE dbo.dbo.EstimatedDriveFreeSpaceAndDBSize (
@drvLetter VARCHAR (5),
@enoughSpaceForBackupFlag BIT OUTPUT
)
AS
BEGIN
DECLARE @estimatedBackSizeMB INT,
@estimatedDriveFreeSpaceMB INT,
@dbCheckMessage varchar(80)

SET NOCOUNT ON

SET @dbCheckMessage = Concat (‘Checking database ‘, DB_NAME ())

SELECT @estimatedBackSizeMB = round (sum (a.total_pages) * 8192 / SQUARE (1024.0), 0)
FROM sys.partitions p JOIN sys.allocation_units a
                                            ON p.partition_id = a.container_id
                                           LEFT JOIN sys.internal_tables it
                                            ON p.object_id = it.object_id

CREATE TABLE #freespace

(drive VARCHAR (5),

MBFree DECIMAL (8, 2))

INSERT INTO #freespace (Drive, MBFree)
EXEC xp_fixeddrives

SELECT @estimatedDriveFreeSpaceMB = MBFree
FROM #freespace
WHERE drive = @drvLetter

IF @estimatedBackSizeMB * 1.15 < @estimatedDriveFreeSpaceMB
 SET @enoughSpaceForBackupFlag = 1
ELSE
 SET @enoughSpaceForBackupFlag = 0

SELECT DatabaseName = db_name(),
Estimated_Back_Size_MB = @estimatedBackSizeMB,
Estimated_Drive_Free_Space_MB = @estimatedDriveFreeSpaceMB,
EnoughSpaceForBackupFlag = @enoughSpaceForBackupFlag

DROP TABLE #freespace
SET NOCOUNT OFF
END
GO

Então, agora você deve ter gostado deste desafio, não é verdade? Poder estimar o espaço livre em disco e o tamanho ocupado pelo arquivo mesmo sem executar o Backup Database é realmente uma grande funcionalidade que o Microsoft SQL Server possui. 

Observações

  1. Estamos criando uma User Stored Procedure EstimatedDriveFreeSpaceAndDBSize;
  2. A mesma possui um parâmetros de entrada de valores: @drvLetter (utilizado para informar qual a letra da unidade de disco que iremos analisar); e
  3. Um parâmetro de saída @enoughSpaceForBackupFlag (utilizado no momento da execução da stored procedure como sinalizar responsável em apresentar uma mensagem ao usuário).

Para que você possa entender mais ainda sobre como podemos obter os resultados apresentados por este script, declaro a seguir uma possível maneira de executar o Script Challenge – 14:

— Executando o Script Challenge – 14 —

USE AdventureWorksDW2016
Go

DECLARE @enoughSpaceForBackupFlag bit

EXEC Master.dbo.EstimatedDriveFreeSpaceAndDBSize ‘S’, @enoughSpaceForBackupFlag OUTPUT

PRINT @enoughSpaceForBackupFlag
IF @enoughSpaceForBackupFlag = 1
PRINT ‘Continue to Backup…’
ELSE
PRINT ‘Drive Space Problem…’
GO

A Figura 2 apresentada abaixo, ilustra o conjunto de dados retornados após a execução do Script Challenge – 14:

Figura 2 – Informações relacionadas a estimativa de tamanho do arquivo de backup e espaço livre em disco em megabytes.

Muito bom, sensacional, conseguimos, chegamos ao final, esta é a resposta para o Script Challenge 14, fico extremamente feliz por ter conseguido compartilhar este conteúdo com vocês.

Espero que você tenha gostado deste novo post da sessão Script Challenge!


Sua Participação

No post de lançamento deste desafio, contei com a participação através de uma enquete contendo algumas opções de respostas que poderiam estar relacionadas com o Script Challenge 14. A seguir apresento o resultado desta enquete:

A opção mais votada com 77,78% dos votos é justamente a resposta correta para este desafio, o qual exibe retorna ao usuário informações relacionadas a estimativa de espaço em disco ocupado pelo arquivo de backup de banco de dados e o espaço livre disponível em disco após a conclusão do backup.

Referências

Agradecimentos

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

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

Até a próxima…

Microsoft SQL Server Data Tools v15.8.1 para Visual Studio 2017 liberado para download


O Microsoft SQL Server Data Tools v15.8.1 é uma ferramenta de desenvolvimento moderna que você pode baixar gratuitamente para criar bancos de dados relacionais do SQL Server, bancos de dados SQL do Azure, pacotes do Integration Services, modelos de dados do Analysis Services e relatórios do Reporting Services.

Através do SSDT, podemos projetar e implantar qualquer tipo de conteúdo do Microsoft SQL Server com a mesma facilidade com que desenvolve um aplicativo no Visual Studio.

Esta nova versão é compatível com os sistemas operacionais com o Windows 8.1, Windows 10, Windows Server 2012 R2 e Windows Server 2016, vale ressaltar que o Windows 7 SP1 não é suportado.

Para realizar a instalação do SSDT com o Visual Studio, selecione as opções disponibilizadas pelo instalador, conforme apresenta a Figura 1 abaixo:
Sql Dt 1581 02

Figura 1 – Opções de instalação disponíveis para o Microsoft SQL Server Data Tools v15.8.1.

Informações sobre a versão
Número de lançamento: 15.8.1.
Número de compilação: 14.0.16179.0.
Data de lançamento: 27 de setembro de 2018.

Idiomas disponíveis

Esta nova versão do Microsoft SQL Server Data Tools v15.8.1 esta disponível para os seguinte idiomas:

Chinese (Simplified) | Chinese (Traditional) | English (United States) | French
German | Italian | Japanese | Korean | Portuguese (Brazil) | Russian | Spanish

IMPORTANTE: Antes de instalar o SQL Server Data Tools v15.8.1 para Visual Studio 2017, desinstale as extensões “Projetos do Microsoft Analysis Services” e “Projetos do Microsoft Reporting Services”, caso eles já estejam instalados no Visual Studio 2017 e feche todas as instâncias do Visual Studio.

A Figura 2 a seguir apresenta a tela inicial de instalação do Microsoft SQL Server Data Tools 15.8.1.

select AS, IS, RS
Figura 2 – Tela inicial de instalação do Microsoft SQL Server Data Tools 15.8.1.

O changelog publicado pela Microsoft destaca que a versão 15.8.1 do SQL Server Data Tools para Visual Studio 2017 remove o suporte para o SQL Server 2012 e adiciona suporte para o SQL Server 2019 Preview.

Para maiores informações sobre o SQL Server Data Tools acesse: https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017

Para realizar o download, basta clicar na imagem abaixo:
Fontes e Direitos Autorais: Microsoft – Docs SQL SSDT (SQL Server Data Tools) – 28/09/2018.

Microsoft SQL Server Management Studio 18.0 Preview 4 disponível


No decorrer desta semana em seu grande evento Ignite 2018 realizado em Orlando, a Microsoft anunciou a disponibilidade da próxima versão do Microsoft SQL Server 2019 e também liberou para download a última versão preview do Microsoft SQL Server Management Studio 18.0.

O SQL Server Management Studio é um ambiente integrado para gerenciar qualquer infraestrutura de SQL, do SQL Server para o Banco de Dados SQL do Microsoft Azure. O SSMS fornece ferramentas para configurar, monitorar e administrar instâncias do SQL. Use o SSMS para implantar, monitorar e atualizar os componentes da camada de dados usados pelos seus aplicativos, além de construir consultas e scripts.

Através do SQL Server Management Studio (SSMS) podemos realizar consultas, criar e gerenciar seus bancos de dados e data warehouses, independentemente de onde estiverem – no computador local ou na nuvem.

De acordo com o changelog publicado aqui pela Microsoft, a versão 18.0 traz correções de bugs e novidades como o suporte para o SQL Server 2019 Preview, tamanho de download reduzido, melhorias na acessibilidade, suporte para instalação em uma pasta diferente da padrão e mais.

A Figura 1 apresentada abaixo, ilustre a tela de apresentação do novo Microsoft SQL Server Management Studio 2019 após a instalação:

Figura 1 – Tela de apresentação do Microsoft SQL Server Management Studio 18.0 Preview 4.

O Microsoft SQL Server Management Studio v18.0 Preview 4 (build 15.0.18040.0) está disponível para download, através do link: https://go.microsoft.com/fwlink/?linkid=2014662.

A Figura 2 apresentada abaixo, destaca as informações sobre esta nova versão do Microsoft SLQ Server Management Studio 18.0 Preview 4 após a instalação:
Figura 2 – Informações sobre o Microsoft SQL Server Management Studio 18.0 Preview 4.

Compatível com as versões do Microsoft SQL Server versão 2008 até 2019, bem como, para versões e arquiteturas de sistemas operacionais 64 bits: Windows 10 v1607 ou posterior, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 e Windows Server 2016.

Informações sobre a versão
Número de lançamento: 18.0 (Preview 4).
Número de compilação: 15.0.18040.0.
Data de lançamento: 24 de setembro de 2018.

Idiomas disponíveis

Esta nova versão do Microsoft SQL Server Management Studio 18.0 Preview 4 esta disponível para os seguinte idiomas:

Chinese (Simplified) | Chinese (Traditional) | English (United States) | French | German | Italian | Japanese | Korean | Portuguese (Brazil) | Russian | Spanish

Importante
A instalação do Microsoft SQL Server Management Studio 18.0 Preview 4 não atualiza ou substitui as versões do Microsoft SQL Server Management Studio 17.x ou anterior.

O Microsoft SQL Server Management Studio 18.0 Preview 4 se instala lado a lado com versões anteriores para que ambas as versões estejam disponíveis para uso.

Para maiores informações acesse: https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-changelog-ssms?view=sql-server-2017

Para realizar o download, basta clicar na imagem abaixo:
Fontes e Direitos Autorais: Microsoft – Docs SQL Tools SQL Server Management Studio (SSMS).