zoukankan      html  css  js  c++  java
  • SQL Server 2012 数据库备份

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

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