Automatyzacja procesu odtwarania bazy danych
Przeanalizuj kod poniższej procedury i utwórz ją bazie master.
Utwórz bazę danych demo. Ustaw dla niej recovery model na full. Stwórz w bazie dowolną tabelę i wstaw do niej dwa wiersze. Wykonaj pełen backup bazy demo. Wstaw do tabeli kolejne dwa wiersze.
Zatrzymaj SQL Server i skasuj tylko pliki danych bazy demo. Uruchom SQL Server. Wywołaj utworzoną procedurę dla bazy demo. Czy procedura ta odtworzy bazę danych demo do momnetu awarii.
Dokonaj modyfikacji procedury tak aby w przypadku awarii potrafiła wykonać backup ogonka logu, odtwórzyć ostatni pełen backup, wszyzstkie wykonane po nim kopie logu, ogonek logu.
create procedure [dbo].[getRestoreSequence] @dbName varchar(200) ,
@backupLoc varchar(200) as begin
declare @row varchar(400)
set @row = 'backup log '+@dbName+ ' to disk='''+@backupLoc+ ''' with continue_after_error'
print @row exec(@row)
declare bk cursor for
select 'restore database '+ bs.database_name + ' from disk = '''+
bmf.physical_device_name + ''' with norecovery'
from msdb.dbo.backupset bs join msdb.dbo.backupmediaset bms on bs.media_set_id=bms.media_set_id
join msdb.dbo.backupmediafamily bmf on bmf.media_set_id=bms.media_set_id
where bs.database_name=@dbName and bs.backup_finish_date >= (select max(backup_finish_date) from msdb.dbo.backupset where type='D') order by bs.backup_set_id asc
OPEN bk;
FETCH NEXT FROM bk INTO @row;
WHILE @@FETCH_STATUS=0 BEGIN
print @row exec(@row)
FETCH NEXT FROM bk INTO @row;
END CLOSE bk DEALLOCATE bk
print 'restore database '+ @dbName+ ' with recovery' exec('restore database '+ @dbName+ ' with recovery') end
GO
exec [dbo].[getRestoreSequence] 'demo','F:\backup\log\demo_ogonek.bak'