SQL Server 2012 数据库备份

--以下是完整数据库备份

USE [AdventureWorks2012]
GO
/****** Object:  StoredProcedure [dbo].[pr_BatchBackUPDatabase]    Script Date: 2015/12/29 15:26:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

----------执行此脚本需要先执行表值函数---------
--use [AdventureWorks2012]
--go
---- =============================================
---- 调用:SELECT Id FROM [Fn_StringSplitToTable](‘1,12,36,65,58,56,DF‘,‘,‘)
---- Create date: <Create Date,,>
---- Description:    把用逗号分隔的字符串转换成表格数据
---- =============================================
--CREATE FUNCTION [dbo].[Fn_StringSplitToTable]
--(
--    @StringX varchar(MAX),
--    @Split nvarchar(10)
--)
--RETURNS
--@IdsTable TABLE
--(
--    [Id] nvarchar(200)
--)
--AS
--BEGIN
--    DECLARE @Index int
--    DECLARE @LenIndex int
--    SET @LenIndex=LEN(@Split)
--    SET @Index=CHARINDEX(@Split,@StringX,1)
--    WHILE (@Index>=1)
--    BEGIN
--        IF(LEFT(@StringX,@Index-1) <> ‘‘)
--            INSERT INTO @IdsTable SELECT LTRIM(RTRIM(LEFT(@StringX,@Index-1)))
--        SET @StringX=RIGHT(@StringX,LEN(@StringX)[email protected]@LenIndex+1)
--        SET @Index=CHARINDEX(@Split,@StringX,1)
--    END
--    IF(@StringX<>‘‘) INSERT INTO @IdsTable SELECT LTRIM(RTRIM(@StringX)) 

--    RETURN
--END

----------执行此脚本需要开启xp_cmdshell---------
--USE Master
--GO
--EXEC sp_configure ‘show advanced options‘, 1;
--GO
--RECONFIGURE WITH OVERRIDE;
--GO
--EXEC sp_configure ‘xp_cmdshell‘,1;
--GO
--RECONFIGURE WITH OVERRIDE;
--GO
ALTER PROCEDURE [dbo].[pr_BatchBackUPDatabase]
@BackupDirectoryPath  NVARCHAR(50)=‘C:\‘,
@DataBase TINYINT = 1,--1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库
@SelectedDataBase NVARCHAR(1000)=‘‘, --指定的数据库
@SubDirectoryMode BIT = 1,--是否为每个数据库创建子目录
@ExtenName NVARCHAR(50)=‘.bak‘,--备份文件扩展名
--@CheckDB bit = 0, --验证备份完整性
@IsCompress  BIT = 0 --是否备份压缩
AS
BEGIN

--要备份的数据列表
DECLARE @dbname TABLE(
                DbName VARCHAR(100) )
--已经存在的数据库目录
DECLARE @DirExistName TABLE(
                DbName VARCHAR(100) )
declare @SQL nvarchar(500)
declare @ErrorInfo nvarchar(1000) 

--数据库的值是否合理
if(@DataBase not in(1,2,3,4))
begin
        SET @ErrorInfo = N‘1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库 ,请选择要备份的数据库!‘
        RAISERROR(@ErrorInfo,16,1)
        RETURN;
end

--是否指定了数据库
if @DataBase=4 and isnull(@SelectedDataBase,‘‘)=‘‘
begin
        SET @ErrorInfo = N‘要备份的数据库为指定数据库时,请输入数据库,多个数据库中间用[,]隔开!‘
        RAISERROR(@ErrorInfo,16,2)
        RETURN;
end

--把要备份的数据库,放到一个表里
--1 所有数据库
if @DataBase=1
begin
        insert into @dbname
        select name from master..sysdatabases where name <>‘tempdb‘
end
--2 系统数据库
if @DataBase=2
begin
        insert into @dbname
        select name from master..sysdatabases where  sid = 0x01 and name <>‘tempdb‘
end
--3 所有用户数据库
if @DataBase=3
begin
        insert into @dbname
        select name from master..sysdatabases where  sid <> 0x01 and name <>‘tempdb‘
end
--4 指定数据库
if @DataBase=4
begin
        insert into @dbname
        SELECT Id FROM [Fn_StringSplitToTable](@SelectedDataBase,‘,‘)
end

--循环表,创建子目录
declare @name nvarchar(100)
declare cur   cursor for
        select DbName from @dbname
open cur
fetch next from cur into @name
while(@@fetch_status=0)
begin
        --完备
        declare @strDate varchar(30),@backupFile varchar(200),@currentDate datetime,@backName nvarchar(100)--@Day varchar(20),
        set @currentDate=getdate()
        set @strDate=format(getdate(),‘yyyyMMdd_HHmmss‘)
        set @backName=@name+N‘-完整 数据库 备份‘

        set @backupFile = @BackupDirectoryPath+‘\‘+@name +‘_‘+@strDate+‘.bak‘

        --是否为每个数据库创建子目录
        if @SubDirectoryMode =1
        begin

                set @SQL = ‘xp_cmdshell ‘‘dir ‘+@BackupDirectoryPath+‘ /b  /a:d‘‘‘
                insert into @DirExistName
                exec (@SQL)
                ----调试用-------------------------------------------------------------------------------------------------------------------
                --RAISERROR(@SQL,16,2)    ;RETURN;-----------------------------------------------------------------------------------
                if not exists(select 1 from @DirExistName where DBName=@name)
                begin
                        set @SQL=‘xp_cmdshell ‘‘mkdir ‘+@BackupDirectoryPath +‘\‘+@name+‘‘‘‘
                        exec ( @SQL    )
                end

                set @backupFile = @BackupDirectoryPath+‘\‘+@name+‘\‘+@name +‘_‘+@strDate+‘.bak‘
        end

        --开始备份
        if @IsCompress=1
        begin
                backup database @name to disk=@backupFile WITH  NOINIT,  NAME = @backName, COMPRESSION
        end
        else
        begin
                backup database @name to disk=@backupFile WITH  NOINIT,  NAME = @backName,NO_COMPRESSION
        end

        fetch next from cur into @name
end
close cur
deallocate cur

print ‘备份完成。‘;
return;

END
时间: 2024-08-02 18:25:25

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

sql server 2012数据库镜像

sql server 2012数据库镜像 以下通过域帐户来配置数据库镜像: 一.环境准备 1.准备计算机 AD02为域控制器/DNS服务器(sz1card1.com),IP:192.168.2.218/24,AD02安装成为域控制器.DNS服务(这里不做演示) W67为主体服务器,IP:192.168.2.67/24,安装SQL SERVER 2012 企业核心版(这里不做演示) W65为镜像服务器,IP:192.168.2.65/24,安装SQL SERVER 2012 企业核心版(这里不做演

SQL Server 2012 数据库镜像配置完整篇

"数据库镜像"是一种提高 SQL Server 数据库的可用性的解决方案. 镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库.数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上. 通常,这些服务器实例驻留在不同位置的计算机上. 启动数据库上的数据库镜像操作时,在这些服务器实例之间形成一种关系,称为"数据库镜像会话".其中一个服务器实例使数据库服务于客户端("主体服务器"), 

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

Sql Server 2012数据库的安装 1.到微软官网上下载 下载链接为:https://www.microsoft.com/zh-cn/download/details.aspx?id=29066 点击下载-->点击文件名(全选)-->点击Next,开始下载. 2.下载完成后,装载以.iso为扩展名的光盘镜像文件 右击文件-->点击装载-->出来下图所示页面 点击setup-->打开安装中心(如果是win7以上的版本,右击-->以管理员身份运行)-->出现如

SQL Server 2012 数据库笔记

慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 123浏览 0评论 第一章 初识SQL Server2012 1.2.作为SQL Server的最新版本,SQL Server 2012具有以下激动人心的新功能. 1.AlwaysOn. 2.Columnstore索引. 3.DBA自定义服务器权限. 4.Windows Server Core支持. 5.Se

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

原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信息等等. model 所有新数据库的模型,如果希望新数据库都有某些对象,可以在这里创建. tempdb sql server重启时重建,所以不需要备份 除了以上四种,其实还有一个数据库:Resource 从2005就引入的,一个只读.隐藏的数据库,包含所有在sql server中的系统对象.由于SQ

Microsoft SQL Server 2012 数据库安装图解

官网下载地址:    http://www.microsoft.com/zh-cn/download/details.aspx?id=29066 1. 根据微软的下载提示,64位的Windows 7操作系统,只需下载列表的CHSx64SQLFULL_x64_CHS_Core.box. CHSx64SQLFULL_x64_CHS_Intall.exe和CHSx64SQLFULL_x64_CHS_Lang.box三个安装包即可.然而第一个CHS\SQLFULL_CHS.iso包含了32位和64位.如

技术分享之如何完整备份sql server 2012数据库?

博客已经建了几年了,但由于我是个外行,因此一开始就采用了zblog asp+access数据库的方式进行搭建,主要还是因为技术方面的缺陷嘛.但是经过几年的整理和写作,发现这套系统越来越卡了,咨询了很多博主,并且去ZBLOG论坛逛了很多次,发现是因为数据库的原因导致的,ACCESS数据库只能建一些小站,数据量已达就有明显的压力了,因此最近尝试了将ACCESS升级和转换为sql server2012的微软数据库,经过几天的折腾和请教了一些高人,终于解决了这个难题,现在访问起来畅快多了.我的博客:读后

SQL Server 2012自动备份

SQL 2012和2008一样,都可以做维护计划,来对数据库进行自动的备份. 现在做这样一个数据库维护的计划,每天0点对数据库进行差异备份,每周日0点对数据库进行完全备份,并且每天晚上10点删除一次过期备份(两个星期前的). 做这样一个维护计划的方法如下: 在做计划之前,需要先启用SQL Server代理,并将启动模式设为自动. 接下来,依次点击“SQL Server Management Studio”--“管理”--“维护计划”--“维护计划向导”--“维护计划向导” 在这里由于这里有三项计

SQL Server 2012数据库还原所遇到的问题

在SQL Server2005及以下版本做数据库备份还原时,需要首先建立数据库,然后才能进行数据库还原操作:而在SQL Server2005以上版本做数据库还原时,不需要建立数据库,可以直接进行数据库备份操作,否则执行数据库还原操作时会报3154错误. END SQL Server2012数据库还原操作实例 1 以还原test数据库为例. 2 首先启动SQL Server2012软件,展开左侧目录树,在[数据库]节点上右键点击,弹出右键菜单,如图所示 3 选择[还原文件和文件组(E)...]功能