既能备份到网络中的共享文件夹中,也能备份到本地

  1. USE [AdventureWorks2012]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[pr_BatchBackUPDatabase] Script Date: 2016/1/7 17:56:01 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. ------------执行此脚本需要先执行表值函数---------
  10. --use [AdventureWorks2012]
  11. --go
  12. ---- =============================================
  13. ---- 调用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',')
  14. ---- Create date: <Create Date,,>
  15. ---- Description: 把用逗号分隔的字符串转换成表格数据
  16. ---- =============================================
  17. --CREATE FUNCTION [dbo].[Fn_StringSplitToTable]
  18. --(
  19. -- @StringX varchar(MAX),
  20. -- @Split nvarchar(10)
  21. --)
  22. --RETURNS
  23. --@IdsTable TABLE
  24. --(
  25. -- [Id] nvarchar(200)
  26. --)
  27. --AS
  28. --BEGIN
  29. -- DECLARE @Index int
  30. -- DECLARE @LenIndex int
  31. -- SET @LenIndex=LEN(@Split)
  32. -- SET @Index=CHARINDEX(@Split,@StringX,1)
  33. -- WHILE (@Index>=1)
  34. -- BEGIN
  35. -- IF(LEFT(@StringX,@Index-1) <> '')
  36. -- INSERT INTO @IdsTable SELECT LTRIM(RTRIM(LEFT(@StringX,@Index-1)))
  37. -- SET @StringX=RIGHT(@StringX,LEN(@StringX)-@Index-@LenIndex+1)
  38. -- SET @Index=CHARINDEX(@Split,@StringX,1)
  39. -- END
  40. -- IF(@StringX<>'') INSERT INTO @IdsTable SELECT LTRIM(RTRIM(@StringX))
  41.  
  42. -- RETURN
  43. --END
  44.  
  45. ----------执行此脚本需要开启xp_cmdshell---------
  46. --USE Master
  47. --GO
  48. --EXEC sp_configure 'show advanced options', 1;
  49. --GO
  50. --RECONFIGURE WITH OVERRIDE;
  51. --GO
  52. --EXEC sp_configure 'xp_cmdshell',1;
  53. --GO
  54. --RECONFIGURE WITH OVERRIDE;
  55. --GO
  56. --==================================================
  57. --<Author> limy
  58. --<Create Date> 2015-12
  59. --数据库备份
  60. --exec pr_BatchBackUPDatabase @BackupDirectoryPath='\\192.168.0.130\DBShare', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='bak',@BackUpType=1,@IsCompress=1
  61. --exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='bak', @BackUpType=1,@IsCompress=1
  62. --exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='trn', @BackUpType=2,@IsCompress=1
  63. --exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='dif', @BackUpType=3,@IsCompress=1
  64. --====================================================
  65. ALTER PROCEDURE [dbo].[pr_BatchBackUPDatabase]
  66. @BackupDirectoryPath NVARCHAR(50)='C:\',
  67. @DataBase TINYINT = 1,--1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库
  68. @SelectedDataBase NVARCHAR(1000)='', --指定的数据库
  69. @SubDirectoryMode BIT = 1,--是否为每个数据库创建子目录
  70. @ExtenName NVARCHAR(50)='bak',--备份文件扩展名(不要.)
  71. --@CheckDB bit = 0, --验证备份完整性
  72. @BackUpType TINYINT = 1, --1 完整备份 2 日志备份, 3 差异备份
  73. @IsCompress BIT = 0 --是否备份压缩
  74. AS
  75. BEGIN
  76.  
  77. --要备份的数据列表
  78. DECLARE @dbname TABLE(
  79. DbName VARCHAR(100) )
  80. --已经存在的数据库目录
  81. DECLARE @DirExistName TABLE(
  82. DbName VARCHAR(100) )
  83. declare @SQL nvarchar(500)
  84. declare @ErrorInfo nvarchar(1000)
  85.  
  86. --数据库的值是否合理
  87. if(@DataBase not in(1,2,3,4))
  88. begin
  89. SET @ErrorInfo = N'1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库 ,请选择要备份的数据库!'
  90. RAISERROR(@ErrorInfo,16,1)
  91. RETURN;
  92. end
  93.  
  94. --是否指定了数据库
  95. if @DataBase=4 and isnull(@SelectedDataBase,'')=''
  96. begin
  97. SET @ErrorInfo = N'要备份的数据库为指定数据库时,请输入数据库,多个数据库中间用[,]隔开!'
  98. RAISERROR(@ErrorInfo,16,2)
  99. RETURN;
  100. end
  101.  
  102. --把要备份的数据库,放到一个表里
  103. --1 所有数据库
  104. if @DataBase=1
  105. begin
  106. insert into @dbname
  107. select name from master..sysdatabases where name <>'tempdb'
  108. end
  109. --2 系统数据库
  110. if @DataBase=2
  111. begin
  112. insert into @dbname
  113. select name from master..sysdatabases where sid = 0x01 and name <>'tempdb'
  114. end
  115. --3 所有用户数据库
  116. if @DataBase=3
  117. begin
  118. insert into @dbname
  119. select name from master..sysdatabases where sid <> 0x01 and name <>'tempdb'
  120. end
  121. --4 指定数据库
  122. if @DataBase=4
  123. begin
  124. insert into @dbname
  125. SELECT Id FROM [Fn_StringSplitToTable](@SelectedDataBase,',')
  126. end
  127.  
  128. --循环表,创建子目录
  129. declare @name nvarchar(100)
  130. declare cur cursor for
  131. select DbName from @dbname
  132. open cur
  133. fetch next from cur into @name
  134. while(@@fetch_status=0)
  135. begin
  136. --完备
  137. declare @strDate varchar(30),@backupFile varchar(200),@currentDate datetime,@backName nvarchar(100)--@Day varchar(20),
  138. set @currentDate=getdate()
  139. set @strDate=format(getdate(),'yyyyMMdd_HHmmss')
  140. set @backName=@name+N'-完整 数据库 备份'
  141.  
  142. set @backupFile = @BackupDirectoryPath+'\'+@name +'_'+@strDate+'.bak'
  143.  
  144. --是否为每个数据库创建子目录
  145. if @SubDirectoryMode =1
  146. begin
  147.  
  148. set @SQL = 'xp_cmdshell ''dir '+@BackupDirectoryPath+' /b /a:d'''
  149. insert into @DirExistName
  150. exec (@SQL)
  151. ----调试用-------------------------------------------------------------------------------------------------------------------
  152. --RAISERROR(@SQL,16,2) ;RETURN;-----------------------------------------------------------------------------------
  153. if not exists(select 1 from @DirExistName where DBName=@name)
  154. begin
  155. set @SQL='xp_cmdshell ''mkdir '+@BackupDirectoryPath +'\'+@name+''''
  156. exec ( @SQL )
  157. end
  158.  
  159. set @backupFile = @BackupDirectoryPath+'\'+@name+'\'+@name +'_'+@strDate+'.'+@ExtenName
  160. end
  161.  
  162. IF(@BackUpType=1)--完整备份
  163. BEGIN
  164. --开始备份
  165. if @IsCompress=1
  166. begin
  167. backup database @name to disk=@backupFile WITH NOINIT, NAME = @backName, COMPRESSION
  168. end
  169. else
  170. begin
  171. backup database @name to disk=@backupFile WITH NOINIT, NAME = @backName, NO_COMPRESSION
  172. end
  173. END
  174. IF(@BackUpType=2)--日志备份
  175. BEGIN
  176. --开始备份
  177. if @IsCompress=1
  178. begin
  179. backup log @name to disk=@backupFile WITH NOINIT, NAME = @backName, COMPRESSION
  180. end
  181. else
  182. begin
  183. backup log @name to disk=@backupFile WITH NOINIT, NAME = @backName, NO_COMPRESSION
  184. end
  185. END
  186.  
  187. IF(@BackUpType=3)--差异备份
  188. BEGIN
  189. --开始备份
  190. if @IsCompress=1
  191. begin
  192. backup database @name to disk=@backupFile WITH differential ,NOINIT, NAME = @backName, COMPRESSION
  193. end
  194. else
  195. begin
  196. backup database @name to disk=@backupFile WITH differential,NOINIT, NAME = @backName, NO_COMPRESSION
  197. end
  198. END
  199.  
  200. fetch next from cur into @name
  201. end
  202. close cur
  203. deallocate cur
  204.  
  205. print N'备份完成。';
  206. return;
  207.  
  208. END

SQL Server 2012 数据库备份的更多相关文章

  1. SQL SERVER 2012数据库自动备份的方法

    SQL SERVER 2012数据库自动备份的方法 为了防止数据丢失,这里给大家介绍SQL SERVER2012数据自动备份的方法: 一.打开SQL SERVER 2012,如图所示: 服务器类型:数 ...

  2. SQL Server 2012完全备份、差异备份、事务日志备份和还原操作;

    SQL Server 2012完全备份.差异备份.事务日志备份和还原操作: 1.首先,建立一个测试数据库,TestA:添加一张表,录入二条数据:备份操作这里我就不详细截图和讲解了.相信大家都会备份,我 ...

  3. SQL Server 2012 数据库笔记

    慕课网 首页 实战 路径 猿问 手记     Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...

  4. SQL Server系统数据库备份最佳实践

    原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信 ...

  5. SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法

    SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法 将以下代码存为OpenSqlServerPort.bat文件: netsh advfirewall firewall a ...

  6. SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理

     SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...

  7. Sql Server 2012数据库的安装【自己一点一点敲的】

    Sql Server 2012数据库的安装 1.到微软官网上下载 下载链接为:https://www.microsoft.com/zh-cn/download/details.aspx?id=2906 ...

  8. Microsoft SQL server 2012数据库学习总结(一)

    一.Microsoft SQL Server2012简介 1.基本概要 Microsoft SQL Server 2012是微软发布的新一代数据平台产品,全面支持云技术与平台,并且能够快速构建相应的解 ...

  9. Microsoft SQL Server 2012 数据库安装图解教程

    本文部分引用以下文章: SQL Server 2012 安装图解教程(附sql2012下载地址)_MsSql_脚本之家 http://www.jb51.net/article/36049.htm SQ ...

随机推荐

  1. Matlab位运算笔记

    本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...

  2. c语言中函数的递归

    题目:用递归法把一个整数转换成字符串输出. 比较下面两种方法的不同: putchar(n%10+'0')的位置不同,造成输出结果的不同. 方法一: #include <stdio.h> v ...

  3. CSS+DIV常用命名

    常用的符合CSS+DIV规则的命名 页头:header 登录条:loginBar 标志:logo 侧栏:sideBar 广告:banner 导航:nav 子导航:subNav 菜单:menu 子菜单: ...

  4. JavaWeb学习记录(十七)——JSP九大隐式对象

    public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOE ...

  5. 按Right-BICEP的测试用例

    测试方法:Right-BICEP 测试计划 1.Right-结果是否正确? 2.B-是否所有的边界条件都是正确的? 3.P-是否满足性能要求? 4.结果是否有符合要求的20道题目? 5.所得到的最大数 ...

  6. google-http-java-client(android学习篇2源码)

    package com.google.api.services.samples.googleplus.cmdline.simple;   import com.google.api.client.ht ...

  7. Win10 EPLAN新建项目出现“一个内部错误的解决方法”

    [环境] Win10 64bits,EPLAN 2.4 64bits. [表现] 新建项目的时候出现"一个内部错误"的提示,然后软件卡死. [解决方案] 计算机管理--服务--EP ...

  8. VC++ MFC橡皮筋技术

    在MFC下绘制直线,使用橡皮筋技术,可以使直线效果跟随鼠标移动 //OnLButtionDown        m_ptOrigin = m_ptEnd = point;  //OnMouseMove ...

  9. Unix Linux 编程书籍

    UNIX环境高级编程(第3版) Advanced Programming in the UNIX Environment Linux/UNIX系统编程手册 Linux/UNIX系统编程手册 (豆瓣) ...

  10. Qt QTreeWidget节点的添加+双击响应+删除详解(转)

    QTreeWidget是实现树形结构的类,在很多软件中都可以看到类似树形结构的界面. 我做的一个示例如下图,用来处理图像,最顶层节点是图像的路径名,子节点是图像的各个波段,双击各个波段会显示图像各波段 ...