首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

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

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

SQL code
----------------------------------------  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 masterGO--1.周期性备份数据库代码(保留原来备份的):--备份文件名为:原数据库名称+'_'+备份日期.bakIF OBJECT_ID('sp_backupdatabase') IS NOT NULL    DROP PROC sp_backupdatabaseGOCREATE 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 @fpathINSERT @t EXEC master..xp_fileexist @path--如果指定盘符有误不存在,则返回错误提示:IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)BEGIN    RAISERROR(N'输入的盘符不存在,请重新输入!',16,1)    RETURNEND--如果不存在指定的文件夹,则创建: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 @mddirEND--开始备份数据库到指定的目录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.baktest_20100418.bak*/--2.周期性备份数据库代码(自动删除原备份文件):--备份文件名为:原数据库名称.bakIF OBJECT_ID('sp_backupdatabase') IS NOT NULL    DROP PROC sp_backupdatabaseGOCREATE 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 @fpathINSERT @t EXEC master..xp_fileexist @path--如果指定盘符有误不存在,则返回错误提示:IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)BEGIN    RAISERROR(N'输入的盘符不存在,请重新输入!',16,1)    RETURNEND--如果不存在指定的文件夹,则创建: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 @mddirEND--开始备份数据库到指定的目录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.baktest.bak*/


[解决办法]
实用 推荐下 ~
[解决办法]
恩 学习了…… 呵呵
[解决办法]
接分再看
------解决方案--------------------


upup
[解决办法]
不错。。。。。。。。。。
[解决办法]
非常实用
[解决办法]
mark一下
[解决办法]
学习了…… !
[解决办法]
学习啊 ,不错啊
[解决办法]
学习.
[解决办法]
呵呵,帮你顶
[解决办法]
学习.........
[解决办法]
谢谢,继续学习
[解决办法]
get,有用
[解决办法]
收藏了,谢谢...
[解决办法]
学习学习
[解决办法]
向前辈学习下。
[解决办法]
学习学习学习
[解决办法]

[解决办法]
学习 了
[解决办法]
低昂的都乡镇

[解决办法]
帮顶,学习,接分.
[解决办法]
study 一下

[解决办法]
学习学习,, 真厉害,记得给分哦!
[解决办法]
顶。。。学习
[解决办法]
mark
[解决办法]
收藏










.

[解决办法]
路过,每天回帖即可获得10分可用分!
[解决办法]
嗯,学习下!

热点排行