/**//********************************************************************************* * FielName : backup.sql * Function : 自动备份 * Author : Yahong<Yahongq111@163.com> * Date : 2005-5-10 2005-5-19 2006-8-1 2007-09-18 * Version : 00 01 02 03 * * Remark : * 2006-08-01 增加差异备份和完全备份两种情况,生成多个备份副本 * 2008-09-18 增加备份一个实例中的所有数据库的情况,并在备份后清除日志 * *********************************************************************************/ use master declare @DbName varchar(255),@dir varchar(256),@dir_db varchar(256), @verb varchar(256),@cmd varchar(256), @backup_name varchar(256),@dynamic_name varchar(10), @disk_name varchar(256),@copy nvarchar(100), @today datetime,@weekday int --建立网络连接 exec xp_cmdshell \'net use K: /delete\' exec xp_cmdshell \'net use I: /delete\' exec xp_cmdshell \'net use K: \\193.254.40.118\backup backup /user:Web\backup \' exec xp_cmdshell \'net use I: \\172.16.8.48\databackup backup /user:QA-SERVER-TEST\backup\' --设定名字 set @today=getdate() set @dynamic_name=convert(varchar(10),@today,120) set @dir=\'K:\\'+@dynamic_name set @dir_db=@dir+\'Database\' set @verb=\'mkdir \' --建立目录 set @cmd=@verb+@dir_db exec xp_cmdshell @cmd declare cur_database cursor forward_only read_only for select name from sysdatabases where dbid>4 --系统数据库的dbid<=4 open cur_database fetch next from cur_database into @DbName while @@fetch_status=0 begin set @backup_name= @DbName+\'_\'+@dynamic_name set @disk_name=@dir_db+\'\\'+@backup_name+\'.bak\' --添加备份设备 EXEC sp_addumpdevice \'disk\',@backup_name, @disk_name set @weekday= datepart(dw,@today) if (@weekday=6) --如果是周五,则进行完全备份 BACKUP DATABASE @DbName TO @backup_name else --其他时候进行差异备份 BACKUP DATABASE @DbName TO @backup_name with differential --清理日志 backup log @DbName with no_log --释放设备 exec sp_dropdevice @backup_name --复制备份副本到其他地方 set @copy=\'copy \'+@disk_name+\' I:\' exec xp_cmdshell @copy --备份下一个数据库 fetch next from cur_database into @DbName end close cur_database deallocate cur_database --删除网络连接 exec xp_cmdshell \'net use K: /delete\' exec xp_cmdshell \'net use I: /delete\' /**//****************************************************************************** * * File Name : Restore.sql * Function : 数据库还原 * Author : Yahong<Yahongq111@163.com> * Version : 00 * Date : 2007-09-18 * Remark : * *******************************************************************************/ use master declare @DbName varchar(255) --数据库的名字 ,@WholeFileName varchar(255) --完全备份的文件名 ,@DifferentFileName varchar(255) --差异备份的文件名 ,@MasterFileName varchar(255) --数据文件名,注意他们都是逻辑名称 ,@LogFileName varchar(255) --日志文件名 ,@TargetDir varchar(255) --还原后数据库文件所在的路径,如果没有指定该参数, --则必须存在与原数据库相同的路径 declare @WholeDeviceName varchar(255) ,@DifferenctDeviceName varchar(255) ,@TargetMasterFileName varchar(255) ,@TargetLogFileName varchar(255) --建立网络链接 exec xp_cmdshell \'net use K: \\172.16.8.48\200709 backup /User:qa-server-test\backup\' --在这里设置需要备份的文件等信息 set @DbName=\'CCTQA\' --需要还原的数据库的名字,注意不要搞错了,否则 --覆盖了其他的数据库,可别说我没有提醒你 set @WholeFileName=\'CCTQA_2007-09-14.bak\' --完全备份文件 --以下4行如果没有,不要指定,把他们注释掉就行了 set @DifferentFileName=\'CCTQA_2007-09-17.bak\' --最后一次差异备份文件 set @MasterFileName=\'CCTQA_Data\' --数据文件 set @LogFileName=\'CCTQA_Log\' --日志文件 set @TargetDir=\'D:\CCTQA\Databae\' --目标路径 --设置目标路径 set @TargetMasterFileName=@TargetDir+\'\\'+@MasterFileName set @TargetLogFileName=@TargetDir+\'\\'+@LogFileName --添加还原设备 set @WholeDeviceName=@DbName+\'WholeDevice\' set @WholeFileName=\'K:\\'+@WholeFileName exec sp_addumpdevice \'disk\',@WholeDeviceName,@WholeFileName --开始备份 if(isnull(@DifferentFileName,\'\')<>\'\') --如果具有差异备份的还原 begin --添加差异备份还原的设备 set @DifferenctDeviceName=@DbName+\'DifferenctDevice\' set @DifferentFileName=\'K:\\'+@DifferentFileName exec sp_addumpdevice \'disk\',@DifferenctDeviceName,@DifferentFileName --备份 if(isnull(@TargetDir,\'\')=\'\') restore database @DbName from @WholeDeviceName with NORECOVERY else --如果还原后的数据库文件的路径与备份前的路径不一致 restore database @DbName from @WholeDeviceName with NORECOVERY, move @MasterFileName to @TargetMasterFileName, move @LogFileName to @TargetLogFileName restore database @DbName from @DifferenctDeviceName end else begin --只有完全备份的还原 if(isnull(@TargetDir,\'\')=\'\') restore database @DbName from @WholeFileName else restore database @DbName from @WholeFileName with move @MasterFileName to @TargetMasterFileName, move @LogFileName to @TargetLogFileName end --释放备份设备 exec sp_dropdevice @WholeDeviceName if(isnull(@DifferentFileName,\'\')<>\'\') exec sp_dropdevice @DifferenctDeviceName --删除网络链接 exec xp_cmdshell \'net use K: /delete\' /**//************************************************************************ * * File Name : ShrinkLog.sql * Function : 收缩数据库的日志文件 * Author :Yahong<Yahongq111@163.com> * Version : 00 * Date : 2007-09-16 * Remark : * *************************************************************************/ -- --第一步:设置需要收缩的数据库,找到需要收缩数据文件 -- use cctqa select Size/128 Size,Name from sysfiles /**//* declare @LogName varchar(255),@TargetSize int -- -- --第二步:设置需要收缩的日志文件的逻辑名字和收缩后的大小 --千万不要搞错了,选错了文件,有可能会丢失数据,那时候 --哭都哭不回来了。 -- -- set @LogName=\'CCTQA_Log\' set @TargetSize=1 declare @str varchar(300), @DatabaseName varchar(255) set @DatabaseName=db_name() if(not exists(select * from sysfiles where name=@LogName)) begin set @str=\'没有找到日志文件\'+@LogName raiserror(@str,0,1) end else begin declare @curSize int,@maxTime int set @maxTime=10 set @curSize=(select size from sysfiles where name=@LogName)/128 print \'收缩之前的日志文件的大小是:\'+cast(@curSize as varchar(10))+\'MB\' while (@curSize>@TargetSize) and (@maxTime>0) begin backup log @DatabaseName with no_log DBCC SHRINKFILE(@LogName,@TargetSize) set @curSize=(select size from sysfiles where name=@LogName)/128 set @maxTime=@maxTime-1 end set @curSize=(select size from sysfiles where name=@LogName)/128 print \'收缩之后的日志文件的大小是:\'+cast(@curSize as varchar(10))+\'MB\' end */
相关文章:
- Mysql主从备份和SQL语句的备份 2021-11-20
- sql 备份 语句(全) - QA龙 2021-12-04
- SQL Server 里面sql语句备份表 2021-12-16
- SQL Server自动备份 2021-09-17
- SQL Express自动备份 2021-07-17
- 关于备份表的SQL语句 2021-11-19