数据库备份存储过程
来源:互联网 发布:windows 漏洞扫描 编辑:程序博客网 时间:2024/04/30 00:11
IF OBJECT_ID('Pr_Backup','P') IS NULLBEGINEXEC('CREATE PROCEDURE dbo.Pr_Backup AS RETURN')ENDGO/* =============================================-- 作者: AirSoft-- 日期: 2015-08-13-- 描述: 支持全备、差异和日志备份数据库-- 示例: DECLARE @ReturnDesc NVARCHAR(128)EXEC Pr_Backup@BackupDB = 'DBATools',@BakType = 1,@ReturnDesc = @ReturnDesc OUTPUTSELECT @ReturnDesc-- =============================================*/ALTER PROCEDURE dbo.Pr_Backup(@BackupDBNVARCHAR(128), @BakTypeINT,--0完全备份,1差异备份,2日志备份@ReturnDesc NVARCHAR(MAX) OUTPUT)ASBEGIN TRY--DECLARE @BakType INT -- 0完全备份,1差异备份,2日志备份--DECLARE @BackupDB NVARCHAR(128)DECLARE @ExecSql NVARCHAR(MAX)DECLARE @CmdCode NVARCHAR(1024)DECLARE @LogName NVARCHAR(128)DECLARE @BakPath NVARCHAR(512)DECLARE @BakFile NVARCHAR(128)DECLARE @NowFile NVARCHAR(128)DECLARE @TDbSize TABLE(dbsize bigint,logsize bigint)DECLARE @TLogName TABLE(DBLogName NVARCHAR(32))DECLARE @DBLogSize INTDECLARE @Rc INTDECLARE @NoLog INTSET @BakPath = 'F:\DBBak'SET @NowFile = CONVERT(NVARCHAR,GETDATE(),112)+REPLACE(CONVERT(NVARCHAR,GETDATE(),108),':','')SET @BakFile = @NowFile + CASE WHEN @BakType = 1 THEN '.dif'WHEN @BakType = 2 THEN '.trn'ELSE '.bak'END-- 创建备份目录SET @CmdCode = N'if not exist '+ @BakPath + ' mkdir ' + @BakPathEXEC @rc = master..xp_cmdshell @CmdCode --注意需要开启xp_cmdshell-- 完全备份才做截断日志的操作IF @BakType = 0BEGINSET @ExecSql = 'SELECT sum(convert(bigint,case when status & 64 = 0 then size else 0 end)) AS dbsize, ' + ' sum(convert(bigint,case when status & 64 <> 0 then size else 0 end)) AS logsize ' + ' FROM ' + @BackupDB + '.dbo.sysfiles'DELETE FROM @TDbSizeINSERT INTO @TDbSize(dbsize,logsize)EXEC @Rc = sp_executesql @ExecSql--获取日志文件大小SELECT @DBLogSize= (logsize * 8192 / 1048576 / 1024) --转换成G进行比较FROM @TDbSizeIF ( @DBLogSize >=2 ) --大于2GBEGINIF CHARINDEX('Microsoft SQL Server 2005',@@version) > 0SET @ExecSql = 'BACKUP LOG ' + @BackupDB + ' WITH NO_LOG ;' --SQL2005版本支持脚本截断日志ELSE SET @ExecSql = 'ALTER DATABASE ' + @BackupDB + ' SET RECOVERY SIMPLE WITH NO_WAIT ;' -- 设置截断日志成功标记0为已截断日志 EXEC @NoLog = sp_executesql @ExecSqlEND-- 日志截断成功才进行日志收缩IF @NoLog = 0 BEGINSET @ExecSql ='SELECT NAME FROM ' + @BackupDB + '.sys.database_files WHERE Type=1'SET @LogName = NULL DELETE FROM @TLogNameINSERT INTO @TLogNameEXEC sp_executesql @ExecSqlSELECT @LogName = DBLogName FROM @TLogNameIF ISNULL(@LogName,'') <> '' BEGINSET @ExecSql = 'USE ' + @BackupDB + ';DBCC SHRINKFILE( ' + @LogName + ' , TRUNCATEONLY ) WITH NO_INFOMSGS ;'EXEC @Rc = sp_executesql @ExecSql ENDIF CHARINDEX('Microsoft SQL Server 2005',@@version) <= 0BEGINSET @ExecSql = 'ALTER DATABASE ' + @BackupDB + ' SET RECOVERY FULL WITH NO_WAIT ;'END EXEC @Rc = sp_executesql @ExecSql ENDENDSET @ExecSql = CASE WHEN @BakType = 1 THEN 'Backup DataBase ' + @BackupDB + ' to Disk = ''' + @BakPath + '\' + @BakFile + '''' + ' WITH DIFFERENTIAL 'WHEN @BakType = 2 THEN 'Backup Log ' + @BackupDB + ' to Disk = ''' + @BakPath + '\' + @BakFile + ''''ELSE 'Backup DataBase ' + @BackupDB + ' to Disk = ''' + @BakPath + '\' + @BakFile + ''''ENDEXEC @Rc = sp_executesql @ExecSql SET @ReturnDesc = '备份成功。'RETURN 1END TRYBEGIN CATCHSET @ReturnDesc = '备份过程中出现以下异常:' + ERROR_MESSAGE()RETURN -1END CATCHGO
0 0
- 备份数据库存储过程
- 数据库备份存储过程
- 备份数据库存储过程
- 数据库还原备份存储过程
- 数据库作业备份存储过程
- 备份数据库(存储过程)
- 数据库批量备份存储过程
- SQL 存储过程备份数据库
- 数据库备份与恢复的存储过程
- 通用分页 数据库备份 恢复存储过程
- 备份数据库的存储过程.sql
- 定时备份数据库的存储过程.sql
- SQLServer 2000 数据库备份还原存储过程
- 备份与恢复数据库的存储过程
- java备份sql server数据库 存储过程
- 备份与恢复数据库的存储过程
- 使用存储过程实现数据库备份
- 使用存储过程实现数据库备份
- Hash索引与B-Tree索引 介绍及区别
- POJ 1258 Agri-Net(最小生成树prim算法)
- 图像处理常用算法总结
- jQuery中事情的动态绑定
- CAShapeLayer
- 数据库备份存储过程
- 镜像与CDN有什么区别?
- 数字滤波器设计
- 设计模式
- android指定输入法类型
- 社説 20150813 福島原発浄化水 廃炉を前進させる海への放出
- myEclipse中如何设置字体大小
- uva 10139 求n的阶乘能否整除m
- Scatter file