Advertisement
tei219

sqlserver database backup and restore script

Oct 30th, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.68 KB | None | 0 0
  1. declare @@cmd varchar(8000)
  2. declare @@datetime varchar(15)
  3. declare @@backup_path varchar(8000)
  4. declare @@restore_data_path varchar(8000)
  5. declare @@restore_log_path varchar(8000)
  6. declare @@backup_option varchar(100)
  7. declare @@change smallint
  8. declare @@replace_overwrite smallint
  9. declare @@copy_only smallint
  10.  
  11. /* config ************************************************/
  12. --バックアップファイルを置く場所
  13. set @@backup_path = '\\backupserver\'
  14. --データファイルを置く場所
  15. set @@restore_data_path = 'A:\MSSQL11.TEST\MSSQL\DATA'
  16. --ログファイルを置く場所
  17. set @@restore_log_path = 'B:\MSSQL11.TEST\MSSQL\DATA'
  18. --※細かく配置替えする場合はrestoreコマンドを直接直してください
  19.  
  20. --restoreの際、配置換えをする場合は1を指定してください
  21. set @@change = 1
  22. --restoreの際、既にあるデータベースに上書きする場合は1を指定してください
  23. set @@replace_overwrite = 0
  24. --バックアップオプションに COPY_ONLY を追加する場合は1を指定してください
  25. set @@copy_only = 0
  26. /*********************************************************/
  27.  
  28. if right(@@backup_path,1) <> '\' set @@backup_path = @@backup_path+'\'
  29. if right(@@restore_data_path,1) <> '\' set @@restore_data_path = @@restore_data_path+'\'
  30. if right(@@restore_log_path,1) <> '\' set @@restore_log_path = @@restore_log_path+'\'
  31. set @@datetime = convert(varchar,getdate(),112)+replace(convert(varchar(8), getdate(),114),':','')
  32. set @@backup_option = ''
  33. if @@copy_only = 1
  34. begin
  35.     set @@backup_option = 'COPY_ONLY, '
  36. end
  37. set @@cmd = '
  38. if ''?'' not in (select name from master..sysdatabases where cast(case when name in (''master'',''model'',''msdb'',''tempdb'') then 1 else category&16 end as bit) = 1)
  39. begin
  40.     use ?
  41.     declare @@mdf_spec varchar(8000)
  42.     declare @@ldf_spec varchar(8000)
  43.     declare @@replace_spec varchar(8000)
  44.     set @@mdf_spec = ''''
  45.     set @@ldf_spec = ''''
  46.     set @@replace_spec = ''''
  47.  
  48.     --for backup
  49.     print ''use [?]; backup database [?] to disk = N'''''+@@backup_path+replace(@@servername,'\','_')+'-'+'?_'+@@datetime+'.bak'''' with '+@@backup_option+'noinit, nounload, name = ''''Backup database [?] at '+convert(varchar, getdate(), 121)+''''', noskip, stats = 10, noformat''
  50.  
  51.     if 0='+cast(@@change as varchar)+'
  52.     begin
  53.         select @@mdf_spec = ''''''''+rtrim(name)+'''''' to N''''''+rtrim(filename)+'''''', move ''+@@mdf_spec from sysfiles where groupid <> 0 order by fileid desc
  54.         select @@ldf_spec = ''''''''+rtrim(name)+'''''' to N''''''+rtrim(filename)+'''''', move ''+@@ldf_spec from sysfiles where groupid = 0 order by fileid desc
  55.     end
  56.     else
  57.     begin
  58.         select @@mdf_spec = ''''''''+rtrim(name)+'''''' to '''''+@@restore_data_path+'''+reverse(substring(reverse(rtrim(filename)),0,charindex(''\'', reverse(rtrim(filename)))))+'''''', move ''+@@mdf_spec from sysfiles where groupid <> 0 order by fileid desc
  59.         select @@ldf_spec = ''''''''+rtrim(name)+'''''' to '''''+@@restore_log_path+'''+reverse(substring(reverse(rtrim(filename)),0,charindex(''\'', reverse(rtrim(filename)))))+'''''', move ''+@@ldf_spec from sysfiles where groupid = 0 order by fileid desc
  60.     end
  61.     set @@mdf_spec = left(@@mdf_spec,len(@@mdf_spec)-6)
  62.     set @@ldf_spec = left(@@ldf_spec,len(@@ldf_spec)-6)
  63.  
  64.     --for restore
  65.     if 1='+cast(@@replace_overwrite as varchar)+'
  66.     begin
  67.         set @@replace_spec = ''with replace''
  68.     end
  69.     else
  70.     begin
  71.         set @@replace_spec = ''with move ''+@@mdf_spec+'', move ''+@@ldf_spec+'', nounload, stats = 10''
  72.     end
  73.     print ''--use [master]; restore database [?] from disk = N'''''+@@backup_path+replace(@@servername,'\','_')+'-'+'?_'+@@datetime+'.bak'''' ''+@@replace_spec
  74.     print ''''
  75. end
  76. '
  77. --print @@cmd
  78. exec sp_MSforeachdb @command1 = @@cmd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement