1- /*
2- Get RESTORE statement for databases Keeping pre-existing FILE STRUCTURE
3- Run on Target (Destination)
4- */
51SET NOCOUNT ON ;
62
73declare @p_dbName varchar (100 );
4+ declare @_backupFile varchar (2000 );
5+ declare @_SourceServer varchar (255 ) = ' TUL1MDPDWMID01' ;
86declare @sqlRestoreText varchar (max );
7+ declare @tsqlFetchLastBackup varchar (max );
98declare @counter int = 1 ;
109declare @total_counts int ;
10+ DECLARE @SourceBackups TABLE (DbName varchar (125 ), FullBackupFile varchar (2000 ));
1111
1212IF OBJECT_ID (' tempdb..#Dbs' ) IS NOT NULL
1313 DROP TABLE #Dbs;
1414SELECT ROW_NUMBER ()OVER (ORDER BY dbName) as ID, dbName
1515INTO #Dbs
1616FROM (VALUES
17- (' AMG_AVG' ),(' AMG_Extra' ),(' AMG_Music' ),(' AMG_MusicMore' ),(' Babel' ),(' DSG_EU' ),(' Facebook' ),
18- (' Mosaic' ),(' MuzeUK' ),(' MuzeUS' ),(' MuzeVideo' ),(' Prism' ),(' RGS' ),(' RCM_rovicore_20130710_NoMusic1a_en-US' ),
19- (' Sky' ),(' Staging' ),(' Staging2' ),(' Twitter' ),(' TVGolConfigs' ),(' UKVideo' )
17+ (' Mosaic' ),(' MuzeUS' ),(' RCM_rovicore_20130710_NoMusic1a_en-US' ),(' Staging' ),(' Babel' )
2018 ) Databases(dbName);
21- set @p_dbName = ' Cosmo' ;
2219
2320select @total_counts = count (* ) from #Dbs;
2421
22+ IF @_SourceServer IS NOT NULL
23+ BEGIN
24+ SET @tsqlFetchLastBackup = '
25+ SELECT *
26+ FROM OPENROWSET('' SQLNCLI'' , '' Server=' + @_SourceServer+ ' ;Trusted_Connection=yes;'' , '' select DbName, FullBackupFile from DBA..Vw_Latest_Backups'' ) AS v;
27+ ' ;
28+
29+ INSERT @SourceBackups
30+ EXEC (@tsqlFetchLastBackup);
31+ END
32+
33+
2534while @counter <= @total_counts
2635BEGIN
36+ SELECT @_backupFile = NULL ,@sqlRestoreText = ' ' ;
2737 SELECT @p_dbName = dbName FROM #Dbs d WHERE d .ID = @counter;
2838
39+ IF @_SourceServer IS NOT NULL
40+ BEGIN
41+ SELECT @_backupFile = v .FullBackupFile
42+ FROM @SourceBackups AS v
43+ WHERE DbName = @p_dbName;
44+
45+ SET @_backupFile = CASE WHEN CHARINDEX (' :' ,@_backupFile) > 0 THEN ' \\TUL1MDPDWMID01\'+ REPLACE (@_backupFile,' :' ,' $' ) ELSE @_backupFile END ;
46+ END
47+
2948 set @sqlRestoreText = '
30- RESTORE DATABASE ' + QUOTENAME (@p_dbName)+ ' FROM DISK = N'' Your-Backup-File-Path-in-Here''
31- WITH RECOVERY
49+ USE master;
50+ go
51+ EXEC master..sp_Kill @p_DbName = '' ' + @p_dbName+ ' '' ,@p_Force = 1;
52+ go
53+ RESTORE DATABASE ' + QUOTENAME (@p_dbName)+ ' FROM DISK = N'' '+ CASE WHEN @_backupFile IS NOT NULL THEN @_backupFile ELSE ' Your-Backup-File-Path-in-Here' END + ' ''
54+ WITH NORECOVERY
3255 ,STATS = 3
3356 ,REPLACE
3457 ' ;
@@ -37,14 +60,51 @@ BEGIN
3760 ' ,MOVE N'' '+ name + ' '' TO N'' '+ physical_name+ ' ''
3861 '
3962 from sys .master_files as mf
40- where DB_NAME (mf .database_id ) IN (' AMG_AVG' ,' AMG_Extra' ,' AMG_Music' ,' AMG_MusicMore' ,' Babel' ,' DSG_EU' ,' Facebook' ,' Mosaic' ,
41- ' MuzeUK' ,' MuzeUS' ,' MuzeVideo' ,' Prism' ,' RGS' ,' RCM_rovicore_20130710_NoMusic1a_en-US' ,' Sky' ,' Staging' ,' Staging2' ,' Twitter' ,
42- ' TVGolConfigs' ,' UKVideo' );
63+ where mf .database_id = DB_ID (@p_dbName);
4364
4465 SET @sqlRestoreText + = '
4566 GO'
4667
4768 PRINT @sqlRestoreText;
4869
70+ SELECT @_backupFile = ' ' ,@sqlRestoreText = ' ' , @p_dbName = ' ' ;
4971 SET @counter + = 1 ;
5072END
73+
74+ /*
75+ USE [DBA]
76+ GO
77+ ALTER VIEW [dbo].[Vw_Latest_Backups] AS
78+ WITH T_Latest_Full AS
79+ (
80+ SELECT ROW_NUMBER()OVER(PARTITION BY bs.type ,bs.database_name ORDER BY bs.backup_finish_date DESC) as rownum,
81+ CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SERVER
82+ ,bs.database_name
83+ ,bs.backup_start_date
84+ ,bmf.physical_device_name
85+ ,checkpoint_lsn
86+ FROM msdb.dbo.backupmediafamily AS bmf
87+ INNER JOIN msdb.dbo.backupset AS bs ON bmf.media_set_id = bs.media_set_id
88+ WHERE bs.type='D'
89+ and bs.is_copy_only = 0
90+ --and bmf.physical_device_name like 'F:\dump\FullBackups2\%'
91+ )
92+ SELECT f.SERVER as Server, f.database_name as DbName, f.physical_device_name as FullBackupFile,
93+ f.backup_start_date as FullBackupStartDate, f.checkpoint_lsn as Full_checkpoint_lsn
94+ ,d.physical_device_name as DiffBackupFile ,d.backup_start_date as DiffBackupStartDate ,d.database_backup_lsn as Diff_database_backup_lsn
95+ FROM T_Latest_Full as f
96+ outer apply
97+ ( SELECT TOP (1) bs.backup_start_date
98+ ,bmf.physical_device_name
99+ ,bs.database_backup_lsn
100+ FROM msdb..backupmediafamily AS bmf
101+ INNER JOIN msdb.dbo.backupset AS bs ON bmf.media_set_id = bs.media_set_id
102+ WHERE bs.type='I' and bs.database_name = f.database_name
103+ and f.checkpoint_lsn = bs.database_backup_lsn
104+ and bs.is_copy_only = 0
105+ and bmf.physical_device_name like 'F:\dump\DiffBackups\%'
106+ order by backup_start_date desc
107+ ) AS d
108+ where F.rownum = 1;
109+ GO
110+ */
0 commit comments