数据库常常要做“完整/差异”备份,以下的语法是己撰写好的应用语法,只要填入JSON内的数据,就可以做到轻易的数据库备份应用。我采用的是“预存程序”+ JSON的方法来达到可以备份资料库,可以在JSON语法中去多做变化,来达到您的需求。
透过IT邦帮忙也给我记录
IF OBJECT_ID('dbo.数据库备份-快速执行数据库备份')IS NOT NULL
DROP PROCEDURE [dbo].[数据库备份-快速执行数据库备份]
GO
CREATE PROCEDURE [dbo].[数据库备份-快速执行数据库备份]
(
@_InBox_JSON_Source nvarchar(Max)--数据源
)
AS
--相关注解说明请写在这里,以免从Visual Studio转至SQL说明内容没有一起上去
-- ==========================================================================
--用途:数据库备份-完整备份(handbags-coupons)
--制作人:
--年月日:
--说明:这部份是给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_DataBaseName nvarchar(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_BackDate nvarchar(100)=REPLACE(CONVERT(nvarchar(30),GETDATE(),112),':','');
DECLARE @_InBox_BackTime nvarchar(100)=REPLACE(CONVERT(nvarchar(30),GETDATE(),8),':','');
DECLARE @_InBox_BackServiceName nvarchar(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_Path nvarchar(500)=JSON_VALUE(@_InBox_JSON_Source,'$[0].DB_Directory')+@_InBox_BackName+'_'+ @_InBox_BackupMethod +'_'+'_Log_' +@_InBox_BackDate +'_'+@_InBox_BackTime+'.Bak'
--回传执行上的可能错误
DECLARE @_SystemInfoLog Table
(
DBName nvarchar(1000),--数据库名称
DBPathInfo nvarchar(1000),--储存备份路径
DBErrorMessage nvarchar(Max),--错误说明
Sysinfo_isError nvarchar(2),--记录错误的信息
SysInfo_MainCode nvarchar(200),
SysInfo_MinorCode nvarchar(200)
)
-- ========宣告系统要用的信息-结束================
if(LEN(@_InBox_DataBaseName)!=0 AND LEN(@_InBox_BackupMethod)!=0)
Begin
if(@_InBox_BackupMethod='完整')
Begin
--执行Try
BEGIN TRY
--下达完整备份
BACKUP DATABASE @_InBox_DataBaseName
--========备份磁盘实际上的位置==========
--储存档案的位置
--==========================
TO DISK = @_InBox_DISK_DB_Path
--========备份方式==========
--完整备份>> WITH NOFORMAT
--差异备份>> WITH DIFFERENTIAL
WITH NOFORMAT,
--========压缩方式==========
--档案压缩>> COMPRESSION
--档案压缩>> NO_COMPRESSION
--==========================
COMPRESSION,
--========备份作业复写========
--备份复写>> INIT
--附加媒体>> NOINIT
--==========================
NOINIT,
--========预设数据库备份或还原的I/O=========
--预设为>> 10
--==============================
BUFFERCOUNT = 1024,
--========此备份数据库的名称与说明255字以内=========
--预设为>> 10
--==============================
NAME = @_InBox_BackMemo,
--========检查媒体备份到期日====
--必须要检查>> NOSKIP先检查媒体中所有备份组的到期日
--不须要检查>> SKIP则略过检查动作
--==============================
SKIP,
--=====备份硬件-磁带备份设定====
--释放和倒转磁带>> REWIND将释放和倒转磁带
--释放和倒转磁带>> NOREWIND不释放和倒转磁带(ernakulamchess)
--==============================
NOREWIND,
--=====备份硬件-自动倒转和卸载磁带====
--释放和倒转磁带>> UNLOAD自动倒转和卸载磁带
--释放和倒转磁带>> NOUNLOAD磁带机上保持加载