Advertisement
mikedopp

SQLServerRestoreDatabaseFromFIle

Aug 19th, 2015
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 2.71 KB | None | 0 0
  1. -----------------------------------------------------------------
  2. -- Restore database from file
  3. -----------------------------------------------------------------
  4. use master
  5. go
  6.  
  7. declare @backupFileName varchar(100), @restoreDirectory varchar(100),
  8.     @databaseDataFilename varchar(100), @databaseLogFilename varchar(100),
  9.     @databaseDataFile varchar(100), @databaseLogFile varchar(100),
  10.     @databaseName varchar(100), @execSql nvarchar(1000)
  11.  
  12. -- Set the name of the database to restore
  13. set @databaseName = 'myDatabase'
  14. -- Set the path to the directory containing the database backup
  15. set @restoreDirectory = 'aboslute_path_to_restore_directory' -- such as 'c:\temp\'
  16.  
  17. -- Create the backup file name based on the restore directory, the database name and today's date
  18. set @backupFileName = @restoreDirectory + @databaseName + '-' + replace(convert(varchar, getdate(), 110), '-', '.') + '.bak'
  19.  
  20. -- Get the data file and its path
  21. select  @databaseDataFile = rtrim([Name]),
  22.     @databaseDataFilename = rtrim([Filename])
  23. from    master.dbo.sysaltfiles as files
  24.     inner join
  25.     master.dbo.sysfilegroups as groups
  26.     on
  27.     files.groupID = groups.groupID
  28. where   DBID = (
  29.         select  dbid
  30.         from    master.dbo.sysdatabases
  31.         where   [Name] = @databaseName
  32.     )
  33.  
  34. -- Get the log file and its path
  35. select  @databaseLogFile = rtrim([Name]),
  36.     @databaseLogFilename = rtrim([Filename])
  37. from    master.dbo.sysaltfiles as files
  38. where   DBID = (
  39.         select  dbid
  40.         from    master.dbo.sysdatabases
  41.         where   [Name] = @databaseName
  42.     )
  43.     and
  44.     groupID = 0
  45.  
  46. print 'Killing active connections to the "' + @databaseName + '" database'
  47.  
  48. -- Create the sql to kill the active database connections
  49. set @execSql = ''
  50. select  @execSql = @execSql + 'kill ' + convert(char(10), spid) + ' '
  51. from    master.dbo.sysprocesses
  52. where   db_name(dbid) = @databaseName
  53.     and
  54.     DBID <> 0
  55.     and
  56.     spid <> @@spid
  57. exec (@execSql)
  58.  
  59. print 'Restoring "' + @databaseName + '" database from "' + @backupFileName + '" with '
  60. print '  data file "' + @databaseDataFile + '" located at "' + @databaseDataFilename + '"'
  61. print '  log file "' + @databaseLogFile + '" located at "' + @databaseLogFilename + '"'
  62.  
  63. set @execSql = '
  64. restore database [' + @databaseName + ']
  65. from disk = ''' + @backupFileName + '''
  66. with
  67.   file = 1,
  68.   move ''' + @databaseDataFile + ''' to ' + '''' + @databaseDataFilename + ''',
  69.   move ''' + @databaseLogFile + ''' to ' + '''' + @databaseLogFilename + ''',
  70.   norewind,
  71.   nounload,
  72.   replace'
  73.  
  74. exec sp_executesql @execSql
  75.  
  76. exec('use ' + @databaseName)
  77. go
  78.  
  79. -- If needed, restore the database user associated with the database
  80. /*
  81. exec sp_revokedbaccess 'myDBUser'
  82. go
  83.  
  84. exec sp_grantdbaccess 'myDBUser', 'myDBUser'
  85. go
  86.  
  87. exec sp_addrolemember 'db_owner', 'myDBUser'
  88. go
  89.  
  90. use master
  91. go
  92. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement