Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare @@cmd varchar(8000)
- declare @@datetime varchar(15)
- declare @@backup_path varchar(8000)
- declare @@restore_data_path varchar(8000)
- declare @@restore_log_path varchar(8000)
- declare @@backup_option varchar(100)
- declare @@change smallint
- declare @@replace_overwrite smallint
- declare @@copy_only smallint
- /* config ************************************************/
- --バックアップファイルを置く場所
- set @@backup_path = '\\backupserver\'
- --データファイルを置く場所
- set @@restore_data_path = 'A:\MSSQL11.TEST\MSSQL\DATA'
- --ログファイルを置く場所
- set @@restore_log_path = 'B:\MSSQL11.TEST\MSSQL\DATA'
- --※細かく配置替えする場合はrestoreコマンドを直接直してください
- --restoreの際、配置換えをする場合は1を指定してください
- set @@change = 1
- --restoreの際、既にあるデータベースに上書きする場合は1を指定してください
- set @@replace_overwrite = 0
- --バックアップオプションに COPY_ONLY を追加する場合は1を指定してください
- set @@copy_only = 0
- /*********************************************************/
- if right(@@backup_path,1) <> '\' set @@backup_path = @@backup_path+'\'
- if right(@@restore_data_path,1) <> '\' set @@restore_data_path = @@restore_data_path+'\'
- if right(@@restore_log_path,1) <> '\' set @@restore_log_path = @@restore_log_path+'\'
- set @@datetime = convert(varchar,getdate(),112)+replace(convert(varchar(8), getdate(),114),':','')
- set @@backup_option = ''
- if @@copy_only = 1
- begin
- set @@backup_option = 'COPY_ONLY, '
- end
- set @@cmd = '
- 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)
- begin
- use ?
- declare @@mdf_spec varchar(8000)
- declare @@ldf_spec varchar(8000)
- declare @@replace_spec varchar(8000)
- set @@mdf_spec = ''''
- set @@ldf_spec = ''''
- set @@replace_spec = ''''
- --for backup
- 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''
- if 0='+cast(@@change as varchar)+'
- begin
- select @@mdf_spec = ''''''''+rtrim(name)+'''''' to N''''''+rtrim(filename)+'''''', move ''+@@mdf_spec from sysfiles where groupid <> 0 order by fileid desc
- select @@ldf_spec = ''''''''+rtrim(name)+'''''' to N''''''+rtrim(filename)+'''''', move ''+@@ldf_spec from sysfiles where groupid = 0 order by fileid desc
- end
- else
- begin
- 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
- 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
- end
- set @@mdf_spec = left(@@mdf_spec,len(@@mdf_spec)-6)
- set @@ldf_spec = left(@@ldf_spec,len(@@ldf_spec)-6)
- --for restore
- if 1='+cast(@@replace_overwrite as varchar)+'
- begin
- set @@replace_spec = ''with replace''
- end
- else
- begin
- set @@replace_spec = ''with move ''+@@mdf_spec+'', move ''+@@ldf_spec+'', nounload, stats = 10''
- end
- print ''--use [master]; restore database [?] from disk = N'''''+@@backup_path+replace(@@servername,'\','_')+'-'+'?_'+@@datetime+'.bak'''' ''+@@replace_spec
- print ''''
- end
- '
- --print @@cmd
- exec sp_MSforeachdb @command1 = @@cmd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement