首 页IT知识库翔宇问吧收藏内容
当前位置:翔宇亭IT乐园IT知识库数据库SQL Server

数据库批量备份存储过程

减小字体 增大字体 作者:佚名  来源:转载  发布时间:2010-06-01 15:49:00

本文详细介绍了在SQL Server2005及以上版本中如何使用存储过程进行数据库备份的方法。

--------------------------------------------------------------------------
--
  Author : htl258(Tony)
--
  Date   : 2010-04-18 10:45:14
--
  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
--
          Jul  9 2008 14:43:34
--
          Copyright (c) 1988-2008 Microsoft Corporation
--
          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--
  Blog   :http://blog.csdn.net/htl258
--
  Subject:数据库批量备份存储过程(判断盘符、路径,错误盘符返回,不存在的路径自动创建)
--
------------------------------------------------------------------------
--适用环境:SQL Server 2005及以上版本(主要用于作业中调用以及程序开发中调用)

USE master
GO
--1.周期性备份数据库代码(保留原来备份的):
--
备份文件名为:原数据库名称+'_'+备份日期.bak
IF OBJECT_ID('sp_backupdatabase') IS NOT NULL
   
DROP PROC sp_backupdatabase
GO
CREATE PROC sp_backupdatabase
@path NVARCHAR(100)--路径
AS
--路径名格式标准化
IF RIGHT(@path,1)<>'\' SET @path=@path+'\'
--获取文件夹信息
DECLARE @t TABLE(id INT IDENTITY,a INT,b INT,c INT)
DECLARE @fpath NVARCHAR(3)
SET @fpath=LEFT(@path,3)
INSERT @t EXEC master..xp_fileexist @fpath
INSERT @t EXEC master..xp_fileexist @path
--如果指定盘符有误不存在,则返回错误提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
   
RAISERROR(N'输入的盘符不存在,请重新输入!',16,1)
   
RETURN
END
--如果不存在指定的文件夹,则创建:
ELSE IF EXISTS(SELECT 1 FROM @t WHERE b=0 AND id=2)
BEGIN
   
DECLARE @mddir NVARCHAR(100)
   
SET @mddir='md '+@path
   
EXEC master..xp_cmdshell @mddir
END
--开始备份数据库到指定的目录
DECLARE @s nvarchar(4000)
SELECT @s=ISNULL(@s+';','')
       
+N'BACKUP database ['+name+'] TO DISK = '''
       
+@path+name+'_'+CONVERT(NVARCHAR(8),getdate(),112)+N'.bak'''
FROM master..sysdatabases
WHERE name NOT IN('master','tempdb','model','msdb','pubs')--这里筛选不参加备份的数据库
EXEC(@S)
GO
--调用方法:
EXEC sp_backupdatabase 'f:\Backup\tony'
/*
--返回信息:
已为数据库 'mydb',文件 'mydb' (位于文件 1 上)处理了 312 页。
已为数据库 'mydb',文件 'mydb_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 313 页,花费 0.733 秒(3.336 MB/秒)。
已为数据库 'test',文件 'test' (位于文件 1 上)处理了 208 页。
已为数据库 'test',文件 'test_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 209 页,花费 0.413 秒(3.951 MB/秒)。
--备份后的文件列表:
mydb_20100418.bak
test_20100418.bak
*/


--2.周期性备份数据库代码(自动删除原备份文件):
--
备份文件名为:原数据库名称.bak
IF OBJECT_ID('sp_backupdatabase') IS NOT NULL
   
DROP PROC sp_backupdatabase
GO
CREATE PROC sp_backupdatabase
@path NVARCHAR(100)--路径
AS
--路径名格式标准化
IF RIGHT(@path,1)<>'\' SET @path=@path+'\'
--获取文件夹信息
DECLARE @t TABLE(id INT IDENTITY,a INT,b INT,c INT)
DECLARE @fpath NVARCHAR(3)
SET @fpath=LEFT(@path,3)
INSERT @t EXEC master..xp_fileexist @fpath
INSERT @t EXEC master..xp_fileexist @path
--如果指定盘符有误不存在,则返回错误提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
   
RAISERROR(N'输入的盘符不存在,请重新输入!',16,1)
   
RETURN
END
--如果不存在指定的文件夹,则创建:
ELSE IF EXISTS(SELECT 1 FROM @t WHERE b=0 AND id=2)
BEGIN
   
DECLARE @mddir NVARCHAR(100)
   
SET @mddir='md '+@path
   
EXEC master..xp_cmdshell @mddir
END
--开始备份数据库到指定的目录
DECLARE @s nvarchar(4000)
SELECT @s=ISNULL(@s+';','')
       
+N'BACKUP database ['+name+'] TO DISK = '''
       
+@path+name+N'.bak''  WITH INIT'
FROM master..sysdatabases
WHERE name NOT IN('master','tempdb','model','msdb','pubs')--这里筛选不参加备份的数据库
EXEC(@S)
GO
--调用方法:
EXEC sp_backupdatabase 'f:\Backup\tony2'
/*
--返回信息:
已为数据库 'mydb',文件 'mydb' (位于文件 1 上)处理了 312 页。
已为数据库 'mydb',文件 'mydb_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 313 页,花费 0.599 秒(4.082 MB/秒)。
已为数据库 'test',文件 'test' (位于文件 1 上)处理了 208 页。
已为数据库 'test',文件 'test_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 209 页,花费 0.351 秒(4.651 MB/秒)。
--备份后的文件列表:
mydb.bak
test.bak
*/

本文源自:翔宇亭——IT乐园(http://www.biye5u.com),转载请保留此信息!

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2022 biye5u.com. All Rights Reserved.