More complex script when full file paths are required

This one is not my script, but it's too useful not to share.  I ran into an issue while trying to move from a source of SQL 2008 to a destination of SQL 2008 R2 that my restore failed because the file paths were not the same.  So I used this script to generate the backup and restore commands.


SET NOCOUNT ON
DECLARE @Table TABLE (LogicalName varchar(128),[PhysicalName] varchar(128), [Type] varchar, [FileGroupName] varchar(128), [Size] varchar(128),
            [MaxSize] varchar(128), [FileId]varchar(128), [CreateLSN]varchar(128), [DropLSN]varchar(128), [UniqueId]varchar(128), [ReadOnlyLSN]varchar(128), [ReadWriteLSN]varchar(128),
            [BackupSizeInBytes]varchar(128), [SourceBlockSize]varchar(128), [FileGroupId]varchar(128), [LogGroupGUID]varchar(128), [DifferentialBaseLSN]varchar(128), [DifferentialBaseGUID]varchar(128), [IsReadOnly]varchar(128), [IsPresent]varchar(128), [TDEThumbprint]varchar(128))
DECLARE @CMDTable TABLE (Command varchar(4000))
DECLARE @CMDTable2 TABLE (Command varchar(4000))
DECLARE @Name varchar(255),
  @FullFilePath varchar(255),
  @DiffFilePath varchar(255),
  @cmd varchar(4000),
  @LogicalNameData varchar(128),
  @LogicalNameLog varchar(128)
DECLARE MyCursor CURSOR FOR SELECT name FROM sys.databases WHERE NOT owner_sid = 0x01
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
 SET @FullFilePath = '\\BJOCA4AFGNSP102\B$\SQL\FULL\'+ @Name +'.BAK'
 SET @DiffFilePath = '\\BJOCA4AFGNSP102\B$\SQL\DIFF\'+ @Name +'.BAK'
 SET @cmd = 'BACKUP DATABASE ['+ @Name +'] TO DISK = ''' + @FullFilePath + ''' WITH FORMAT, STATS=10'
 INSERT INTO @CMDTable(Command) VALUES (@cmd)
 SET @cmd = 'BACKUP DATABASE ['+ @Name +'] TO DISK = ''' + @DiffFilePath + ''' WITH FORMAT, DIFFERENTIAL, STATS=10'
 INSERT INTO @CMDTable(Command) VALUES (@cmd)
 INSERT INTO @table EXEC('RESTORE FILELISTONLY FROM DISK=''' + @FullFilePath + '''')
 SET @LogicalNameData=(SELECT LogicalName FROM @Table WHERE Type='D')
 SET @LogicalNameLog=(SELECT LogicalName FROM @Table WHERE Type='L')
 SET @cmd = 'RESTORE DATABASE ['+ @Name +'] FROM DISK = ''' + @FullFilePath + ''' WITH MOVE ''' + @LogicalNameLog + ''' TO ''L:\LogFiles\' + @Name + '.LDB'',  MOVE ''' + @LogicalNameData + ''' TO ''M:\DATA\' + @Name + '.MDB'', REPLACE, NORECOVERY'
 INSERT INTO @CMDTable2(Command) VALUES (@cmd)
 SET @cmd = 'RESTORE DATABASE ['+ @Name +'] FROM DISK = ''' + @DiffFilePath + ''' WITH MOVE ''' + @LogicalNameLog + ''' TO ''L:\LogFiles\' + @Name + '.LDB'',  MOVE ''' + @LogicalNameData + ''' TO ''M:\DATA\' + @Name + '.MDB'', RECOVERY'
 INSERT INTO @CMDTable2(Command) VALUES (@cmd)
 DELETE @Table
 FETCH NEXT FROM MyCursor INTO @Name
END
CLOSE MyCursor
DEALLOCATE MyCursor

SELECT Command AS 'Run at source' FROM @CMDTable
SELECT Command AS 'Run at destination' FROM @CMDTable2

Comments

Popular posts from this blog

Setting SharePoint announcements to auto delete after expiration

Updating a single field in a SharePoint List using Power Automate Flows

SharePoint driven rich text dashboard using jqueryui. (JQuery file)