[SQL SERVER]-资料库备份-语法

资料库常常要做 "完整/差异" 备份,以下的语法是己撰写好的应用语法,只要填入 JSON 内的资料,就可以做到轻易的资料库备份应用。我採用的是 "预存程序" + JSON 的方法来达到可以备份资料库,可以在 JSON 语法中去多做变化,来达到您的需求。

透过 IT邦帮忙 也给我记录


IF OBJECT_ID('dbo.资料库备份-快速执行资料库备份') IS NOT NULL    DROP PROCEDURE [dbo].[资料库备份-快速执行资料库备份]GOCREATE PROCEDURE [dbo].[资料库备份-快速执行资料库备份](@_InBox_JSON_Sourcenvarchar(Max)--资料来源)AS-- 相关注解说明请写在这里,以免从 Visual Studio 转至 SQL 说明内容没有一起上去-- ==========================================================================-- 用途:资料库备份-完整备份-- 製   作  人:-- 年   月  日:-- 说明:这部份是给 API 应用-- 1. 专业人员没有写注解不叫专业-- 2. 请儘可能 FROM 后面加 WITH(NOLOCK) 不要锁定表格-- 3. 转 JSON 格式 FOR JSON PATH, (输出 Null)INCLUDE_NULL_VALUES, (排除 [] 格式)WITHOUT_ARRAY_WRAPPER-- 4. 栏位不分大小写 COLLATE Chinese_Taiwan_Stroke_CI_AS-- ==========================================================================-- ========宣告系统要用的资讯 - 开始 ================DECLARE @_InBox_DataBaseNamenvarchar(100)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name')DECLARE @_InBox_BackName       nvarchar(100)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_BackupFileName')DECLARE @_InBox_BackMemo       nvarchar(100)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_BackupMemo')DECLARE @_InBox_BackupMethod       nvarchar(100)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_BackupMethod')DECLARE @_InBox_BackDatenvarchar(100)=REPLACE(CONVERT(nvarchar(30),GETDATE(),112),':','');DECLARE @_InBox_BackTimenvarchar(100)=REPLACE(CONVERT(nvarchar(30),GETDATE(),8),':','');DECLARE @_InBox_BackServiceNamenvarchar(100)=@_InBox_BackName+@_InBox_BackTime        DECLARE @_InBox_DISK_DB_Path       nvarchar(500)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory')+@_InBox_BackName+'_'+ @_InBox_BackupMethod +'_'+'DB_'+@_InBox_BackDate +'_'+@_InBox_BackTime+'.Bak'DECLARE @_InBox_DISK_Log_Pathnvarchar(500)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory')+@_InBox_BackName+'_'+ @_InBox_BackupMethod +'_'+'Log_'+@_InBox_BackDate +'_'+@_InBox_BackTime+'.Bak'--回传执行上的可能错误DECLARE @_SystemInfoLogTable(DBNamenvarchar(1000),--资料库名称DBPathInfonvarchar(1000),--储存备份路径DBErrorMessagenvarchar(Max),--错误说明Sysinfo_isErrornvarchar(2),--记录错误的讯息SysInfo_MainCodenvarchar(200) ,SysInfo_MinorCodenvarchar(200))-- ========宣告系统要用的资讯 - 结束 ================if(LEN(@_InBox_DataBaseName)!=0 AND LEN(@_InBox_BackupMethod)!=0)Beginif(@_InBox_BackupMethod='完整')Begin--执行 Try BEGIN TRY  --下达完整备份BACKUPDATABASE @_InBox_DataBaseName --========备份磁碟实际上的位置==========-- 储存档案的位置--==========================TO DISK = @_InBox_DISK_DB_Path--========备份方式==========--完整备份 >> WITH NOFORMAT--差异备份 >> WITH DIFFERENTIALWITH NOFORMAT, --========压缩方式==========--档案压缩 >> COMPRESSION--档案压缩 >> NO_COMPRESSION 档案不压缩--==========================COMPRESSION ,--========备份作业覆写========--备份覆写 >> INIT--附加媒体 >> NOINIT--==========================NOINIT,--========预设资料库备份或还原的I/O=========--预设为 >> 10--==============================BUFFERCOUNT = 1024,  --========此备份资料库的名称与说明 255 字以内=========--预设为 >> 10--==============================NAME = @_InBox_BackMemo,--========检查媒体备份到期日====--必须要检查 >> NOSKIP先检查媒体中所有备份组的到期日--不须要检查 >> SKIP则略过检查动作--==============================SKIP,--=====备份硬体-磁带备份设定====--释放和倒转磁带 >> REWIND将释放和倒转磁带--释放和倒转磁带 >> NOREWIND不释放和倒转磁带--==============================NOREWIND, --=====备份硬体-自动倒转和卸载磁带====--释放和倒转磁带 >> UNLOAD自动倒转和卸载磁带--释放和倒转磁带 >> NOUNLOAD磁带机上保持载入--==============================NOUNLOAD,--=====完成多少百分比时,回报一则讯息====--预设为 >> 10--==============================STATS = 10--填入记录INSERT INTO @_SystemInfoLog VAlues(JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name')+'-'+@_InBox_BackupMethod,JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory'),'执行正常',REPLACE(ERROR_STATE(),NULL,'0'),'完整备份-成功','资料库己确定完整备份了 ['+ JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name') +']')END TRY  BEGIN CATCH  --填入记录INSERT INTO @_SystemInfoLog VAlues(JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name')+'-'+@_InBox_BackupMethod,JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory'),ERROR_MESSAGE(),REPLACE(ERROR_STATE(),NULL,'0'),'完整备份-失败','无法执行资料库备份 ['+ JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name') +']')END CATCH;  Endelse if(@_InBox_BackupMethod='差异')Begin--执行 Try BEGIN TRY  --下达查异性备份BACKUPDATABASE @_InBox_DataBaseName --========备份磁碟实际上的位置==========-- 储存档案的位置--==========================TO DISK = @_InBox_DISK_DB_Path--========备份方式==========--完整备份 >> WITH NOFORMAT--差异备份 >> WITH DIFFERENTIALWITH DIFFERENTIAL, --========压缩方式==========--档案压缩 >> COMPRESSION--档案压缩 >> NO_COMPRESSION    档案不压缩--==========================NO_COMPRESSION ,--========备份作业覆写========--备份覆写 >> INIT--附加媒体 >> NOINIT--==========================NOINIT,--========预设资料库备份或还原的I/O=========--预设为 >> 10--==============================BUFFERCOUNT = 1024,  --========此备份资料库的名称与说明 255 字以内=========--预设为 >> 10--==============================NAME = @_InBox_BackMemo,--========检查媒体备份到期日====--必须要检查 >> NOSKIP先检查媒体中所有备份组的到期日--不须要检查 >> SKIP则略过检查动作--==============================SKIP,--=====备份硬体-磁带备份设定====--释放和倒转磁带 >> REWIND将释放和倒转磁带--释放和倒转磁带 >> NOREWIND不释放和倒转磁带--==============================NOREWIND, --=====备份硬体-自动倒转和卸载磁带====--释放和倒转磁带 >> UNLOAD自动倒转和卸载磁带--释放和倒转磁带 >> NOUNLOAD磁带机上保持载入--==============================NOUNLOAD,--=====完成多少百分比时,回报一则讯息====--预设为 >> 10--==============================STATS = 10--填入记录INSERT INTO @_SystemInfoLog VAlues(JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name')+'-'+@_InBox_BackupMethod,JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory'),'执行正常',REPLACE(ERROR_STATE(),NULL,'0'),'差异备份-成功','资料库己确定差异备份了 ['+ JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name') +']')END TRY  BEGIN CATCH  --填入记录INSERT INTO @_SystemInfoLog VAlues(JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name')+'-'+@_InBox_BackupMethod,JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory'),ERROR_MESSAGE(),REPLACE(ERROR_STATE(),NULL,'0'),'差异备份-失败','无法执行资料库差异备份 ['+ JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name') +']')END CATCH;  EndEndelseBegin--填入指定的错误代码INSERT INTO @_SystemInfoLog VAlues(JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Name'),JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory'),'下达的命令与语法错误','0','0','0')End --转出整个执行的内容SELECT*FROM@_SystemInfoLog

执行的语法动作

EXEC [资料库备份-快速执行资料库备份] '[      {          "DB_Name":"资料库完整的名称",        "DB_Directory":"D:\\Microsoft SQL Server\\DataBack\\行政管理\\完整备份\\",        "DB_BackupFileName":"您要备份的档案名称",        "DB_BackupMemo":"针对此备份你要填入的说明",        "DB_BackupMethod":"完整/差异"    }]'

要注意的部份

执行时请确定 "执行帐号" 是有权限的DB_Directory 要储存的目录必须自行建制,如果目录不在就会直接报错DB_BackupFileName 是实体档案名称DB_BackupMethod 下达备份方式
 "完整" >> 就会备份完整的资料库
 "差异" >> 就只备份最后差异性的部份

您可以配合 SQL Server Agent 来做排程来达到需求,备份出来的档案会像是以下名称

资料库名称_完整_DB_20181219_170916.Bak
资料库名称_差异_DB_20181219_170916.bak


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章