Published on

August 10, 2012

Изучение вариантов восстановления SQL Server

Когда дело доходит до управления базами данных в SQL Server, способность восстановить базу данных является важной. Будь то восстановление после катастрофы или просто откат к предыдущей точке во времени, надежный процесс восстановления является неотъемлемым. В этой статье мы рассмотрим некоторые варианты восстановления, доступные в SQL Server 2012, и как они могут сделать процесс восстановления более эффективным и гибким.

Генерация скрипта восстановления

В прошлом генерация скрипта восстановления на основе таблицы истории msdb была распространенным подходом. Однако с появлением SQL Server 2012 появились более мощные способы восстановления базы данных. Давайте рассмотрим тестовый скрипт, демонстрирующий эти новые варианты восстановления.

--Создание тестовой базы данных
CREATE DATABASE [Test] CONTAINMENT = NONE 
ON PRIMARY ( NAME = N'Test', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) 
LOG ON ( NAME = N'Test_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

ALTER DATABASE [Test] SET RECOVERY FULL
GO

ALTER DATABASE [Test] SET PAGE_VERIFY CHECKSUM
GO

ALTER DATABASE [Test] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO

SET NOCOUNT ON
GO

USE [Test]
GO

--Создание таблицы
CREATE TABLE mytest (a int, b char(10))
GO

--Создание полного резервного копирования
PRINT convert(varchar(101),getdate(),113)
PRINT '--Создано полное резервное копирование 1'
BACKUP DATABASE [Test] TO DISK = 'C:\temp\backup\Test_full_1.bak'
GO

--Вставка пакета - 1
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 1'
INSERT INTO mytest VALUES(1, '1')
GO 5

--Создание дифференциального резервного копирования 2
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '----Создание дифференциального резервного копирования 2'
BACKUP DATABASE [Test] TO DISK = 'C:\temp\backup\Test_diff_2.bak' WITH DIFFERENTIAL
GO

--Вставка пакета - 2
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 2'
INSERT INTO mytest VALUES(2, '2')
GO 5

--Создание журнального резервного копирования 3
PRINT convert(varchar(101),getdate(),113)
PRINT '------Создание журнального резервного копирования 3'
BACKUP LOG [Test] TO DISK = N'C:\temp\backup\Test_log_3.trn'
GO

--Вставка пакета - 3
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 3'
INSERT INTO mytest VALUES(3, '3')
GO 5

--Создано полное резервное копирование 4
PRINT convert(varchar(101),getdate(),113)
PRINT '--Создано полное резервное копирование 4'
BACKUP DATABASE [Test] TO DISK = 'C:\temp\backup\Test_full_4.bak'
GO

--Вставка пакета - 4
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 4'
INSERT INTO mytest VALUES(4, '4')
GO 5

--Создание журнального резервного копирования 5
PRINT convert(varchar(101),getdate(),113)
PRINT '------Создание журнального резервного копирования 5'
BACKUP LOG [Test] TO DISK = N'C:\temp\backup\Test_log_5.trn'
GO

--Вставка пакета - 5
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 5'
INSERT INTO mytest VALUES(5, '5')
GO 5

--Создание дифференциального резервного копирования 6
PRINT convert(varchar(101),getdate(),113)
PRINT '----Создание дифференциального резервного копирования 6'
BACKUP DATABASE [Test] TO DISK = 'C:\temp\backup\Test_diff_6.bak' WITH DIFFERENTIAL
GO

--Вставка пакета - 6
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 6'
INSERT INTO mytest VALUES(6, '6')
GO 5

--Создание журнального резервного копирования 7
PRINT convert(varchar(101),getdate(),113)
PRINT '------Создание журнального резервного копирования 7'
BACKUP LOG [Test] TO DISK = N'C:\temp\backup\Test_log_7.trn'
GO

--Вставка пакета - 7
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 7'
INSERT INTO mytest VALUES(7, '7')
GO 5

--Создание журнального резервного копирования 8
PRINT convert(varchar(101),getdate(),113)
PRINT '------Создание журнального резервного копирования 8'
BACKUP LOG [Test] TO DISK = N'C:\temp\backup\Test_log_8.trn'
GO

--Вставка пакета - 8
WAITFOR DELAY '0:01:00'
PRINT convert(varchar(101),getdate(),113)
PRINT '--Вставка пакета - 8'
INSERT INTO mytest VALUES(8, '8')
GO 5

SET NOCOUNT OFF
GO

Использование интерфейса восстановления в SQL Server Management Studio

В SQL Server Management Studio (SSMS) есть новый интерфейс для восстановления баз данных. Чтобы получить к нему доступ, просто щелкните правой кнопкой мыши на нужной базе данных, выберите “Задачи”, затем “Восстановление” и, наконец, “База данных”. Это откроет окно восстановления с различными параметрами.

В верхней части окна вы заметите сообщение, указывающее, что по умолчанию будет выполнено резервное копирование журнала хвоста. Это полезно, если вы хотите восстановить базу данных до текущей точки во времени. В разделе “Параметры” вы можете указать путь к файлу резервного копирования журнала хвоста.

Вы можете выбрать источ

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.