Microsoft .NET Core v2.1.2 liberado


Em anunciou realizado na última terça-feira dia 10/07, a Microsoft informou a disponibilidade do .NET Core v2.1.2. Trata-se da nova disponível para desenvolvimento via linha de comando, editor de texto, Visual Studio 2017, Visual Studio Code ou Visual Studio for Mac. O .NET Core é uma versão modular, multiplataforma e open-source do .NET Framework.

O SDK (kit para desenvolvimento de software) mais recente (v2.1.302) e o .NET Core Runtime v2.1.2 para Windows estão disponíveis para download aqui.

Nesta mesma página você poderá encontrar além do o .NET Core e outros downloads para Linux e macOS, instruções para instalação em diferentes distribuições do Linux também estão compartilhadas.

As imagens para download da versão 2.1.2 do .NET Core estão disponíveis no Docker Hub, compatíveis também  para Linux e no Windows Nano Server.

Através do anúncio, a Microsoft destacou que a versão 2.1.2 traz a correção para a vulnerabilidade CVE-2018-8356.

Acessando https://github.com/dotnet/announcements/issues/73, link disponível no GitHub, você poderá encontrar maiores detalhes e informações sobre esta nova versão do .Net Core.

Fontes e Direitos Autorais: Microsoft.com – 10/07/2018 – Server & Tools Blogs > Developer Tools Blogs > .NET Blog

Anúncios

SQL Operations Studio – Public Preview release (0.27.3) – Março 2018


Salve galera, bom dia.

Quinta – feira, véspera de mais um feriado nacional, o mês de março esta se encerrando mas ainda temos tempinho para produzir muito coisa, e falando justamente em produzir a Microsoft como sempre não perde tempo e esta a todo o vapor para liberar logo a versão final do SQL Operations Studio “o futuro substituto” do ótimo Management Studio.

Versão 0.27.3

Segundo o anúncio realizado ontem dia 28/03 através do SQL Server Blog, uma nova versão do SQL Operations Studio torna-se pública, definida como versão 0.27.3.

A Figura 1 abaixo ilustra a interface desta nova versão:
Figura 1 – SQL Operations Studio 0.27.3.

Lançado de maneira pública e ainda em versão preliminar o SQL Operations Studio, esta passando por um período de grande evolução se levarmos em consideração a primeira versão preview apresentada oficial pela Microsoft em 15/11/2017. Esta nova versão é considerada oficialmente como a quarta maior atualização disponibilizada pelas equipes que trabalham em seu desenvolvimento.

Caso você queira saber um pouco mais sobre as versões anteriores, acesse: https://blogs.technet.microsoft.com/dataplatforminsider/2018/02/15/the-february-release-of-sql-operations-studio-is-now-available/

Esta nova versão preview tem como foco melhorias no conjunto de extensões disponíveis para o produto, como também, continuar a abordar os problemas com maior destaque apresentados na plataforma github. Dentre algumas melhorias e correções o gerenciador de extensões e gerenciador do Dashboard foram os principais recursos aprimorados nesta release.

Outros destaques apresentados nesta release são:

  • Aprimoramento no modelo de extensibilidade de gerenciamento de Dashboard oferecerendo maior suporte a informações com guias e painéis de configuração;
  • Extensões de painel de visão para sp_whoisactive existentes no whoisactive.com e um exemplo de relatórios de servidor;
  • Extension Manager permite a aquisição simples de extensões oficiais ou de terceiros;
  • Nova APIs de extensibilidade adicionada para a conexão e gerenciamento de ObjectExplorer; e
  • Suporte a 10 idiomas.

Para maiores informações e acesso a lista completa de atualizações pode ser obtida acessando Release Notes.

Extension Manager

Um dos recursos mais importantes existente tanto no SQL Operations Studio e também no Visual Code, o Gerenciador de extensão facilita a descoberta e a aquisição de funcionalidades adicionais do SQL Operations Studio.

Agora neste nova versão este fantástico recurso acaba de passar por um processo de reformulação, tendo maior capacidade para gerenciar extensões oficiais como também aquelas disponibilizadas pela comunidade.

A Figura 2 ilustra a interface do Extension Manager a partir desta versão:
Figura 2 – SQL Operations Studio – Extension Manager.

Downloads

Dentre as possibilidades para download destaco as seguintes:

Plataforma Link
Windows Setup Installer https://go.microsoft.com/fwlink/?linkid=870837
Windows ZIP https://go.microsoft.com/fwlink/?linkid=870838
macOS ZIP https://go.microsoft.com/fwlink/?linkid=870839
Linux TAR.GZ https://go.microsoft.com/fwlink/?linkid=870840
Linux DEB https://go.microsoft.com/fwlink/?linkid=870842
Linux RPM https://go.microsoft.com/fwlink/?linkid=870841

Maiores informações sobre as novidades do SQL Operations Studio podemo ser obtidas acessando SQL Server Blog.


Fontes e Direitos Autorais: SQL Server Blog – 

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


Muito bom dia…… Salve amantes de banco de dados.

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

No post de hoje, quero compartilhar com você uma das maiores novidades implementadas na última versão do Microsoft SQL Server, neste caso, a versão 2017 lançada oficialmente em outubro de 2017 e muito destacada aqui no meu blog em diversos posts.

Destacando um pouco sobre o post, quando se referimos a banco de dados, normalmente pensamos em uma estrutura organizada basicamente em tabelas, colunas, chaves primárias, chaves estrangeiras e relacionamentos. Mas a partir do Microsoft SQL Server 2017 temos uma nova possibilidade de elaborar uma estrutura de banco de dados saindo um pouco deste tradicional cenário conhecimento como modelo relacional e sim partindo para o chamado modelo grafos ou banco de dados em grafos. Talvez em algum momento você já deve ter ouvido falar um pouco sobre esta forma de modelagem.

Pois bem, neste nova versão o time de engenheiros do SQL Server adicionaram ao conjunto de novas funcionalidades (features) o SQL Graph Databases ou simplesmente Banco de Dados em Grafos, isso mesmo banco de dados no formato de grafos, parece ser algo muito diferente do que estamos acostumados a fazer, na verdade não é bem assim, e você vai poder conhecer um pouco mais sobre este recurso, suas características e curiosidades no decorrer deste post.

Esta curioso em saber um pouco mais sobre esta nova feature? Eu estou, e não vejo a hora de poder dividir com você um pouco do vasto conteúdo relacionado com este recurso. Então, vamos em frente, vou tentar mitigar a sua curiosidade e ao mesmo também satisfazer os meus objetivos. Sendo assim, seja bem vindo ao post – Dica do Mês – Microsoft SQL Server 2017 – SQL Graph Databases.

Você vai se surpreender com este novo recurso e suas possibilidades relacionadas com modelagem de banco de dados.


Introdução

O SQL Graph Database é uma nova forma de se estruturar um banco de dados criado no Microsoft SQL Server 2017, tendo como base um estrutura formada por uma coleção de tabelas de nó (Node Table) e  tabelas de borda (Edge Table).

Basicamente um nó representa uma entidade — por exemplo, uma pessoa ou uma organização e uma borda representa uma relação entre os dois nós que ele conecta. As tabelas de nó ou borda podem ser criadas em qualquer esquema em um banco de dados, mas todas pertencem a uma estrutura de grafos representada de forma lógica.

Os bancos de dados na estrutura de grafos são úteis quando o aplicativo tem relacionamentos complexos de muitos para muitos e precisamos analisar as relações complexas.

Algumas das características importantes de um bancos de dados na estrutura de grafos:

  • Bordas (edge) ou relacionamentos(node) são entidades de primeira classe em um banco de dados de grafos e podem ter atributos ou propriedades associadas a eles;
  • Uma única edge table pode unir flexivelmente vários nós em um banco de dados de grafos;
  • Demonstrar a relação de padrões e consultas de navegação de vários saltos facilmente; e
  • Demonstrar o encerramento transitivo de dados e as consultas polimórficas facilmente.

A Figura 1 abaixo apresenta a estrutura básico do SQL Graph Databases e seus principais componentes:

Architecture of SQL Server 2017 Graph Database
Figura 1 – Estrutura básica do SQL Graph Databases.

Analisando a Figura 1 apresentada acima, podemos dizer que um banco de dados na estrutura de grafos é um tipo de banco de dados cujo conceito é baseado em nós e bordas. Este novo tipo de bancos de dados, denominada de grafos, baseiam-se na teoria dos grafos (um grafo é um diagrama de pontos e linhas conectados aos pontos), respeitando a seguinte estrutura:

  1. Os nós representam dados ou entidade e bordas representam conexões entre nós; e
  2. As bordas são propriedades que podem estar relacionadas a nós, essa capacidade nos permite mostrar interações mais complexas e profundas entre os nossos dados.

Elementos básicos

A seguir destaco os elementos básicos que compõem a estrutura do SQL Graph Databases:

Node Table
Representa uma entidade em um esquema de grafos. Sempre que criamos uma tabela de nós, juntamente com as colunas definidas pelo usuário, uma coluna implícita $node _id é criada, o que identifica exclusivamente um determinado nó no banco de dados.

Os valores na coluna $node _id são gerados automaticamente e são uma combinação de object_id dessa tabela de nós e um valor bigint gerado internamente. No entanto, quando a coluna $node _id é selecionada, um valor calculado na forma de uma cadeia de caracteres JSON é exibido.
Além disso, $Node _id é uma coluna pseudo, que mapeia para um nome interno com String hex nele. Quando selecionamos $node _id da tabela, o nome da coluna aparecerá como $node _id_ hex_string.

É recomendável que os usuários criem uma restrição ou índice exclusivo na coluna $node _id no momento da criação da tabela de nós, mas se um não for criado, um índice padrão exclusivo não clusterizado será criado automaticamente.

Edge Table
Como mencionado anteriormente, uma tabela de borda(Edge Table) representa uma relação em um grafos. As bordas são sempre direcionadas e conectam dois nós.

Uma tabela de borda permite que os usuários modelem relacionamentos muitos-para-muitos no grafos, esta mesma tabela pode ou não ter quaisquer atributos definidos pelo usuário.

$Edge _id
A primeira coluna na tabela de borda representa $Edge _id que identifica exclusivamente uma aresta fornecida no banco de dados. O valor da coluna edge_id é gerado com a combinação de object_id da tabela de borda e um valor bigint gerado internamente.

No entanto, quando selecionamos a coluna $Edge _id, ela é exibida como a seqüência de caracteres JSON que é calculada a partir do valor da coluna.

$from _id
Coluna que armazena o $node _id do nó, de onde a borda é originada. Semelhante ao $Edge _id este é também um pseduo e pode ser usado como $from _id no entanto, o nome da coluna inclui Strings hex nele.

$to _id
Armazena o $node _id do nó, no qual a borda termina. Comportamento desta coluna em também como por $Edge _id e $from coluna _id.

Funções

Existem algumas funções adicionadas a linguagem Transact-SQL, que visam ajudar os usuários a extrair informações das colunas geradas. Abaixo estão as funções:

OBJECT_ID_FROM_NODE_ID: Função que permite extrair o object_id de um node_id. Precisamos passar node_id para esta função e ele retornará o object_id, também podemos obter o nome do objeto do object_id.

GRAPH_ID_FROM_NODE_ID: Função que permite extrair o GRAPH_ID de um node_id. Precisamos passar node_id para esta função e ele retornará o object_id.

NODE_ID_FROM_PARTS: Através desta função podemos construir um node_id de um object_id e um graph_id.

OBJECT_ID_FROM_EDGE_ID: Função utilizada para extrair um object_id de um EDGE_ID.

GRAPH_ID_FROM_EDGE_ID: Função utilizada para identificar um GRAPH_ID de EDGE_ID.

EDGE_ID_FROM_PARTS: Função que nos permite identificar o id utilizada entre as conexões de EDGE_ID de object_id e identidade.

Tabelas de Sistemas e Metadados

Sys.Tables – Novas colunas foram adicionadas ao sys.tables para identificar se uma tabela é um nó ou uma borda, conforme apresenta a Tabela 1 abaixo:

Column Name Data Type Description
is_node bit 1 = this is a node table
is_edge bit 1 = this is an edge table

Tabela 1 – Novas colunas adicionadas a system table sys.tables.

Sys.Columns – Novas colunas foram adicionadas ao sys.tables para indicar o tipo da coluna em tabelas de nó e borda, permitindo o relacionamento entre as systems tables sys.columns e sys.tables. A Tabela 2 abaixo apresenta a relação de novas colunas adicionadas a sys.columns:

Column Name Data Type Description
graph_type int Internal column with a set of values.

The values are between 1-8 for graph columns and NULL for others:

1 – GRAPH_ID
2 – GRAPH_ID_COMPUTED
3 – GRAPH_FROM_ID
4 – GRAPH_FROM_OBJ_ID
5 – GRAPH_FROM_ID_COMPUTED
6 – GRAPH_TO_ID
7 – GRAPH_TO_OBJ_ID
8 – GRAPH_TO_ID_COMPUTED

graph_type_desc nvarchar(60) internal column with a set of values

Tabela 2 – Novas colunas adicionadas a system table sys.columns.

Nossa, quanta coisa nova foi adicionado ao Microsoft SQL Server a partir desta nova funcionalidades, como também, diversas mudanças internadas como de costume também foram realizadas no produto afim de possibilitar o uso destas e outras funcionalidades, algo comumente realizado a cada nova versão.

Vamos então conhecer de forma prática o SQL Graph Databases e entender como estes elementos podem ser utilizados através do cenário que estaremos implementando a partir de agora.

Implementando o SQL Graph Databases

Se estamos nos referindo ao um banco de dados de grafos, nada melhor do que representar a estrutura que será utilizada em nosso cenário de exemplo através de um Diagrama conforme ilustra a Figura 2 abaixo:

Figura 2 – Diagrama – Estrutura utilizada para o exemplo.

Os nós são SQL Server, Azure e Windows e segue (bordas) fornecem conexões entre nós. Este modelo de banco de dados não pode ser tratado como uma alternativa a um modelo de banco de dados relacional, mas confrontados com alguns problemas específicos, o modelo de banco de dados em grafos pode ser alternativo e efetivo.

Observações: Se você olhar para o diagrama de perto, talvez você pode projetar este modelo de dados em um banco de dados relacional por junções, mas imagine que se você tiver um monte de nós e bordas, em seguida, quantas junções você vai precisar? Outra consideração importante se relaciona na forma de como este projeto funcionaria? Por esta razão, ao lidar com alguns problemas de negócios, precisamos de um banco de dados representado na teoria de grafos.

Um cenário muito interessante para a adoção de um banco de dados em grafos a ser considerado são meios de comunicação social. Por exemplo, há um monte de ações sociais, cada ação social cria uma marca. Quando combinamos estas marcas, parece uma teia de aranha. O modelo de banco de dados em grafos é ideal para armazenar esse tipo de dados.

Criando o ambiente

Para nossa prática vamos trabalhar com o seguinte ambiente:

  • Database – SQLGraphDatabase;
  • Node Table – Products; e
  • Edge Table – Microsoft.

Vamos começar criando nosso banco de dados e a node table através do Bloco de Código 1 apresentado na sequência:

— Bloco de Código 1 – Criando Banco de Dados e Node Table —

— Criando o Banco de Dados —
Create Database SQLGraphDatabases
Go

— Acessando o Banco de Dados —
Use SQLGraphDatabases
Go

— Criando a Node Table Products —
Create Table Products
(ProductID TinyInt Primary Key,
ProductName Varchar(100)
) As Node
Go

Note que instrução Create Table especificamos ao final da mesma a palavra chave Node, desta forma, o Microsoft SQL Server vai entender que nossa tabela será um nó e posteriormente estará relacionada com no mínimo uma borda.

O próximo passo é realizar a inserção de dados na tabela Products, para isso vamos utilizar o Bloco de Código 2 apresentado a seguir:

— Bloco de Código 2 – Inserindo dados na Node Table Products —

— Inserindo dados na Node Table Products —
Insert Into Products
Values (1,’SQL Server’),
(2,’Azure’),
(3,’Windows’)
Go

— Consultando os dados —
Select ProductId, ProductName from Products
Go

Você poderá notar que após a execução do comando Select teremos o resultado das três linhas de registros lógicos adicionadas a node table Products apresentados em tela, para que seja possível apresentar toda estrutura da tabela incluindo o $Node_Id, vamos então utilizar um simples e conhecido Select * (técnica não recomendável, mas para este cenário será útil para apresentar de maneira rápida a estrutura da node table Products).

— Apresentando toda estrutura da node table Products e seus respectivos dados —

Select * From Products
Go

A Figura 3 abaixo ilustra o retorno dos dados obtidos após a execução do Select acima:

Figura 3 – Estrutura da node table Products, incluindo $Node_ID e dados.

Continuando a nossa caminhada, vamos agora criar nossa tabela borda (edge table) denominada Microsoft, sendo esta o elemento utilizado para estabelecer as ligações entre os dados da node table para com a edge table, desta forma utilizaremos o Bloco de Código 3 apresentado a seguir:

— Bloco de Código 3 – Criando a Edge Table Microsoft —

— Criando a Edge Table Microsoft —
Create Table Microsoft As Edge
Go

— Consultando a estrutura da Edge Table Microsoft —
Select * from Microsoft
Go

Pronto nossa tabela borda esta criada, nosso penúltimo passo será adicionar os dados oriundos da node table Products, estabelecem assim as relações entre ambos os elementos, para tal procedimentos utilizaremos o Bloco de Código 4 apresentado a seguir:

— Bloco de Código 4 – Inserindo os dados na Edge Table Microsoft —

— Azure com SQL Server —
Insert Into Microsoft ($from_id , $to_id )
Values ((Select $node_id from Products where ProductId=2),
(Select $node_id from Products where ProductId=1))
Go

— Windows com SQL Server —
Insert Into Microsoft ($from_id ,$to_id )
Values ((Select $node_id from Products where ProductId=3),
(Select $node_id from Products where ProductId=1))
Go

— Windows com Azure —
Insert Into Microsoft ($from_id ,$to_id )
Values ((Select $node_id from Products where ProductId=3),
(Select $node_id from Products where ProductId=2))
Go

— Consultando os dados inseridos na Edge Table Microsoft —
Select * from Microsoft
Go

Muito bom, acabamos de estabelecer as ligações entre nossa node table e a edge table, note que para realizar este vinculo entre os dados oriundas da node table Products para a edge table Microsoft, utilizamos os valores da coluna ProductID existente na tabela de Products, como elemente chave a ser inserido nas colunas $from_id e $to_id no momento da criação da edge table Microsoft.

Figura 4 a seguir ilustra os dados inseridos na edge table Microsoft e apresentados no formato de string JSON:

Figura 4 – Dados inseridos na edge Table Microsoft.

Agora falta muito pouco e chegamos ao último passo que consiste justamente em identificar as conexões estabelecidas com base no Bloco de Código 4 processado anteriormente, onde através da nova função Match() em conjunto com seus operadores ‘-‘ ou ‘->’ podemos definir o caminho para encontrar os dados respeitando a estrutura de nós e bordas. Para tal procedimento executaremos o Bloco de Código 5 apresentado abaixo:

— Bloco de Código 5 – Identificando as conexões entre os dados —

— Utilizando a função Match(), encontrando as conexões do ProductName = Azure —
Select Concat(Products.ProductName,’ –> ‘, ProductsDetails.ProductName) As Connections
From Products, Microsoft, Products ProductsDetails
Where Match(Products-(Microsoft)->ProductsDetails)
And Products.ProductName = ‘Azure’
Go

— Utilizando a função Match(), encontrando as conexões do ProductName = Windows —
Select Concat(Products.ProductName,’ –> ‘, ProductsDetails.ProductName) As Connections
From Products, Microsoft, Products ProductsDetails
Where Match(Products-(Microsoft)->ProductsDetails)
And Products.ProductName = ‘Windows’
Go

Após a execução do Bloco de Código 5 apresentado anteriormente o Management Studio deverá retornar um resultado similar ao apresentado pela Figura 5 abaixo:

Figura 5 – Conexões de dados estabelecidas com base nas colunas $from_id  e $to_id.

Incrível, chegamos ao final de mais um post da sessão Dica do Mês, tenho a certeza que você gostou do conteúdo apresentado hoje neste post.

Vale ressaltar que alguns pontos não foram abordados neste post, dentre eles como utilizar um índice clusterizado ou não clusterizado, como também, a maneira que uma Node Table e Edge Table são apresentadas na estrutura de um banco de dados através do Management Studio.

No que diz respeito ao novo modelo de banco de dados, tenha a certeza que a minha missão foi cumprida, principalmente no entendimento de como esta uma nova forma de representação baseada em grafos poderá nos ajudar a estabelecer uma nova técnica de relacionamento entre nossas tabelas e seus respectivos dados, indo muito além dos tradicionais conceitos dentre eles: chaves primárias e estrangeiras, caminhando para uma nova proposta com base no conceito de relacionamento lógico de dados.

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/graphs/sql-graph-sample

https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-architecture

https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-overview

https://www.red-gate.com/simple-talk/sql/sql-development/sql-server-graph-databases-part-1-introduction/

https://www.sqlshack.com/implement-graph-database-sql-server-2017/

https://www.mssqltips.com/sqlservertip/4883/sql-server-2017-graph-database-example/

 

Posts Anteriores

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

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

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

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

Conclusão

Neste post, conhecemos um pouco sobre este novo recursos SQL Graph Databases implementado a partir da versão 2017 do Microsoft SQL Server.

O SQL Server Graph é um recurso fantástico que nos permite implementar dentro da mesma estrutura de banco de dados existente no Microsoft SQL Server dois modelos de relacionamento de dados totalmente diferentes.  Através desta arquitetura híbrida temos a capacidade de utilizar recursos do mecanismo do SQL Server com um banco de dados na estrutura de grafos de maneira muito similar para não se dizer parecida com os recursos aplicados no modelo relacional, com base, na linguagem Transact-SQL nos dando todo suporte a consultas para este novo formato.

O banco de dados baseados na estrutura de grafos (SQL Graph Databases) apresentam como toda nova tecnologia algumas limitações técnicas neste momento, que tendem nas próximas versões do produto evoluírem ou até mesmo deixar de existir, algo que neste momento não podem ser consideradas limitações que impossibilitem a sua adoção ou uso em novos projetos de bancos de dados, como também, não se tornem  limitações a outros recursos excepcionais no existentes no Microsoft SQL Server 2017, mesmo assim podemos reconhecer que este novo modelo de banco de dados, pode ser considerada uma tecnologia convincente e promissora.

Agradecimentos

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

Um forte abraço, nos encontramos no próximo post a ser publicado no mês de abril.

Viva o Microsoft SQL Server 2017 e suas novas funcionalidades…

Um forte abraço, sucesso e até o próximo post.

Short Scripts – Fevereiro 2018 – Transaction Log


Olá, bom dia, mais uma semana começando….

E você já esta aqui acessando o meu blog, 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 32 posts, sendo estes 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.

Mas como este é o primeiro post desta sessão em 2018, farei algo um pouco diferente, você terá uma pequena surpresa.

Desejo que o conteúdo aqui compartilhado possa lhe ser útil, como também sirvo de referência e sugestões para novas formar de resolução de problemas e aprendizado.

Vamos então conhecer um pouco mais sobre este novo post….

O post de hoje

Como já destacado no início do post, ao invés de compartilhar os últimos scripts adicionados a  minha biblioteca, quero dividir com você um conteúdo dedicado especificamente a um assunto muito importante quando nos referimos ao Microsoft SQL Server, mais especificamente ao Transaction Log (Log de Transações), funcionalidade presente em todos os bancos de dados criados em qualquer versão e edição do SQL Server.

E ai que você achou desta surpresa, gostou? Eu gostei, não é fácil você conseguir encontrar em um único local um conteúdo focado exclusivamente a este assunto tão importante, que muitos profissionais que trabalham com banco de dados até hoje não conseguem entender o conceito e forma de atuação do Transaction-Log.

Seguindo em frente, a seguir apresento os códigos e exemplos selecionados para o Short Script – Fevereiro 2018 – Transaction Log. 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.

Short Scripts

Fique a vontade para compartilhar, comentar e melhorar cada um destes códigos:

— Short Script 1 – Log Record —

— Altera o Recovery Model para SIMPLE
ALTER DATABASE AdventureWorks2016
SET RECOVERY SIMPLE
Go

— Truncar o Transaction Log —
CHECKPOINT
Go

— Conteúdo do log – todas as colunas —
USE AdventureWorks2016
Select * from ::fn_dblog(null, null)
Go

–update
Begin Transaction

UPDATE dbo.Pessoa
SET nome = ‘XUXA’
Where ID=3

Rollback
Go

— Conteúdo armazenado no Log File —
Select [Current LSN],
Operation,
Context,
[Transaction ID],
[Log Record Length],
[Previous LSN],
AllocUnitName,
[Page ID],
[Slot ID],
[Checkpoint Begin],
[Checkpoint End],
[Minimum LSN],
SPID,
[Begin Time],
[Transaction Name],
[Parent Transaction ID],
[Lock Information],
Description,
[RowLog Contents 0],
[RowLog Contents 1],
[Log Record]
From ::fn_dblog(null, null)
Go

— DBCC SQLPERF —
DBCC SQLPERF(LOGSPACE)
Go

— Short Script 2 – CheckPoint —

— Criando a Base de Dados —
CREATE DATABASE DemoCheckpoint
ON PRIMARY
(NAME = ‘DemoCheckpoint_data’,
FILENAME = ‘D:\MSSQL\DemoCheckpoint_data.mdf’)
LOG ON
(Name = ‘DemoCheckpoint_Log’,
FILENAME = ‘D:\MSSQL\DemoCheckpoint_log.ldf’,
SIZE = 100MB,
FILEGROWTH = 10MB)
GO

— Alterando o Recovery Model —
ALTER DATABASE DemoCheckpoint
SET RECOVERY SIMPLE
Go

— Criando a Tabela Teste —
USE DemoCheckpoint
GO

CREATE TABLE Teste
(C1 varchar(50) NOT NULL,
C2 varchar(50) NOT NULL)
GO

— Forçando o Checkpoint —
CHECKPOINT
Go

— Abrir o Perfmon com os contadores

— em outra sessão
USE DemoCheckpoint
GO

WHILE 1=1
BEGIN

INSERT INTO dbo.teste
VALUES (‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’)
END

— Short Script 3 – Log Chain Simple —

— Iniciar nova sessão do Perfmon —
SELECT name, recovery_model_desc
FROM sys.databases
WHERE name = ‘AdventureWorks2016’
Go

— Alterar Recovery Model para Simple —
ALTER DATABASE AdventureWorks2016
SET RECOVERY SIMPLE
Go

— Abrir nova Query —
USE AdventureWorks2016
Go

WHILE 1=1
BEGIN
INSERT INTO dbo.pessoa
VALUES (‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’)
END

— Alterar Recovery Model para Full —
ALTER DATABASE AdventureWorks2016
SET RECOVERY FULL
GO

— Realizar Backup Database —
BACKUP DATABASE AdventureWorks2016
TO DISK = ‘d:\backupcompress.bak’
WITH COMPRESSION,
DIFFERENTIAL
GO

— Short Script 4 – DBCC LogInfo —

— Criando uma nova base de dados —
CREATE DATABASE TestDB
ON PRIMARY
(NAME = ‘TestDB_data’,
FILENAME = ‘D:\MSSQL\TestDB_data.mdf’)
LOG ON
(Name = ‘TestDB_Log’,
FILENAME = ‘D:\MSSQL\TestDB_log.ldf’,
SIZE = 10MB,
FILEGROWTH = 10MB)
GO

— Obtendo informações sobre a base de dados —
DBCC LOGINFO(TestDB)
Go

–Forçando o crescimento do Transact-Log manualmente em 20MB —
ALTER DATABASE TestDB
MODIFY FILE
(NAME = ‘TestDB_Log’,
SIZE = 20MB);
GO

— Obtendo informações sobre a base de dados —
DBCC LOGINFO(TestDB)
Go

— Short Script 5 – Natureza Circular —

— Alterando Recovery Model FULL —
ALTER DATABASE TestDB
SET RECOVERY FULL;
Go

— Realizando Backup Database —
BACKUP DATABASE TestDB
TO DISK = ‘D:\TestDB.bak’
Go

— Forçando o encolhimento do Transaction – Log —
DBCC LOGINFO(TestDB)
Go

BACKUP LOG TestDB
TO DISK = ‘bkplogTestDB.trn’
Go

USE TestDB
Go

DBCC SHRINKFILE (TestDB_Log,1)
Go

DBCC LOGINFO(TestDB)
Go

— Criando uma nova Tabela —
USE TestDB
GO

CREATE TABLE dbo.pessoa
(ID int identity PRIMARY KEY NOT NULL,
Nome varchar(50) NOT NULL,
Sobrenome varchar(50) NOT NULL,
Nascimento date NOT NULL,
Cargo varchar(50))
GO

— Abrir nova query —
USE TestDB
GO

WHILE 1=1
BEGIN
INSERT INTO dbo.pessoa
VALUES (‘Junior’, ‘Galvão’, ‘19800428’, ‘Database Administrator’)
END

— Monitorar o crescimento do log em tempo de execução —
DBCC LOGINFO(TestDB)

CHECKPOINT

SELECT name,
Log_reuse_wait_desc
FROM sys.databases
WHERE name = ‘TestDB’
Go

— Realizar Backup do Arquivo de Log —
BACKUP LOG TestDB TO DISK = ‘d:\log.trn’
Go

— Alterando Recovery Model para Full
ALTER DATABASE AdventureWorks2016
SET RECOVERY FULL
Go

— Realizando novo Backup Database —
BACKUP DATABASE AdventureWorks2016
TO DISK = ‘d:\backup.bak’
WITH COMPRESSION
Go

— Short Script 6 – Backup and Transaction Log —

— Preparando a base – 1m10s se não preparada na demo 5
ALTER DATABASE AdventureWorks2016 SET RECOVERY FULL
GO
BACKUP DATABASE AdventureWorks2016 TO DISK = ‘d:\backup.bak’ WITH COMPRESSION
GO

— Realizando Backup do Arquivo de Log —
BACKUP LOG AdventureWorks2016
TO DISK = ‘bkplog.trn’
Go

— Obtendo informações sobre o Log —
DBCC LOGINFO(AdventureWorks2016)
Go

— Encolhendo o Transaction Log —
USE AdventureWorks2016
Go

DBCC SHRINKFILE (AdventureWorks2016_Log,1)
Go

— Obtendo informações sobre o Log —
DBCC LOGINFO(AdventureWorks2016)
Go

— Ajustando o tamanho do Transaction Log —
USE AdventureWorks2016
Go

— Encolhendo o Transaction Log —
DBCC SHRINKFILE (AdventureWorks2016_Log,1)
Go

— Obtendo informações sobre o Log —
DBCC LOGINFO(AdventureWorks2016)
Go

— Modificando o arquivo de Log —
ALTER DATABASE AdventureWorks2016
MODIFY FILE
(NAME = AdventureWorks2016_Log,
SIZE = 4MB)
Go

— Encolhendo o Transaction Log —
DBCC LOGINFO(AdventureWorks2016)

— Abrir nova query —
BACKUP DATABASE AdventureWorks2016
TO DISK = ‘d:\backup.bak’
Go

— Abrir nova query —
USE AdventureWorks2016
GO

WHILE 1=1
BEGIN
INSERT INTO dbo.pessoa
VALUES (‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’),
(‘bbbbbbbbbbbbbbbbbbbb’, ‘bbbbbbbbbbbbbbb’)
END
Go

— Forçando o Truncate do Log —
BACKUP LOG AdventureWorks2016
TO DISK = ‘bkplog.trn’
Go

— Obtedo informações do arquivo de log —
DBCC LOGINFO(AdventureWorks2016)
CHECKPOINT
SELECT name,
log_reuse_wait_desc
FROM sys.databases
WHERE name = ‘AdventureWorks2016’
Go

— Ajustando o tamanho do TLog
USE AdventureWorks2016
GO

DBCC SHRINKFILE (AdventureWorks2016_Log,1)
GO

DBCC LOGINFO(AdventureWorks2016)
Go

— Short Script 7 – File Growth —

— Habilitando Trace Flags para evidênciar mudanças no Log —
DBCC TRACEON (3004, 3605, -1);
Go

— Limpar o log do SQL Server —
sp_cycle_errorlog
Go

— Criar uma nova Base de Dados —
CREATE DATABASE TransactionLog
ON PRIMARY
(NAME = ‘TransactionLog_data’,
FILENAME = ‘D:\MSSQLSERVER\DATA\TransactionLog_data.mdf’,
SIZE = 10240MB)
LOG ON
(Name = ‘TransactionLog_Log’,
FILENAME = ‘D:\MSSQLSERVER\DATA\TransactionLog_log.ldf’,
SIZE = 1024MB,
FILEGROWTH = 1024MB)
GO

— Identificar o tempo decorrido para processamento relacionado somente ao Log —
xp_readerrorlog
Go

— Desabilitando Trace Flags —
DBCC TRACEOFF (3004, 3605, -1);
Go

— Short Script 8 – Open Transaction in Tracking —

— Identificando as Transações abertas e seu respectivo consumo do Transaction Log —
SELECT
[s_tst].[session_id],
[s_es].[login_name] AS [Login Name],
DB_NAME (s_tdt.database_id) AS [Database],
[s_tdt].[database_transaction_begin_time] AS [Begin Time],
[s_tdt].[database_transaction_log_bytes_used] AS [Log Bytes],
[s_tdt].[database_transaction_log_bytes_reserved] AS [Log Rsvd],
[s_est].text AS [Last T-SQL Text],
[s_eqp].[query_plan] AS [Last Plan]
FROM sys.dm_tran_database_transactions [s_tdt] Inner JOIN sys.dm_tran_session_transactions [s_tst]
ON [s_tst].[transaction_id] = [s_tdt].[transaction_id]
Inner JOIN sys.[dm_exec_sessions] [s_es]
ON [s_es].[session_id] = [s_tst].[session_id]
Inner JOIN sys.dm_exec_connections [s_ec]
ON [s_ec].[session_id] = [s_tst].[session_id]
LEFT OUTER JOIN sys.dm_exec_requests [s_er]
ON [s_er].[session_id] = [s_tst].[session_id]
CROSS APPLY sys.dm_exec_sql_text ([s_ec].[most_recent_sql_handle]) AS [s_est]
OUTER APPLY sys.dm_exec_query_plan ([s_er].[plan_handle]) AS [s_eqp]
ORDER BY [Begin Time] ASC;
Go

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

Quero agradecer ao amigo Luiz Mercante que colaborou com a criação e uso destes scripts em algumas palestras realizadas nos últimos anos no evento SQL Saturday.


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/2017/12/09/short-scripts-dezembro-2017/

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

https://pedrogalvaojunior.wordpress.com/2017/06/08/short-scripts-junho-2017/

https://pedrogalvaojunior.wordpress.com/2017/03/31/short-scripts-marco-2017/

Agradecimento

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

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

Sucesso….

Microsoft adquire PlayFab, fornecedora de serviços de backend para jogos em na nuvem


No final do mês de janeiro a Microsoft realizou a compra e aquisição da empresa PlayFab,  fornecedora de plataforma de serviços backend para construir, desenvolver e lançar jogos conectados à nuvem, conforme anúncio feito por Kareem Choudhry.

Como Satya Nadella, nosso CEO, observou na reunião anual de acionistas: “Estamos nos mobilizando para seguir nossa ampla oportunidade em um mercado de mais de 100 bilhões de jogos. Isso significa ampliar nossa abordagem sobre como pensamos os jogos de ponta a ponta, como começá-los e a maneira que estão sendo criados e distribuídos, e como são jogados e visualizados.”

Mais de 1 bilhão de pessoas jogam videogame, alimentando uma indústria próspera cujo ecossistema está evoluindo e crescendo rapidamente. Muitos setores estão mudando para a nuvem inteligente, e essa tendência é verdadeira também na área de jogos. Isso significa que um número crescente de desenvolvedores procura criar jogos conectados para dispositivos móveis, PCs e consoles, que tenham ênfase nas operações pós-lançamento. No entanto, o custo e a complexidade de alcançar esse resultado por meio de ferramentas e tecnologias personalizadas do servidor são altas, e a PlayFab oferece aos desenvolvedores um modelo atraente que varia naturalmente com os jogadores de seus games.

Os serviços de backend da PlayFab reduzem as barreiras do lançamento para os desenvolvedores de jogos, oferecendo soluções de desenvolvimento com bom custo-benefício para estúdios grandes e pequenos, que escalam seus jogos e os ajudam a engajar, reter e rentabilizar os jogadores. A PlayFab permite que os desenvolvedores usem a nuvem inteligente para criar e operar jogos, analisar dados e melhorar as experiências gerais dos títulos.

A plataforma PlayFab é um complemento natural do Azure para jogos (Visite azure.com/gaming para mais informações). O Azure, disponível localmente em 42 regiões em todo o mundo, fornece infraestrutura de servidores de primeira linha, permitindo que os criadores se concentrem na construção de ótimos jogos com alcance global. Para os jogadores, isso leva a um grau de inovação mais alto e rápido, além de melhores experiências.

Incorporar a experiência da PlayFab, a crescente rede de desenvolvedores de jogos e a poderosa plataforma de jogo como serviço em nossa oferta de produtos é um passo importante para os jogos na Microsoft. A PlayFab atendeu mais de 700 milhões de jogadores e atualmente abriga mais de 1.200 jogos de empresas como Disney, Rovio e Atari. Sua plataforma de jogos inclui alguns dos títulos mais proeminentes do setor, como “Idle Miner Tycoon”, “Angry Birds: Seasons” e “Roller Coaster Tycoon Touch”.

Juntos, o Azure e a PlayFab vão liberar ainda mais o poder da nuvem inteligente para o setor de jogos, permitindo que os desenvolvedores e gamers apreciem em todo o mundo.”

As ferramentas da PlayFab são projetadas para ser usadas por desenvolvedores de jogos em todas as plataformas (móveis, PC e console). Essa aquisição amplia os investimentos e o trabalho que fizemos no Microsoft Azure para fornecer uma plataforma de nuvem de primeira linha para o setor de jogos.

Microsoft anuncia a compra da PlayFabPara mais informações sobre a PlayFab, acesse um post no blog de James Gwertzman, CEO e co-fundador.

Fontes e Direitos Autorais: 

Microsoft Visual Studio 2017 v15.6 Preview 2 e Visual Studio for Mac Version 7.4 Preview disponíveis


A Microsoft anunciou a disponibilidade do Visual Studio 2017 v15.6 Preview 2. A versão Preview 1 original foi disponibilizada no dia 7 de dezembro de 2017.

De acordo com o changelog publicado aqui pela Microsoft, o Visual Studio 2017 v15.6 Preview 2 traz correções para múltiplos bugs, opções de depuração agora estão disponíveis para Embedded ARM GCC.

Esta nova versão Preview também traz uma extensa lista de melhorias no suporte para Visual C++, o instalador do Visual Studio foi melhorado e agora quando você instalá-lo pela primeira vez ou atualizá-lo via Web você verá um processo de instalação mais transparente:

Microsoft Visual Studio 2017 v15.6 Preview 2

O Preview 2 também inclui o suporte parta navegação por fontes descompiladas. Habilite isto acessando Tools > Options > Text Editor > C# > Advanced > Enable navigation to decompiled sources:

A lista completa com todas as novidades nesta versão Preview pode ser vista no link acima.

Desenvolvedores interessados podem fazer o download do Visual Studio 2017 v15.6 Preview 2 aqui ou podem utilizar o link fornecido na página com o changelog.

Fontes e Direitos Autorais: The Visual Studio Blog – 10/01/2018.

Microsoft abre inscrições para o maratona bots


A Microsoft abriu as inscrições para o Maratona Bots, um curso de capacitação online e gratuito destinado a programadores que querem aprender como criar chatbots, robôs que conversam via chat utilizando recursos de Inteligência Artificial.

O curso terá quatro semanas de duração e os conteúdos didáticos serão liberados semanalmente. O primeiro módulo estará disponível a partir de segunda-feira, dia 15 de janeiro.

Após o término das aulas, os participantes terão até o dia 26 de março para desenvolverem um bot atendendo aos critérios da organização do curso. Os projetos serão avaliados por um time de especialistas da Microsoft. O objetivo é fomentar a criatividade e o aprimoramento técnico dos participantes em serviços de Inteligência Artificial disponíveis na nuvem.

A maratona também fará uma breve introdução aos conceitos de machine learning e Inteligência Artificial, que podem auxiliar na construção de aplicativos de diferentes tipos. São conhecimentos que ajudam a formar um profissional capaz de fazer frente às demandas atuais das empresas interessadas em promover a transformação digital.

Microsoft abre inscrições para o Maratona Bots

O público-alvo principal do curso são os desenvolvedores de software. Profissionais de áreas relacionadas que tenham conhecimento básico de programação e desejam entender melhor a aplicabilidade da tecnologia nos negócios também podem participar.

Além das aulas de vídeo online, o curso terá materiais de apoio em formato PDF e laboratórios práticos. Durante o período de aulas, os participantes poderão tirar suas dúvidas com instrutores que estarão on-line. Depois do encerramento, o conteúdo das aulas continuará disponível na plataforma on-line.

Desenvolvedores e demais interessados podem se inscrever aqui.

Fontes e Direitos autorais: Microsoft News Center Brasil – 10/01/2018.

Microsoft inicia teste com Visual Studio 2017 v15.6 Preview


Agora que a versão 15.5 do Visual Studio 2017 está disponível oficialmente, a Microsoft já iniciou os testes da próxima atualização com o Visual Studio 2017 v15.6 Preview.

O Visual Studio 2017 foi lançado em 7 de março pela empresa.

Novidades no Visual Studio 2017 v15.6 Preview

De acordo com o anúncio publicado pela Microsoft no blog do Visual Studio, o Visual Studio 2017 v15.6 Preview traz melhorias com foco na produtividade, novos recursos e outras novidades.

Nesta versão Preview a ferramenta CPU Usage agora destaca a linha de código com base no uso de CPU. Com isso ficou mais fácil determinar quais linhas são responsáveis por um aumento repentino no uso de CPU, por exemplo:

Microsoft Visual Studio 2017 v15.6 Preview
Nesta versão Preview a ferramenta CPU Usage agora destaca a linha de código com base no uso de CPU. Com isso ficou mais fácil determinar quais linhas são responsáveis por um aumento repentino no uso de CPU, por exemplo

Com o Visual Studio 2017 v15.6 Preview agora você pode criar projetos CMake. Esta versão também adiciona suporte para o Android NDK r15c:

O Team Explorer recebeu melhorias na funcionalidade Git tags e o IntelliSense para Python não requer mais um banco de dados para conclusão.

A lista com todas as novidades nesta versão pode ser vista no post com o anúncio da Microsoft.

Desenvolvedores interessados podem fazer o download do Visual Studio 2017 v15.6 Preview aqui.

Fontes e Direitos Autorais: The Visual Studio Blog – 07/12/2017 –https://blogs.msdn.microsoft.com/visualstudio/2017/12/07/visual-studio-2017-version-15-6-preview/

Microsoft SQL Server 2016 e String_Split(), agora ficou fácil dividir uma string.


Fala galera, boa tarde, segunda – feira, eita dia complicado, começo de semana é tenso, pois saber que mais um final de semana passou voando é triste. Vamos em frente e pensar que mais um final de semana está chegando, é bem melhor.

Seguindo a onda de informações, anúncios, posts, entre outras formas de divulgação sobre o Microsoft SQL Server 2016, hoje vou destacar mais um pouco no meu blog sobre esta nova versão e destacar mais uma das suas novidades, estou me referindo a nova Table Value Function String_Split(). Algo que realmente era muito pedido pelos desenvolvedores e que a Microsoft demorou um pouco para reconhecer a sua importância, mas na versão 2016 ela está presente e será muito útil.

 

A String_Split()

Pode-se dizer que é uma daquelas funções desejadas por todos os profissionais que trabalham com desenvolvimento e necessitam em algum momento realizar o chamado split de uma string. Se você não sabe ou conhece este termo, split pode ser entendido como fatiar, dividir, cortar, quebrar em pedaços.

Fazendo uma analogia, a string_split() vai fazer exatamente isso com uma string, transformando a mesma em pequenas outras strings (substrings ou partes de uma string).

Funcionalidade ou capacidade considerado por muitos como algo realmente complexo se der feito por um SGBD – Sistema Gerenciador de Banco de Dados, ainda mais para o SQL Server se pensarmos que até a versão 2014 tínhamos a necessidade de customizar este tipo de necessidade.

Mas que para nossa alegria a Microsoft introduziu este recurso na versão RC0 sinal que provavelmente e o que tudo indica a mesma vai fazer parte da versão final do SQL Server 2016.

 

Compatibilidade

Por se tratar de uma nova funcionalidade, até o presente momento a documentação oficial da Microsoft indica que esta função é compatível com a versões:

  • Microsoft SQL Server 2016; e
  • Azure Database.

As versões Azure SQL Data Warehouse e Parallel Data Warehouse até o momento não estão na lista de produtos compatíveis com a esta nova função.

Observação: Um detalhe muito importante é a necessidade do nível de compatibilidade do banco de dados estar definido na versão 130, sendo este o nível do SQL Server 2016.

 

Sua importância. O porquê ela pode ajudar

A String_Split() vem para preencher uma lacuna muito grande deixada pelo tipo de desenvolvimento e engenheiros da Microsoft desde a versão 2008 e 2012, onde novas funções para se trabalhar com string foram adicionadas no produto.

Sua importância vai muito além da capacidade técnica de permitir que uma string seja dividida em pequenas partes e posteriormente armazenada em uma tabela, variável ou função, ela vai com certeza flexibilidade e facilitar em muito a maneira com que os dados podem ser tratados e reconhecidos pelo SQL Server o que poderá permitir a criação de novos padrões de reconhecimento de caracteres.

Uma das grandes vantagens de se utilizar a String_Split() está relacionada com a uma simples sintaxe, onde requer basicamente dois parâmetros.

 

Como utilizar a String_Split()

Criada para ser utilizada de maneira rápida e simples, a String_split é composta pode dois parâmetros string compatíveis com os tipos de dados: (nvarcharvarcharnchar ou char) para a string que desejamos supostamente dividir em conjunto com o caractere reconhecido como “divisor” ou “separador”, que também deve ser informado em um tipo de string compatível com os tipos de dados: nvarchar(1)varchar(1)nchar(1) ou char(1)).

Outra característica muito interessante desta função é a maneira que os dados são apresentados e retornados para usuário, onde podemos ter o retorno do split da string em uma coluna com diversas linhas representando os fragmentos “pedaços” ou “partes” da string, como também um valor caractere no tipo de dados nchar ou nvarchar de acordo com o tipo de dado utilizado, respeitando o tamanho do dado identificado no momento da fragmentação da string. Caso não seja reconhecido o tipo de dados original da string, o resultado da sua fragmentação será retornado com o tipo de dados varchar.

Exemplos

A seguir você vai poder encontrar alguns exemplos de como podemos fazer uso da função String_Split(). Vale ressaltar que esta função se encontra disponível a partir da versão RC0, requerendo a configuração o nível de compatibilidade para o número 130.

Alguns dos exemplos apresentados aqui foram elaborados e executados no banco de dados de exemplo AdventureWorks2016 CTP3, caso venha tenha interesse em realizar o download desta sample database, utilize o link: https://www.microsoft.com/en-us/download/details.aspx?id=49502

Outro detalhe importante a ser destacado é o resultado apresentado para cada exemplo ilustrado a seguir, por padrão o SQL Server gera uma coluna chamada value contendo a lista de valores fragmentados após o processo de split da string.

 

 

— Exemplo 1 – Separando de forma simples uma string –

SELECT *

FROM STRING_SPLIT(‘Junior,Galvão,MVP,SQL Server’,’,’)

Go

 

Resultado

value
Junior
Galvão
MVP
SQL Server

 

— Exemplo 2 – Fazendo uso de variáveis como parâmetros de entrada de valores –

DECLARE @string VARCHAR(100) = ‘Microsoft,SQL Server,2016,RC0′,

@separador CHAR(1) =’,’

 

SELECT *

FROM STRING_SPLIT(@string,@separador)

Go

 

Resultado

value
Microsoft
SQL Server
2016
RC0

 

— Exemplo 3 – Armazenando o resultado da divisão de uma string em uma nova tabela –

DECLARE @string VARCHAR(100) = ‘Microsoft,SQL Server,2016,RC0′,

@separador CHAR(1) =’,’

 

SELECT * INTO #SplitTable

FROM STRING_SPLIT(@string,@separador)

GO

 

— Visualizando a estrutura da tabela —

sp_Columns #SplitTable

Go

 

— Consultando os dados da tabela —

Select * from #SplitTable

Go

 

Após executar a system stored procedure sp_columns podemos notar que o tamanho e tipo de dados da coluna value criada através do select…into foi definido como Varchar() sendo este o tipo de dados padrão utilizado pela String_Split() para garantir compatibilidade no armazenamento e apresentação de dados oriundos de uma outra tabela.

 

— Exemplo 4 – Apresentando a mensagem quando o separador de string for definido com mais de um caracter —

DECLARE @string VARCHAR(100) = ‘pedrogalvaojunior#@gmail#@com’,

@separador CHAR(2) =’#@’

 

SELECT * FROM STRING_SPLIT(@string,@separador)

Go

 

Como pode ser observado o Microsoft SQL Server 2016 vai lançar e apresentar uma mensagem de erro com o código 214 informando que a quantidade de caracteres ou melhor dizendo que o tamanho utilizado para o parâmetro separador foi definido acima de um caractere, sendo que, este parâmetro só identifica e reconhece um único caractere.

Resultado

Msg 214, Level 16, State 11, Line 3

Procedure expects parameter ‘separator’ of type ‘nchar(1)/nvarchar(1)’.

 

— Exemplo 5 – Apresentando o comportamento da String_Split() quando um parâmetro apresenta valor nulo –

SELECT * FROM STRING_SPLIT(‘pedrogalvaojunior,wordpress,com’,NULL)

Go

 

Para este exemplo 5 o comportamento do SQL Server 2016 é exatamente o mesmo do exemplo 4, onde será apresentanda uma mensagem de erro informando que o tamanho informado no parâmetro separado, foi definido acima de um caractere.

Resultado

Msg 214, Level 16, State 11, Line 3

Procedure expects parameter ‘separator’ of type ‘nchar(1)/nvarchar(1)’.

 

— Exemplo 6 – Realizando o split de uma string com base na junção de uma tabela com a função String_Split() –

— Criando a tabela Split —

Create Table Split

( SplitId INT IDENTITY (1,1) NOT NULL,

SplitValue1 NVARCHAR(50),

SplitValue2 NVARCHAR(50))

GO

 

— Inserindo linhas de registro —

INSERT INTO Split (SplitValue1, SplitValue2)

VALUES (‘Pedro’,’Galvão’),

(‘Junior’,’Galvão’),

(‘Antonio’,’Silva’),

(‘Chico’,’Bento’)

Go

 

— Realizando a Junção da Tabela Split com a função Split_String() —

Select SplitId, SplitValue1, SplitValue2, Value

From Split S Inner Join String_Split(‘Pedro,Antonio’,’,’) STS

On S.SplitValue1 = STS.Value

Go

 

Observe que o SQL Server realizou o split dos dados com base na junção e valores informados para a função e mesmo assim apresentou os dados dados de cada coluna que compõem a estrutura da tabela Split.

 

Resultado

SplitID SplitValue1 SplitValue2 Value
1 Pedro Galvão Pedro
3 Antonio Silva Antonio

 

— Exemplo 7 – Apresentando o resultado quando ambos os parâmetros vazios –

Select * from String_Split(‘ ‘,’,’)

Go

 

Após executa o select acima o SQL Server identificou que ambos os parâmetros encontra-se vazios, sem nenhum tipo de dado que permita fazer a identificação da string e do separador, sendo assim o resultado retornado será uma única linha de registro vazia.

 

Resultado

Value

 

— Exemplo 8 – Apresentando o comportamento da String_Split() quando o caracter do final da string é o mesmo utilizado como separador –

SELECT * FROM STRING_SPLIT(‘Conhecendo,SQL Server,2016,’,’,’)

Go

 

Este é um cenário bem interessante e pode ocorrer a qualquer momento, nesta situação o SQL Server 2016 vai trabalhar da mesma forma que os outros exemplos, analisando e identificando a string e posteriormente fazendo a fragmentação com base no caractere separador, mesmo que este seja um caractere utilizado no final da string.

Note que que criada 4 linhas de registro sendo que a última não apresentará valores por será reconhecida e tratada como uma linha nula ou em branco.

Resultado

value
Conhecendo
SQL Server
2016

 

Legal, legal, acredito que agora ficou ainda mais fácil de entender e compreender como a String_Split() é fácil de ser utilizado e principalmente a maneira que os dados são apresentando e retornado para usuário. Desta forma, vou encerrar mais este artigo por aqui, quero também aproveitar para disponibilizar abaixo uma relação de links sobre os principais posts referentes ao SQL Server 2016 que estou desde 2015 publicando.

 


 

 

Links

Caso você não tenha acessado os posts anteriores dedicados ao Microsoft SQL Server 2016, não perca tempo e a oportunidade de conhecer mais sobre esta nova versão acessando os links abaixo:

https://pedrogalvaojunior.wordpress.com/2015/12/28/microsoft-sql-server-2016-e-json-uma-combinacao-bem-interessante-final/

https://pedrogalvaojunior.wordpress.com/2015/11/09/microsoft-sql-server-2016-e-json-uma-combinacao-bem-interessante-parte-i/

https://pedrogalvaojunior.wordpress.com/2015/10/02/conhecendo-o-live-query-statistics-no-microsoft-sql-server-2016/

https://pedrogalvaojunior.wordpress.com/2015/07/10/microsoft-sql-server-2016-lista-de-novidades-parte-i/

https://pedrogalvaojunior.wordpress.com/2015/07/16/microsoft-sql-server-2016-lista-de-novidades-parte-ii/

https://pedrogalvaojunior.wordpress.com/2015/07/30/microsoft-sql-server-2016-lista-de-novidades-final

 

Conheça o SQL Server 2016 RC0: Faça download da versão RC0 disponibilizada a poucos dias acessando: https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016. Acesse também da documentação oficial Microsoft sobre a String_Split(): https://msdn.microsoft.com/en-us/library/mt684588.aspx

 


 

Conclusão

Como você pode observar uma das mais esperadas funcionalidades foi adicionada ao SQL Server, a capacidade de fragmentar, dividir, fatiar uma string em pequenas partes ou substrings. Recurso mais que necessário e importante para qualquer desenvolver ou profissional de banco de dados que necessita analisar um texto “string” e através de um caractere denominado separador delimitar como pode ser gerada fragmentos deste texto.

A cada novo build liberado pela Microsoft podemos observar e notar o grande trabalho e esforço que esta sendo feito para transformar o Microsoft SQL Server 2016 na maior e principal versão do produto desde o grande salto dado em 2005 com o lançamento naquele momento da versão 2005.

Funções similares ao String_Split() estão sendo cada vez mais disponibilidades e adicionadas ao produto como forma de fazer com que o SQL Server se torne uma plataforma única de desenvolvimento, administração, armazenamento e gestão de banco de dados, isso representa uma grande evolução e atenção das equipes de desenvolvimento e engenheiros do produto em atender e satisfazer a comunidade técnica que se dedica a estudar e conhecer cada vez mais o SQL Server.

Acredito que os exemplos apresentados aqui conseguir mostrar a simplicidade de se trabalhar com esta nova funcionalidade, ilustrando sua simplicidade no uso e forma de obter os resultados.

Mais uma vez agradeço a sua atenção, seu interesse em visitar o meu blog, espero encontra-lo em outras oportunidades. Deixe seus comentários, críticas e sugestões.

Até a próxima.

Microsoft anuncia a compra da Xamarin


A Microsoft anunciou nesta semana a compra da Xamarin, provedora líder em soluções para o desenvolvimento de aplicativos para dispositivos móveis.

Microsoft anuncia a compra da Xamarin

Microsoft anuncia a compra da Xamarin

Em associação com o Visual Studio, a Xamarin oferece soluções em desenvolvimento mobile que permitem aos desenvolvedores produzir aplicativos utilizando C# e entregar experiências de apps mobile nativas para todos os principais dispositivos – incluindo iOS, Android e Windows.

A abordagem da Xamarin capacita os desenvolvedores a tirar proveito da produtividade e poder do .NET para produzir aplicativos para dispositivos móveis e utilizar o C# para desenvolver o conjunto completo de APIs nativas e capacidades móveis fornecidas pelas plataformas de dispositivos. Isso permite que os desenvolvedores compartilhem facilmente códigos comuns por seus aplicativos para iOS, Android e Windows e continuem entregando experiências nativas para cada uma das plataformas. As soluções únicas da Xamarin têm impulsionado um incrível crescimento por mais de quatro anos.

A Xamarin conta com mais de 15.000 clientes em 120 países, incluindo mais de cem companhias que fazem parte da lista Fortune 500, e mais de 1,3 milhão de desenvolvedores que utilizam seus produtos e serviços.

Companhias importantes como Alaska Airlines, Coca-Cola Bottling, Thermo Fisher, Honeywell e JetBlue usam Xamarin, assim como produtoras de jogos como SuperGiant Games e Gummy Drop. Com a Xamarin Test Cloud, todos os tipos de desenvolvedores mobile – C#, Objective-C, Java e desenvolvedores de aplicativos híbridos – podem testar e melhorar a qualidade de suas aplicações usando centenas de celulares e dispositivos hospedados na nuvem. A Xamarin foi recentemente considerada uma das principais startups que ajudam a internet a funcionar.

A Microsoft tem uma parceria de longa data com a Xamarin e as duas construíram em conjunto a integração com Visual Studio, Microsoft Azure, Office 365 e Enterprise Mobility Suite para fornecer aos desenvolvedores um fluxo de trabalho de ponta a ponta para aplicativos nativos e seguros por diversas plataformas. As empresas também trabalham para oferecer treinamento, ferramentas, serviços e fluxos de trabalho que os desenvolvedores necessitam para terem sucesso.

Com o anúncio da compra da Xamarin, ambas levarão esse trabalho ainda mais adiante para tornar suas ferramentas e serviços de desenvolvimento ainda melhores com uma integração mais profunda e experiências de desenvolvimento ainda mais refinadas.

A combinação de Xamarin, Visual Studio, Visual Studio Team Services e Azure fornece uma solução de desenvolvimento de aplicativos para dispositivos móveis completa que provê tudo o que você precisa para desenvolver, testar, entregar e instrumentalizar aplicativos para cada dispositivo.

Fonte: Microsoft Brasil – 25 de Fevereiro de 2016.