June 9, 2010 at 7:09 am
I recently upgraded to SQL 2008 from SQL 2005 on my backup production machine (primarily used for testing). I use a maintenance plan to create my backups. Under 2005 the file name that was created was the database name with "_backup_datetime.bak" appended. For example:
TestDB_backup_201005260400.bak
After the upgrade I'm getting filenames similiar to the following:
TestDB_backup_2010_06_09_040006_8466528.bak
As you can see there is a considerable difference in the file names. Does anyone know how to get it to use the old file name?
The reason (if you curios) is I use scripts the move and restore the database from production to the test machine and need to know the actual file name to execute the restore operation. While I'm sure I can write a script to determine the file name from the OS it was much easier when I KNEW what the file name would be since the DB backed up every day at the same time (we are not talking about huge databases here, so 99% of the time I knew what the file name, down to the minute, would be).
Thanks,
James.
June 17, 2010 at 7:47 am
I found the solution in another post: http://www.sqlservercentral.com/Forums/Topic506723-357-1.aspx
Here is my implementation -
declare @FileName_ varchar(100)
declare @RestoreFile_ varchar(200)
declare @Path_ varchar(1000)
Set @Path_ = 'D:\Backups\DB_Backups\Dev15\Production'
declare @t_ table (subdirectory_ varchar(500),depth_ int,file_ int) --columns match output from xp_dirtree
insert into @t_ EXECUTE xp_dirtree @Path_, 1, 1 --NOTE: xp_dirtree is an undocumented proc
--File_ = 1 (true) = 0 (false), 0 = non-file like a directory name
delete from @t_ where depth_ <> 1 or file_ <> 1 or subdirectory_ not like 'mydbname_backup%'
select @filename_ = max(subdirectory_) from @t_
print 'Backup File Name = ' + @filename_
set @RestoreFile_ = '' + @Path_ + '\' + @FileName_ + ''
RESTORE FILELISTONLY FROM
DISK= @RestoreFile_;
ALTER DATABASE mydbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE mydbname
FROM DISK = @RestoreFile_
WITH REPLACE,
MOVE 'mydbname_Dat01' TO 'D:\SQLData\mydbname_Dat01.mdf',
MOVE 'mydbname_Log01' TO 'D:\SQLData\mydbname_Log01.ldf',
MOVE 'ftrow_mydbname_FTCatalog_' TO 'D:\SQLData\FullTextCatalogs\mydbname_FTCatalog_',
RECOVERY;
--EXEC sp_dboption 'DISAM_Internal', 'read only', 'true'
ALTER DATABASE mydbname SET RECOVERY SIMPLE, MULTI_USER WITH ROLLBACK IMMEDIATE
Viewing 2 posts - 1 through 1 (of 1 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy