SQL Server 2008'deki tam yedekleme, günlük zincirini bozmaz. Sadece diferansiyel taban lsn'yi sıfırlar.
Ayrıca, yalnızca bir kopyadan geri yükledikten sonra günlük yedeklemelerini geri yükleyebilirsiniz. Aşağıdaki komut dosyası bunu gösterir:
CREATE DATABASE BakTst13;
GO
ALTER DATABASE BakTst13 SET RECOVERY FULL;
GO
USE BakTst13;
GO
CREATE TABLE dbo.tst(id INT IDENTITY(1,1));
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_2' WITH INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
Bir veritabanı ve bir tablo oluşturur ve bu tabloya 50 satır ekler. Bu kesici uçlar arasında bu sırayla birkaç yedek alınır:
- Tam
- Giriş
- Tam
- Tam Kopya_Yalnızca
- Giriş
Sonra veritabanı bırakılır ve şu şekilde geri yüklenir:
- 1. Tam
- 1. Günlük
- 2. Günlük
Aşağıda SELECT
geri yüklemenin başarılı olduğu gösterilmiştir.
Bu, ne COP_ONLY
tam ne de normal bir Tam Yedeklemenin günlük zincirini bozmadığını gösterir.
Sonra veritabanı tekrar bırakılır ve şu şekilde geri yüklenir:
- Yalnızca Tam Kopyala
- 2. Günlük
Daha sonra SELECT
tekrar başarı gösterir.
Bu COPY_ONLY
, Günlük Geri Yükleme işleminizin temeli olarak tam bir yedeklemeyi kullanabileceğinizi gösterir .
Diferansiyel testler
Ben DIFFERENTIAL
de bir sürüm oluşturdum :
CREATE DATABASE BakTst13;
GO
ALTER DATABASE BakTst13 SET RECOVERY FULL;
GO
USE BakTst13;
GO
CREATE TABLE dbo.tst(id INT IDENTITY(1,1));
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_1' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_2' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_3' WITH DIFFERENTIAL,INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F1, D1, D2',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore FC, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F2, D2, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
Bu, yedekleri şu sırayla alır:
- 1. Tam
- 1. Fark
- 2. Tam
- 2. Fark
- Yalnızca Kopyalama
- 3. Fark
Daha sonra bu geri yükleme yolunu dener:
- 1. Tam
- 1. Fark
- 2. Fark
3. Adım bu hatayla başarısız olur:
Msg 3136, Level 16, State 1, Line 4
This differential backup cannot be restored because the database has not been restored to the correct earlier state.
Bu, normal bir tam yedeklemenin diferansiyel zinciri kırdığını gösterir.
Sonra veritabanı bırakılır ve bu geri yükleme akışı denenir:
- Yalnızca Tam Kopyala
- 3. Fark
Adım 2, yukarıdaki adım 3 ile aynı hatayla başarısız olur. Bu, yalnızca kopya yedeklemenin diferansiyel geri yüklemenin temeli olarak kullanılamayacağını gösterir.
Sonra veritabanı yeniden bırakılır ve aşağıdaki geri yükleme yürütülür:
- 2. Tam
- 2. Fark
- 3. Fark
Aşağıdaki seçim, bu geri yüklemenin başarılı olduğunu kanıtlar. Bu, COPY_ONLY
Tam yedeklemenin diferansiyel zinciri kesintiye uğratmadığını gösterir .