SQL Server no Desenvolvimento Web: Dicas e Conteúdos Gratuitos

Renato Groffe
7 min readJul 10, 2019

--

Recentemente realizei durante o Database Dev Night #1 uma apresentação sobre o uso do SQL Server no desenvolvimento de solucões Web. Disponibilizei inclusive os slides no SlideShare:

Neste novo artigo abordo rapidamente as diversas dicas desta palestra, trazendo ainda referências a respeito dos recursos e tecnologias utilizados.

SQL Server em Linux?

Sim, é possível!

O SQL Server conta atualmente (desde a versão 2017) com a suporte às seguintes distribuições Linux: Ubuntu, Red Hat e SUSE. Há ainda a possibilidade de execução via containers Docker, o que viabiliza o uso deste SGBD em ambientes baseados no macOS.

Para maiores detalhes consulte o link a seguir:

Installation guidance for SQL Server on Linux

Docker + SQL Server

Containers Docker representam uma excelente alternativa para a rápida criação de ambientes de Desenvolvimento e Testes baseados no SQL Server, oferecendo com isto a possibilidade de utilização deste SGBD a partir de máquinas Windows, Linux e Mac.

Com os comandos abaixo podemos baixar as versões mais recentes do SQL Server 2017 e 2019 (este último se encontra atualmente no Community Technology Preview 3.1):

docker pull mcr.microsoft.com/mssql/server:2017-latest

docker pull mcr.microsoft.com/mssql/server:2019-latest

Já a instrução a seguir criará um novo container/instância para execução do SQL Server 2019:

Em que:

  • O atributo name especifica o nome do container a ser gerado (sqlserver2019);
  • Foi informado no parâmetro ACCEPT_EULA a concordância com os termos de uso do SQL Server 2019;
  • No atributo SA_PASSWORD foi indicada a senha do administrador (usuário SA);
  • O atributo -p indica a porta (21433) em que acontecerá a comunicação com o SQL Server, a qual será mapeada para a porta default (1433) deste SGBD dentro do container;
  • Quanto ao atributo -d, este parâmetro determina que o container em questão será executado como um serviço em background;
  • Através do atributo -v foi criado um volume, especificando assim o diretório no Ubuntu Desktop em que serão gravados os arquivos de dados (/home/renatogroffe/Desenvolvimento/Docker/Volumes/SQLServer2019);
  • Temos indicada ainda a imagem utilizada como base para a geração do container (mcr.microsoft.com/mssql/server:2019-latest).

Na próxima imagem podemos observar destacadas em vermelho as imagens do SQL Server 2017 e 2019, bem como o container correspondente ao SQL 2019 criado em uma máquina baseada no Ubuntu Desktop 18.04:

Já na imagem a seguir temos o volume criado para este container, com os arquivos de dados do SQL Server:

Azure Data Studio

Solução open source e multiplaforma (compatível com Windows, Linux e Mac), o Azure Data Studio é uma alternativa mais leve (em relação ao SQL Management Studio) para gerenciamento de bases de dados. Conta ainda com integração com o Git, além de funcionalidades para exportação do resultado de consultas para os formatos JSON e .xlsx.

Na próxima imagem podemos observar um exemplo de conexão ao container criado na seção anterior (vale destacar que, ao utilizar uma porta diferente de 1433 com o SQL Server, será necessário especificar vírgula - “,” - ao invés de 2 pontos separando esta configuração do nome do host):

Já a imagem a seguir mostra a conexão com o container que está executando na porta 21433, assim como a versão da instância do SQL Server 2019 (CTP 3.1):

Suporte a JSON

Desde o SQL Server 2016 o retorno de uma query pode ser convertido para uma string JSON através da instrução JSON PATH:

O resultado desta expressão será uma string que formatada apresentará um resultado similar ao da seguinte listagem:

O projeto abaixo foi criado com o ASP.NET Core 2.2 e faz uso deste tipo recurso como forma de simplificar a implementação (dispensando a escrita de várias classes), bem como para obter uma maior performance (eliminando a instanciação de vários objetos e sua consequente serialização):

ASP.NET Core 2.2 + Dapper + SQL Server (suporte a JSON)

Abordei anteriormente esta solução no seguinte artigo:

.NET + SQL Server 2017 - Parte 2: retornado consultas em JSON (exemplo com ASP.NET Core + Dapper)

Executando a instrução a seguir no PowerShell:

Teremos como resultado uma string JSON com o resultado da execução do comando apresentado no início desta seção:

Dynamic Data Masking

Este recurso está presente desde a versão 2016 do SQL Server, oferecendo a possibilidade de mascarar a visualização de informações sensíveis. Trata-se de um mecanismo extremamente útil na produção de relatórios.

Para ativar o uso de Dynamic Data Masking definimos máscaras para os campos que contêm os dados a serem protegidos, além desta funcionalidade estar atrelada às permissões de acesso de um usuário ao banco de dados.

Na próxima imagem podemos observar uma aplicação ASP.NET Core 2.2 na qual se empregou Dynamic Data Masking:

O projeto correspondente a este exemplo se encontra no GitHub:

ASP.NET Core 2.2 + Dapper + SQL Server + Data Masking

Maiores detalhes sobre a utilização de Dynamic Data Masking podem ser encontrados no seguinte artigo:

.NET + SQL Server 2017 - Parte 3: protegendo dados sensíveis com Data Masking (exemplo com ASP.NET Core + Dapper)

Função TRIM para tratamento de textos

Desde o SQL Server 2016 temos a função TRIM, que permite a eliminação de espaços à direita e à esquerda de uma string (dispensando assim o uso conjunto de LTRIM e RTRIM).

Azure SQL

Uma alternativa para utilização do SQL Server na nuvem é o o Azure SQL, solução que integra a plataforma de cloud computing da Microsoft. Este serviço permite a definição de servidores e suas respectivas bases de dados, além de dispor de um gerencimento de usuários que funciona da mesma forma que em versões on premise.

No exemplo a seguir é possível observar o banco de dados BaseIndicadores, o qual está vinculado ao servidor groffesql:

Podemos inclusive configura a faixa de IPs que terão acesso ao servidor groffesql:

SQL Server + ASP.NET Core + Health Checks: uma alternativa de monitoramento

Desde o ASP.NET Core 2.2 podemos utilizar Health Checks para verificar se um servidor SQL está acessível.

Esta primeira listagem traz um exemplo de uso do package AspNetCore.HealthChecks.SqlServer via método AddSqlServer (linha 51), com a passagem por parâmetro da string de conexão à base a ser monitorada:

O projeto correspondente a esta aplicação foi descrito no seguinte artigo:

ASP.NET Core + Health Checks: monitorando a saúde de uma aplicação via dashboard

Neste exemplo uma página/dashboard será renderizado, apresentando o resultado dos testes de monitoramento (incluindo o estado atual da dependência envolvendo o SQL Server):

Podemos também vincular um Health Check a um DbContext do Entity Framework Core. Neste segundo caso, será necessário adicionar o package Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore ao projeto. Invocar em seguida o método AddDbContextCheck em ConfigureServices (linha 39), informando como parâmetro a classe do tipo DbContext. É o que demonstra a próxima listagem:

O projeto de exemplo a que se refere esta última listagem também foi disponibilizado no GitHub:

ASP.NET Core 2.2 + Entity Framework Core + SQL Server + Health Checks + Predicates + Redis + Azure Application Insights

Monitorando a disponibilidade de bases de dados e o desempenho de queries

Serviço de monitoramento que integra o Microsoft Azure, o Application Insights também pode ser empregado no monitoramento de bancos de dados do SQL Server e oferece funcionalidades como:

  • Testes de disponibilidade, que podem ser configurados para determinar se um servidor SQL está no ar;
  • Monitoramento das dependências envolvendo bases de dados SQL;
  • O recurso conhecido como Analytics pode ser útil na identificação de instruções SQL mais lentas.

Recentemente tivemos uma live no Canal .NET abordando este serviço do Azure. A gravação pode ser assistida gratuitamente no YouTube:

Maiores informações sobre este serviço podem ser encontradas nos seguintes posts:

ASP.NET Core 2.2 + Application Insights: monitorando a disponibilidade dos BDs de uma aplicação

ASP.NET Core + Entity Framework Core: monitoramento descomplicado via Application Insights

Application Insights + Logic Apps + Aplicações Web: enviando alertas de monitoramento via Slack

Monitorando aplicações Web com o Azure Application Insights — MVPConf LATAM 2019

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet