
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
*/