Fala galera,

Neste vídeo mostro como criar e pra que serve um snapshot de banco de dados, uma fotografia de um determinado momento de toda sua base.

Este recurso é particularmente interessante se em algum momento sua base sofrerá uma série de alterações (e você fica sabendo antes porque te avisaram) e você precisa reverter rapidamente toda sua base de dados para o estado original antes das alterações.

No vídeo mostro como criar um snapshot, como gerar o script pro mesmo e como reverter uma base com ele.

Atenção: O Snapshot NÃO é uma solução de backup!!! Nunca substitua um pelo outro, o Snap é apenas um complemento que pode te ajudar a ganhar tempo.

Use por sua própria conta e risco, testado em um SQL SERVER 2014.

Happy SQL SERVING!

Facebooktwittergoogle_plusredditpinterestlinkedinmail

 

Cria a base de dados:


--USE [master]
GO

--cria a base de dados
CREATE DATABASE [snapteste]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'snapteste_1', FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\snapteste_1.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'snapteste_2', FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\snapteste_2.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'snapteste_3', FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\snapteste_3.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'snapteste_log', FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\snapteste_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

----------------------------------------------------------------------------------

Gera a estrutura de datafiles para o script:

--gera os caminhos de snapshot
select '( name = '+name+', filename = '''+'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\SShots\'+name+'.ss'''+'),'
from sys.master_files
where db_name(database_id) = 'snapteste' --nome da base
and type = 0 --somente arquivos de dados
GO
--------------------------------------------------------------------------------

Manipula o Snapshot:

--cria o snapshot
CREATE DATABASE snapteste_snap_2200
on
( name = snapteste_1, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\SShots\snapteste_1.ss'),
( name = snapteste_2, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\SShots\snapteste_2.ss'),
( name = snapteste_3, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\SShots\snapteste_3.ss')
as snapshot of snapteste;
GO

--elimina o snapshot:
--nunca execute!
--drop database snapteste_snap_2200

--Sintaxe do comando de snapshot:
CREATE DATABASE database_snapshot_name
ON
(
NAME = logical_file_name,
FILENAME = 'os_file_name'
) [ ,...n ]
AS SNAPSHOT OF source_database_name

-------------------------------------------------------------------------------------------------
--cria tabela de teste
use snapteste
GO
create table baloon_dados
(id uniqueidentifier primary key,
mensagem varchar(500))

--loop de inserção
set nocount on
insert into baloon_dados(id,mensagem)values(newid(),'teste-mensagem'+cast(newid() as varchar(300)))
go 10000
--veja os dados
GO
use snapteste
GO
select * from baloon_dados
GO

GO
use snapteste_snap_2200;
GO
select * from baloon_dados

--1: 1000 linhas - no snapshot
--2: 11000 linhas

--limpa a tabela
--cuidado
--truncate table baloon_dados
-------------------------------------------------------------------------------------------

--reverter a base de dados:
restore database snapteste from database_snapshot = 'snapteste_snap_2200'

Referência: https://msdn.microsoft.com/en-us/library/ms175158.aspx