Raspuns: un fisier de bkp / bak poate stoca mai multe copii de siguranta / backup-uri denumite si backup set. Mai mult chiar, in acelasi fisier pot fi memorate backup set-uri de la mai multe baze de date. In mod implicit , comportamentul SQL Server in cazului realizarii unui backup este de cel append (adaugare) si nu de overwrite (suprascriere). La momentul restaurarii bazei de date (folosinf RESTORE DATABASE) SQL Server va lua in considerare doar primul backup set din fisier. Daca doresti ca pentru restaurarea bazei de date sa se utilizeze alt backup set din acelasi fisier folosesti clauza RESTORE ... WITH FILE = pozitie backup set. De asemenea poti folosi fisiere separate pentru fiecare operatiune de backup.
Exemplificare (executa linie cu linie fiecare comanda restore si select pentru a vedea efectele clauzei WITH FILE = nr/pozitie backup set):
CREATE DATABASE TestBkp
CREATE TABLE Factura (CodFactura INT PRIMARY KEY, Serie VARCHAR(25), Nr INT, Data DATETIME)
INSERT INTO Factura VALUES (1, 'BAAA' , 1000 , '2007-01-01' )
INSERT INTO Factura VALUES (2, 'BAAA' , 1001 , '2007-02-02' )
INSERT INTO Factura VALUES (3, 'BAAA' , 1002 , '2007-03-03' )
BACKUP DATABASE TestBkp TO DISK = 'C:\CopieSigurantaBD.bkp'
--full bkp 1
INSERT INTO Factura VALUES (4, 'BAAB' , 1000 , '2007-04-01' )
BACKUP DATABASE TestBkp TO DISK = 'C:\CopieSigurantaBD.bkp'
--full bkp 2 --
INSERT INTO Factura VALUES (5, 'BAAC' , 1000 , '2007-05-01' )
BACKUP DATABASE TestBkp TO DISK = 'C:\CopieSigurantaBD.bkp'
--full bkp 3
BACKUP DATABASE test TO DISK = 'C:\CopieSigurantaBD.bkp'
--full bkp la o alta baza de date; in acest moment in 'C:\CopieSigurantaBD.bkp' vor exista 4 backup set-uri: 3 de la TestBkp si 1 de la test
--in continurea poti vedea care sunt backup set-urile dintr-un fisier (ex.'C:\CopieSigurantaBD.bkp') pentru o anumita baze de date (ex. TestBkp)
SELECT BS.position PozitieBackupInFisierBkp, BS.database_name BazaDate, BS.*
FROM msdb.dbo.backupmediafamily BMF
INNER JOIN msdb.dbo.backupmediaset BMS ON BMF.media_set_id = BMS.media_set_id
INNER JOIN msdb.dbo.backupset BS ON BMS.media_set_id = BS.media_set_id
WHERE BMF.physical_device_name = 'C:\CopieSigurantaBD.bkp'
AND BS.database_name = 'TestBkp'
ORDER BY BS.position
--poti vizualiza continutul unui astfel de backup set (1 este nr/pozitia backup set-ului in fisier)
RESTORE FILELISTONLY FROM DISK = 'C:\CopieSigurantaBD.bkp' WITH FILE = 1
--DE AICI EXECUTI FIECARE RESTORE SEPARAT/DISTINCT PENTRU A OBSERVA CONSECINTELE FIECAREI COMENZI RESTORE
USE master
RESTORE DATABASE TestBkp FROM DISK = 'C:\CopieSigurantaBD.bkp' WITH REPLACE
SELECT * FROM TestBkp.dbo.Factura
RESTORE DATABASE TestBkp FROM DISK = 'C:\CopieSigurantaBD.bkp' WITH REPLACE, FILE=1
SELECT * FROM TestBkp.dbo.Factura
RESTORE DATABASE TestBkp FROM DISK = 'C:\CopieSigurantaBD.bkp' WITH REPLACE, FILE=2
SELECT * FROM TestBkp.dbo.Factura
RESTORE DATABASE TestBkp FROM DISK = 'C:\CopieSigurantaBD.bkp' WITH REPLACE, FILE=3
SELECT * FROM TestBkp.dbo.Factura