Arquivo da tag: Restore

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…

Anúncios

Microsoft SQL Server 2016 – Lista de Novidades – Parte II


Bom dia, quinta – feira, começando!!!

Salve comunidade, estou retornando com a segunda parte da Lista de Novidades do Microsoft SQL Server 2016, nova versão do SQL Server que neste momento apresenta muitas especulações, comentários e informações nas Internet, principalmente nas redes sociais.

Por este motivo também não poderia ficar de fora, como já realizado na semana passada com a primeira parte desta lista de novidades, caso você não tenha acessado este é o link:
https://pedrogalvaojunior.wordpress.com/2015/07/10/microsoft-sql-server-2016-lista-de-novidades-parte-i/

Nesta segunda parte, vou destacar mais algumas das principais novidades que a Microsoft esta divulgado em seus Blogs e parceiros, hoje darei destaque para:

  • Multiple TempDB Files;
  • For JSON;
  • Always Encripted; e
  • Polybase.

A seguir destaco estas novidades, através de uma breve descrição:

  • Multiple TempDB Files – Funcionalidade muito aguardada a anos pelos profissionais da área de banco de dados, mais especificamente aqueles que trabalham com o SQL Server, onde a partir da versão 2016, teremos a possibilidade de durante a instalação do SQL Server configurar e definir a quantidade arquivos de dados que devem formar a estrutura do banco de sistema TempDB, onde o número de arquivos é definido com base no seu número de processadores que a instância 2016 estará sendo executada. Para saber mais sobre esta nova feature acesse: http://www.sqlservergeeks.com/tempdb-configuration-sql-server-2016-setup/

 

  • FOR JSON – Uma novidade bastante interessante que mostra o quanto a Microsoft esta se dedicando a acompnhar a evolução das tecnologias de Computação em Nuvem e BigData. A FOR JSON, consiste em uma claúsula da linguagem Transact-SQL criada para ajudar o SQL Server a possibilitar a apresentação e saída de dados no formata JSON de forma nativa, algo que vai muito além de apresentar os dados, mas sim ter a capacidade de formatar estes dados interpretados pelo JSON no formato desejado pelo usuário. Para saber mais sobre esta nova feature acesse: https://msdn.microsoft.com/en-us/library/bb510411%28v=sql.130%29.aspx#ForJson

 

  • Always Encrypted – Este é um recurso bastante interessante na minha opinião e algo que pode complementar o TDE(Transparent Data Encryption) recurso introduzido no Microsoft SQL Server 2008, com a finalidade de permitir criptografia nativa no nível de banco de dados. O Always Encrypted garantir ainda mais que seus dados estão armazenados de forma segura através deste recurso de criptografia, como também, durante os processos de manipulação dos mesmo. Sua principal característica é permitir que a possibilidade de criptografar dados dentro das aplicações que estão fazendo acesso ao SQL Server, tendo a capacidade de utilizar chaves de criptografia nunca reveladas dentro do processo que realização da criptografia do dado. Como resultado, o Always Encrypted fornece uma separação entre aqueles que possuem os dados (e pode visualizálo) e aqueles que gerenciar os dados (mas deve não têm acesso). Para saber mais sobre esta nova funcionalidade, acesse: https://msdn.microsoft.com/en-us/library/mt163865(v=sql.130).aspx e https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-Always-Encrypted

 

  • Polybase – Na minha opinião uma baita novidade, sinceramente algo que vai muito além de uma novo recurso, mas sim um novo horizonte para os profissionais, desenvolvedores e administradores de banco de dados, funcionalidade que vai permitir um avanço enorme no que se diz respeito a Interoperabilidade do SQL Server com outras tecnologias Non-SQL, como também, tecnologias de acesso e armazenamento de dados dentre elas o Hadoop. O PolyBase é uma nova tecnologia que integra o produto o Microsoft SQL Server Parallel Data Warehouse (PDW), com Hadoop. Ele é projetado para permitir consultas através de dados relacionais armazenados no PDW e dados não-relacionais armazenados no Hadoop de forma distribuída através do sistema arquivos Hadoop (HDFS), ignorando MapReduce distribuído, reconhecido como motor do Hadoop que normalmente é usado para ler dados do HDFS. Você pode criar uma tabela externa em PDW que referencia o Hadoop dados (como um servidor vinculado) e você pode consultar isso com SQL, em essência, adicionando estrutura para dados não-estruturados.

Untitled picturePara maiores informações sobre o Polybase e alguns cenários de uso, acesse: Books Online – Polybase, Polybase Explained, SQL Server 2016 and Polybase, Using Polybase in SQL Server 2016, Polybase in SQL Server 2016 CTP2

Muito bem pessoal, chegamos ao final desta segunda parte da lista de novidades do Microsoft SQL Server 2016, espero que você tenha gostado, na próxima semana chegaremos ao final desta lista, destacando as últimas novidades que Microsoft esta introduzindo no novo SQL Server 2016, dentre as quais chamo sua atenção para: Strech Database e Row-Level Security.

Mais uma vez obrigado por sua visita, fique a vontade para postar suas dúvidas, sugestões, críticas e comentários, sobre este ou qualquer outro post.

Boa semana e até mais.

Microsoft SQL Server 2016 – Lista de Novidades – Parte I


Olá pessoal, bom dia, feriado prolongado no estado de São Paulo.

Mesmo assim, a vida não pode parar e a dissiminação de conhecimento menos ainda, algo primordial em nossas vidas e obrigatória para evolução de todos nós.


Para manter esta tradição nada como trazer informações relevantes e atualizadas, sendo assim, gostaria de destacar um pouco sobre as principais novidades que a Microsoft esta anunciando para a nova versão do Microsoft SQL Server, isso mesmo nova versão, se você nos últimos 2 ou 3 meses não se antenou, já estamos se deparando e caminhando para a versão 2016 do Microsoft SQL Server.

Se você quiser saber mais sobre este preview, recomendo acessar os seguintes links:

http://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/

http://blogs.technet.com/b/dataplatforminsider/archive/2015/05/04/sql-server-2016-public-preview-coming-this-summer.aspx

http://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016

Dentre as diversas novidades que aparecem na presentes na nova versão, gostaria de destacar algumas que realmente não existem nas atuais, dentre elas:

  • Live Query Statistics;
  • Query Store;
  • Temporal Tables;
  • Backup to Azure;
  • Managed Backup;
  • Multiple TempDB Files;
  • FOR JSON;
  • Always Encrypted;
  • Polybase;
  • Stretch Database;
  • Row-Level Security;
  • Dynamic Data Masking.

Outras funcionalidades também estão passando por mudanças e podem ser consideradas como possíveis novidades, é o caso:

  • AlwaysOn;
  • Columnstore Indexes; e
  • In-Memory OLTP.

Por outro lado, outras funcionalidades devem começar a fazer parte da lista de recursos e funcionalidades que descontinuadas ou futuramente descontinuadas, até o presente momento a Microsoft não disponiblizou nenhum lista oficial contendo este itens.

Mas voltando a destacar as novas funcionalidades, nem sempre todas estes itens considerados novos são realmente utilizados, em muito casos existe sempre uma insegurança, medo, relutância e até mesmo desconhecimento sobre como uma ou outra novidade pode ajudar, isso é muito comum de se deparar, as mudanças geram incertezas e inseguranças.

Para tentar ajudar você que esta lendo este post a saber um pouco mais sobre este recursos e de maneira eles podem fazer parte do seu projeto, vou fazer uma breve descrição de alguns deles, e conforme novas informações, exemplos e cenários forem sendo disponibilizados, com certeza, vou procurar compartilhar com você isso.

Vamos lá, vou começar por algo que eu gosto muito no SQL Server, estou falando de estatísticas e na versão 2016, temos a:

  • Live Query Statistics – Uma das funcionalidades que pode surpreender a vida dos DBAs e desenvolvedores, a Live Query Statistisc permite que você possa exibir as estatísticas de consulta ao vivo de uma consulta ativa, proporcionando insights em tempo real, isso é surpreende, saber ao vivo e a cores o que uma consulta que esta ativa, em funcionamento no SQL Server poderá nos propor de decisão.

 

  • Query Store – Outra fantástica funcionalidade que vai ajudar em muito os DBAs na sua longa jornada de análise de planos de execução, a Query Store vai possibilidade fazer a análise de uma plano de execução que possa estar apresentando problemas de desempenho através de uma “indicação” ou “orientação” por parte do SQL Server, poder escolher um plano de execução para processar uma query, olha algo revolucionário.

 

  • Temporal Tables – O nome desta funcionalidade realmente é um pouco estranho, pelo menos na sua leitural, mas com certeza a sua finalidade é bastante interessante e vejo como um grande diferencial. A temporal tables, consiste basicamente em uma tabela que fornece uma exibição de dados em um determinado momento de tempo, isso mesmo, você vai conseguir obter informações sobre os dados de uma tabela, através de uma visão histórica, como se você estivesse voltando ao passado, voltando no tempo a posição de dados daquela tabela.

 

  • Backup to AzureO Backup para Azure recurso é projetado para permitir que você tire um backup do seu banco de dados no local diretamente para o armazenamento de Azure blog, algo que hoje pode ser feito através de recursos e ferramentas de terceiros, mas estará totalmente integrado e funcionando de forma nativa no versão 2016.

 

  • Managed BackupO recurso relacionado com o Microsoft Azure e conhecido como “Backup gerenciado” foi projetado com a finalidade de automatizar backups para o armazenamento de Blob do Azure, muito legal esta funcionalidade, o seu grande diferencial esta justamente na forma que vamos poder gerenciar e administrar os backups de nossos bancos de dados armazenados na estrutura do Azure.

Muito legal estas novas funcionalidades, realmente a Microsoft esta trabalhando forte no SQL Server, na sua capacidade de integração e interoperabilidade.

Vou fazer um pequeno suspense e deixá-los com água na boca em relação as outras novidades, na próxima semana eu retorno com a Parte II desta lista de novidades, destacando como por exemplo: Polybase e Strech Database, ambas inovações presentes na versão 2016 que terão um papel fundamente para o  SQL Server na sua capacidade intregação e interoperabilidade com ferramentas de Bigdata e Hadoop.

Espero que você tenha gostado, até a próxima semana!!!

Abraços.

Utilizando Backup de Filegroup no SQL Server – Final


Boa tarde, pessoal!!!

Estou de volta mais uma vez para finalizar esta série de artigos sobre Backup de Filegroup.

— Parte Final —

Bom mas nem tudo pode ser considerado fácil, aparentemente nosso ambiente esta integro e funcional, mas não é bem assim. Se tentarmos inserir ou consultar dados em uma das tabelas armazenada no filegroup Secondary, recebemos uma mensagem de erro informando que este filegroup encontra-se em offline, conforme apresenta a Figura 12.

Figura 12. Tentativa de consulta a tabela Saldos, mas filegroup Secondary em offline.

Isso ocorreu pois realizamos uma restauração parcial do nosso ambiente, mas não se atentamos para o detalhe que também será necessário liberar o filegroup Secondary para uso.

Consultando a system catalog view Sys.Database_Files, poderemos encontrar mais informações sobre o atual status no nosso banco de dados e seus respectivos filegroups, podemos observar a coluna state_desc, que apresenta o status atual dos arquivos, conforme a Figura 13.

Figura 13. Informações sobre o status de cada filegroup.

Analisando as informaões apresentadas na Figura 13, observamos que o Arquivo de Dados Primário e o Arquivo de
Log
de Transações estão apresentando o status de OnLine, ao contrário do segundo arquivo de dados, definido como Recovery_Pending.

Para resolvermos este pequeno obstáculo, é muito simples, basta realizar a restauração do filegroup Secondary e posteriormente restaurar novamente o Log de Transações sobre este banco, desta forma, o SQL Server ira entender que este arquivo esta liberado para ser utilizado, conforme apresenta a Listagem 10.

Listagem 10. Liberando o filegroup Secondary para uso

— Bloco 1 —

Use master

Go

Restore Database SQLMagazine

File = ‘SQLMagazine_Secondary_Dados’,

Filegroup = ‘Secondary’

From Disk = ‘C:\SQL\Backup-Secondary-SQLMagazine.bak’

With File=1,  Replace,  NoRecovery

Go

— Bloco 2 —

Use master

Go

Restore Log SQLMagazine

From Disk = ‘C:\SQL\Backup-Log-SQLMagazine.bak’

With Recovery

Go

Agora sim, nosso ambiente esta totalmente operacional, pronto para ser utilizado, ambos os filegroups estão liberados para manipulação de dados e objetos, para confirmar, podemos utilizar novamente a system catalog view Sys.Database_Files,
conforme apresenta a Figura 14, de acordo com a coluna state_desc.

Figura 14. Informações sobre cada filegroup, liberados para uso, com status OnLine.

Como podemos observar, o processo de restauração do segundo filegroup também foi realizado, com uma única diferença em relação ao filegroup Primary. Não tivemos a necessidade utilizar a opção Partial, pois não estavamos restaurando o filegroup Primary.
Havendo a necessidade de restauração do filegroup Secondary, deveríamos repetir somente os passos apresentados anteriormente na Listagem 10.

Conclusão

A utilização de diversos filegroups em um banco de dados pode trazer vários benefícios, como: maior disponibilidade, contigência, melhorias de performance e segurança. Em relação a administração poderemos ter um pouco mais de esforços necessários para manter o ambiente operacional, mas nada que acabe impedindo sua implementação.

Como podemos observar, uma das vantagens em seu utilizar dois ou mais filegroups esta vinculada com a possibilidade de manter nosso ambiente em funcionamento, mesmo que possam ocorrer problemas de disponibilidade. O artigo demonstrou de forma simples e prática como realizar a recuperação de objetos e seus dados, sem gerar a impossibilidade de acesso ao Banco de Dados.

Além disso, foi possível entender alguns conceitos relacionados a Backup e Restauração de dados, bem como, os comandos básicos utilizados em cada recursos, possibilitando entender suas diferenças e características.

De que se trata o artigo:

Neste artigo, apresentaremos uma das estratégias para se trabalhar com Filegroups, o chamado Backup de Filegroups, onde temos a disposição a possibilidade de gerar cópias de seguranças dos nossos grupos de arquivos de forma completa ou isoladamente, auxiliando na manutenção e disponibilidade de nosso ambiente.

Para que serve:

O Backup de Filegroup tem como objetivo proporcionar um ambiente mais seguro para retenção e recuperação de dados. Através desta estratégia de backup, temos a possibilidade de recuperar parte de um banco de dados, sem ter a necessidade de
recuperar o banco como um todo.

Outro detalhe importante, o Backup de Filegroup pode ser facilmente implementado, sem necessitar qualquer tipo de aquisição de Hardware ou Software. Em combinação com o serviço de tarefas agendadas existentes no SQL Server, chamado de SQL
Server Agent, torna-se possível programar a cópia isolada de partes do banco de dados em horários específicos, melhorando ainda mais a segurança das informações manipuladas anteriormente a última cópia de segurança(Backup de Dados).

Em que situação o tema útil:

Este tipo de funcionalidade pode ser útil em ambientes com grande manipulação de informações, necessidade de contigência isolada dos dados, ou ainda que necessitam ser armazenadas de forma segura e não permitam qualquer tipo de perda. Em caso de qualquer falha, através do Backup de Filegroups torna-se possível recuperar as áreas manipuladas de um Banco de Dados sem afetar outras áreas que estão integras ou necessariamente não necessitam ser recuperadas através de processo de Restauração de Dados(Restore).

Notas – Backup: Permite o backup integral ou parcial do banco de dados do SQL Server ou de arquivos individuais ou de grupos de arquivos do banco de dados. Não é possível criar backups no nível de tabela.
O backup e a restauração do SQL Server funcionam em todos os sistemas operacionais suportados, se forem sistemas de 64 ou 32 bits. O escopo de um backup de dados (um backup de dados) pode ser um banco de dados inteiro, um banco de dados parcial ou um conjunto de arquivos ou grupos de arquivos.

Restore: Restauração é o processo de copiar dados de um backup e aplicar transações em log aos dados para fazer roll-forward até o ponto de recuperação de destino. Um backup de dados ou diferencial contém registros de log de transações suficientes para permitir roll-froward nas transações ativas como parte da restauração de cada backup.

Cada backup contém também log suficiente para reverter transações não confirmadas para trazer o banco de dados a um estado operacional consistente e utilizável. O processo de reverter transações não confirmadas, se houver, e trazer o banco de dados online é conhecido como recuperação.

Modelos de Recuperação de Banco de Dados: Os modelos de recuperação são projetados para controlar a manutenção de log de transações. Existem três modelos de recuperação: simples, completo e bulk-logged.
Geralmente, um banco de dados usa o modelo de recuperação completa ou o modelo de recuperação simples.

Referências

Books OnLine do SQL Server 2008.

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.pt/s10de_6tsql/html/89a4658a-62f1-4289-8982-f072229720a1.htm

Books OnLine do SQL Server 2008.

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.pt/s10de_4deptrbl/html/0331befe-dc11-462e-a6f2-da7b08f0a672.htm

Books OnLine do SQL Server 2008.

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.pt/s10de_6tsql/html/877ecd57-3f2e-4237-890a-08f16e944ef1.htm

MSDN Library – Backup (Transact-SQL)

http://msdn.microsoft.com/en-us/library/ms186865.aspx

MSDN Library – Backup Overview (SQL Server)

http://msdn.microsoft.com/en-us/library/ms175477.aspx

MSDN Library – Restore Restrictions Under the Simple Recovery Model

http://msdn.microsoft.com/en-us/library/ms189323.aspx