您的位置:首页 > 数据库

数据库批量备份存储过程(判断盘符、路径,错误盘符返回,不存在的路径自动创建)

2011-01-31 00:18 597 查看
--------------------------------------------------------------------------

-- 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

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 休闲 批量备份
相关文章推荐