Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. /* 1. stored procedure to fill msdb..restorelist_files */
  2.  
  3. USE [msdb]
  4.  
  5. IF object_id('ps_restore_filelist') IS NOT NULL
  6. drop procedure ps_restore_filelist
  7. go
  8.  
  9. CREATE PROCEDURE dbo.ps_restore_filelist
  10. @backup_path NVARCHAR(MAX)
  11. AS
  12. BEGIN
  13. SET NOCOUNT ON;
  14. RESTORE FILELISTONLY FROM DISK = @backup_path;
  15. END
  16. GO
  17.  
  18. /* 2. create table to store filelistpaths */
  19. IF OBJECT_ID('msdb..restorelist_files') IS NOT NULL DROP TABLE msdb..restorelist_files
  20. create table msdb..restorelist_files(
  21. LogicalName varchar(255),
  22. PhysicalName varchar(255),
  23. Type varchar(255),
  24. FileGroupName varchar(255),
  25. Size varchar(255),
  26. MaxSize varchar(255),
  27. FileId varchar(255),
  28. CreateLSN varchar(255),
  29. DropLSN varchar(255),
  30. UniqueId varchar(255),
  31. ReadOnlyLSN varchar(255),
  32. ReadWriteLSN varchar(255),
  33. BackupSizeInBytes varchar(255),
  34. SourceBlockSize varchar(255),
  35. FileGroupId varchar(255),
  36. LogGroupGUID varchar(255),
  37. DifferentialBaseLSN varchar(255),
  38. DifferentialBaseGUID varchar(255),
  39. IsReadOnly varchar(255),
  40. IsPresent varchar(255),
  41. TDEThumbprint varchar(255))
  42.  
  43. /* 3. fill table with files and their paths */
  44. TRUNCATE TABLE msdb..restorelist_files
  45. GO
  46.  
  47. DECLARE @BACKUP_PATH as nvarchar(max) = N'Z:BACKUPSMY_DATABASE_BACKUP.bak'
  48.  
  49. /* execute stored procedure that will recover list of files for this backup */
  50. insert into msdb..restorelist_files
  51. exec ps_restore_filelist @BACKUP_PATH
  52.  
  53. /* create the MOVE TO portion of the restore database statement using the new path name based on the service/instance name */
  54. DECLARE @instance_name as varchar(255) = @@SERVICENAME
  55. DECLARE @path_name as varchar(255) = 'MSSQL10_50.' + @instance_name + 'DATA'
  56. DECLARE @DB as varchar(50) = 'STAGING_DB'
  57. DECLARE @SQL_RESTORE as nvarchar(max)
  58.  
  59. SELECT 'MOVE N''' + LogicalName + '''TO N''' + LEFT(physicalname, CHARINDEX('.', REVERSE(physicalname)) - 1) +
  60. @path_name +
  61. REVERSE(LEFT(REVERSE(physicalname),CHARINDEX('', REVERSE(physicalname), 1) - 1)) + ''','
  62. from msdb..restorelist_files
  63.  
  64. MOVE N'MY_DATABASE'TO N'D:MSSQL10_50.INSTANCEDATAMY_DATABASE.mdf',
  65. MOVE N'MY_DATABASE_1'TO N'E:MSSQL10_50.INSTANCEDATAMY_DATABASE_1.ndf',
  66. MOVE N'MY_DATABASE_2'TO N'F:MSSQL10_50.INSTANCEDATAMY_DATABASE_2.ndf',
  67. MOVE N'MY_DATABASE_3'TO N'G:MSSQL10_50.INSTANCEDATAMY_DATABASE_3.ndf',
  68. MOVE N'MY_DATABASE_4'TO N'H:MSSQL10_50.INSTANCEDATAMY_DATABASE_4.ndf',
  69. MOVE N'MY_DATABASE_5'TO N'I:MSSQL10_50.INSTANCEDATAMY_DATABASE_5.ndf',
  70. MOVE N'MY_DATABASE_6'TO N'J:MSSQL10_50.INSTANCEDATAMY_DATABASE_6.ndf',
  71. MOVE N'MY_DATABASE_7'TO N'K:MSSQL10_50.INSTANCEDATAMY_DATABASE_7.ndf',
  72. MOVE N'MY_DATABASE_log'TO N'D:MSSQL10_50.INSTANCEDATAMY_DATABASE_8.ldf',
  73. MOVE N'MY_DATABASE_log_1'TO N'E:MSSQL10_50.INSTANCEDATAMY_DATABASE_9.ldf',
  74. MOVE N'MY_DATABASE_log_2'TO N'F:MSSQL10_50.INSTANCEDATAMY_DATABASE_10.ldf',
  75. MOVE N'MY_DATABASE_log_3'TO N'G:MSSQL10_50.INSTANCEDATAMY_DATABASE_11.ldf',
  76. MOVE N'MY_DATABASE_log_4'TO N'H:MSSQL10_50.INSTANCEDATAMY_DATABASE_12.ldf',
  77. MOVE N'MY_DATABASE_log_5'TO N'I:MSSQL10_50.INSTANCEDATAMY_DATABASE_13.ldf',
  78. MOVE N'MY_DATABASE_log_6'TO N'J:MSSQL10_50.INSTANCEDATAMY_DATABASE_14.ldf',
  79. MOVE N'MY_DATABASE_log_7'TO N'K:MSSQL10_50.INSTANCEDATAMY_DATABASE_15.ldf',
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement