Datu bāzi ir iespējams atjaunot tikai daļēji. Pēc daļējas atjaunošanas pieejama kļūst tikai atjaunotā datu bāzes daļa. Šī iespēja savukārt ļauj būtiski samazināt atjaunošanas laiku kritiskām datu bāzes daļām. Protams, lietojumam jābūt spējīgam strādāt ar datu bāzi, kas pieejama tikai daļēji.
Par failiem un failu grupām: Faili, failu grupas SQL Server
Par daļēju failu atjaunošanu msdn: Piecemeal Restores
Pamēģināt var izmantojot šo skriptu (datu bāzes failu un rezerves kopiju ceļus var/vajag mainīt):
/* DATU BĀZES IZVEIDE */
USE [master]
GO
CREATE DATABASE [TestRestore] ON PRIMARY
(NAME = N'TestRestore', FILENAME = 'C:\MSSQL11.MSSQLSERVER\MSSQL\DATA\TestRestore_log.mdf', SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
FILEGROUP [FGMy] DEFAULT
(NAME = N'FileFG1', FILENAME = N'C:\MSSQL11.MSSQLSERVER\MSSQL\DATA\FileFG1.ndf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
FILEGROUP [FGMy2]
(NAME = N'FileFG2', FILENAME = N'C:\MSSQL11.MSSQLSERVER\MSSQL\DATA\FileFG2.ndf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
(NAME = N'TestRestore_log', FILENAME = N'C:\MSSQL11.MSSQLSERVER\MSSQL\DATA\TestRestore_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
Use TestRestore;
Go
/* tabula failu grupā FGMy */
CREATE TABLE [dbo].[T1]
(
[i] [int] NULL,
[teksts] [nvarchar](100) NULL
) ON [FGMy]
GO
/* tabula failu grupā FGMy2 */
CREATE TABLE [dbo].[T2]
(
[i] [int] NULL,
[teksts] [nvarchar](100) NULL
) ON [FGMy2]
GO
/* REZERVES KOPIJAS */
/* Katrai failu grupai atsevišķi un LOG failam */
BACKUP DATABASE [TestRestore]
FILEGROUP = N'PRIMARY' TO
DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Primary_FG.bak' WITH NOFORMAT, NOINIT,
NAME = N'Primary',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP DATABASE [TestRestore] FILEGROUP = N'FGMy' TO
DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\FGMy_FG.bak' WITH NOFORMAT, NOINIT,
NAME = N'FGMy',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP DATABASE [TestRestore] FILEGROUP = N'FGMy2' TO
DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\FGMy2_FG.bak' WITH NOFORMAT, NOINIT,
NAME = N'FGMy2',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP LOG [TestRestore] TO DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Log_F.bak'
Go
/* DB DZĒŠANA */
Use master;
Drop Database [TestRestore];
/*
PARTIAL RESTORE
Interesantā daļa. Datu bāze tiek atjaunota trijos soļos:
* pirmajā solī tiek atjaunota tikai datu bāzes metadati (jo nekas cits nav Primary failu grupā)
* otrajā solī tiek atjonota failu grupa FG1, padara pieejamu tabulu T1
-> ar šo tabulu var sākt strādāt.
* trešajā solī tiek atjonota failu grupa FG2, padara pieejamu tabulu T2
-> datu bāze ir pilnībā funkcionējoša.
*/
Go
RESTORE DATABASE [TestRestore] FILEGROUP='Primary'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Primary_FG.bak'
WITH PARTIAL, NORECOVERY; -- Atslēgvārds "PARTIAL!"
RESTORE LOG [TestRestore] FILEGROUP='Primary'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Log_F.bak'
WITH RECOVERY;
Go
Use TestRestore;
exec sp_help 'T1' -- strādās, atgriež tabulas info
exec sp_help 'T2' -- strādās, atgriež tabulas info
--select * From dbo.T1 -- KĻŪDA! (jo atrodas FG, kas vēl nav atjaunota)
--select * From dbo.T2 -- KĻŪDA! (jo atrodas FG, kas vēl nav atjaunota)
Go
use master;
RESTORE DATABASE [TestRestore] FILEGROUP='FGMy'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\FGMy_FG.bak'
WITH NORECOVERY; -- NAV atslēgvārds "PARTIAL!" (to tikai 1.)
RESTORE LOG [TestRestore] FILEGROUP='FGMy'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Log_F.bak'
WITH RECOVERY;
Go
Use TestRestore;
exec sp_help 'T1' -- strādās, atgriež tabulas info
exec sp_help 'T2' -- strādās, atgriež tabulas info
select * From dbo.T1 -- strādās!
--select * From dbo.T2 -- KĻŪDA! (jo atrodas FG, kas vēl nav atjaunota)
Go
use master;
RESTORE DATABASE [TestRestore] FILEGROUP='FGMy2'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\FGMy2_FG.bak'
WITH NORECOVERY;
RESTORE LOG [TestRestore] FILEGROUP='FGMy2'
FROM DISK = N'C:\MSSQL11.MSSQLSERVER\MSSQL\Backup\Log_F.bak'
WITH RECOVERY;
Go
Use TestRestore;
exec sp_help 'T1' -- strādās, atgriež tabulas info
exec sp_help 'T2' -- strādās, atgriež tabulas info
select * From dbo.T1 -- strādās!
select * From dbo.T2 -- strādās!
Nav komentāru:
Ierakstīt komentāru