Como ver se uma tabela faz parte do backup no SQL Server

Uma aluna perguntou o seguinte:

Tenho um backup do banco, aqui comigo... como descubro se uma tabela faz parte desse backup?

Bom, o backup é full e o seu banco só tem o filegroup primary, o que me facilita um pouco a vida.

Parto do seguinte princípio: se a data de criação da tabela for maior que a data do backup, com certeza ela não está lá. Se a data de criação for menor, alguma versão dessa tabela está no backup.

Alguns comandos servem para obter informações do backup e dos objetos do banco.

O exemplo que fiz, para demonstrar isso para a aluna está abaixo:

USE MASTER

IF EXISTS(SELECT FROM SYS.databases WHERE name='EXEMPLO_BKP')
    
DROP DATABASE EXEMPLO_BKP

CREATE DATABASE EXEMPLO_BKP
GO

USE 
EXEMPLO_BKP

CREATE TABLE PESSOA 
(
    COD 
INT IDENTITY PRIMARY KEY,
    NOME 
VARCHAR(50)
)

INSERT INTO PESSOA VALUES ('AGNALDO'), ('BRUNO'), ('NETINHO'), ('PEDRO')

EXEC XP_CREATE_SUBDIR 'C:\BKP'

BACKUP DATABASE EXEMPLO_BKP
TO DISK='C:\BKP\EXEMPLO_BKP.BKP'
/*
Processed 176 pages for database 'EXEMPLO_BKP', file 'EXEMPLO_BKP' on file 1.
Processed 6 pages for database 'EXEMPLO_BKP', file 'EXEMPLO_BKP_log' on file 1.
BACKUP DATABASE successfully processed 182 pages in 0.431 seconds (3.283 MB/sec).
*/

RESTORE FILELISTONLY 
FROM DISK='C:\BKP\EXEMPLO_BKP.BKP'
/*
LogicalName              PhysicalName                     Type FileGroupName   
------------------------ -------------------------------- ---- --------------- 
EXEMPLO_BKP          C:\...\EXEMPLO_BKP.mdf       D    PRIMARY         
EXEMPLO_BKP_log      C:\...\EXEMPLO_BKP_log.LDF   L    NULL            
*/

RESTORE VERIFYONLY 
FROM DISK='C:\BKP\EXEMPLO_BKP.BKP'
/*
The backup set on file 1 is valid.
*/

RESTORE LABELONLY 
FROM DISK='C:\BKP\EXEMPLO_BKP.BKP'
/*
MediaName   ... SoftwareName          SoftwareVendorId MediaDate               
----------- ... --------------------- ---------------- ----------------------- 
NULL        ... Microsoft SQL Server  4608             2010-04-20 10:02:29.000 
*/

--OS QUATRO PRÓXIMOS SELECTS NÃO TRAZEM INFORMAÇÃO RELEVANTE
SELECT FROM msdb..backupfile
SELECT FROM msdb..backupfilegroup
SELECT FROM MSDB..backupmediafamily 
SELECT FROM MSDB..backupmediaset 

SELECT FROM MSDB..backupset 
/*
backup_set_id  user_name     software_major_version software_minor_version software_build_version  
-------------  ------------- ---------------------- ---------------------- ----------------------  
1              note\agnaldo  10                     0                      2531                    

database_creation_date  backup_start_date       backup_finish_date       database_name     
----------------------- ----------------------- -----------------------  ----------------- 
2010-04-20 10:01:43.000 2010-04-20 10:02:29.000 2010-04-20 10:02:30.000  EXEMPLO_BKP   
server_name      machine_name  collation_name         recovery_model 
---------------- ------------- ---------------------- ---------------
NOTE\SQLEXPRESS  NOTE          Latin1_General_CI_AS   SIMPLE         
*/

EXEC sp_help PESSOA
/*
Name     Owner   Type        Created_datetime        Data_located_on_filegroup
-------- ------- ----------- ----------------------- -----------------------------
PESSOA   dbo     user table  2010-04-20 10:02:01.790 PRIMARY
*/

/*
-> PODEMOS DEDUZIR QUE A TABELA ESTÁ NO BACKUP, POIS:
A) 
A DATA DE CRIAÇÃO DA TABELA (2010-04-20 10:02:01.790) É MENOR QUE 
A DATA DE CRIAÇÃO DO BACKUP (2010-04-20 10:02:29.000)

E

B)
A TABELA ESTÁ NO PRIMARY
O BACKUP É DO FILEGROUP PRIMARY
*/

CREATE TABLE PRODUTO
(
    COD 
INT IDENTITY PRIMARY KEY,
    NOME 
VARCHAR(50),
    PRECO DEC(
9,2)
)

INSERT INTO PRODUTO VALUES 
('MARTELO'23.66), 
(
'CHAVE DE FENDA'10), 
(
'SERROTE'98.54)

EXEC sp_help PRODUTO
/*
Name     Owner   Type        Created_datetime        Data_located_on_filegroup
-------- ------- ----------- ----------------------- -----------------------------
PRODUTO  dbo     user table  2010-04-20 10:49:34.143 PRIMARY
*/

/*
-> COM CERTEZA A TABELA PRODUTO NÃO ESTÁ NO BACKUP, POIS:
A DATA DE CRIAÇÃO DA TABELA (2010-04-20 10:49:34.143) É MAIOR QUE 
A DATA DE CRIAÇÃO DO BACKUP (2010-04-20 10:02:29.000), OU SEJA,
ELA NÃO EXISTIA QUANDO O BACKUP FOI FEITO
*/

 

Comentar

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading