首页 > 数据库 >SQL Server数据库备份、差异备份、日志备份脚本.250108

SQL Server数据库备份、差异备份、日志备份脚本.250108

时间:2025-01-08 10:55:53浏览次数:1  
标签:SET 250108 filepath 备份 Database dateTime databaseName SQL backup

1,sp脚本

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabase]    Script Date: 2025/1/8 10:43:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Author: Amadeus

-- Create date: 2021-10-20   exec sp_BackupDatabase L

-- Description: 备份数据库,备份路径C:\Database_BackUp\ 可自行修改

-- Parameter1: 备份类型 F=全部, D=差异, L=日志

ALTER PROCEDURE [dbo].[sp_BackupDatabase]
@backupType CHAR(1)
AS
BEGIN
SET NOCOUNT ON;

declare @filepath_backup varchar(100)
declare @dateTime varchar(30),@del_time_stamp varchar(50)
DECLARE @sqlCommand NVARCHAR(1000)
DECLARE @sourcePath  nvarchar(max) 
DECLARE @destionationPath  nvarchar(max) 
DECLARE @cmdStr  nvarchar(max) 

-- 创建数据库对应文件夹
EXECUTE master.dbo.xp_create_subdir N'D:\Database_BackUp\Full\'
EXECUTE master.dbo.xp_create_subdir N'D:\Database_BackUp\Difference\'
EXECUTE master.dbo.xp_create_subdir N'D:\Database_BackUp\Log_Bak\'

IF @backupType = 'F'
set @filepath_backup='D:\Database_BackUp\Full\'
IF @backupType = 'D'
set @filepath_backup='D:\Database_BackUp\Difference\'
IF @backupType = 'L'
set @filepath_backup='D:\Database_BackUp\Log_Bak\'

SET ANSI_WARNINGS OFF
SET @dateTime = replace(convert(varchar,current_timestamp, 112)+'_'+convert(varchar,current_timestamp, 108),':','')

----删除超过30天的备份文件
DECLARE @delete_time datetime
set @delete_time = getdate() -30

EXECUTE master.dbo.xp_delete_file 0,N'D:\Database_BackUp',N'trn',@delete_time,1
EXECUTE master.dbo.xp_delete_file 0,N'D:\Database_BackUp',N'bak',@delete_time,1

SELECT @dateTime = replace(convert(varchar,current_timestamp, 112)+'_'+convert(varchar,current_timestamp, 108),':','')

declare db_info cursor for    
SELECT NAME,recovery_model FROM MASTER.SYS.databases 
where state = 0 ---只处理online的数据库 
and name in ('Test')  ----填写需要备份的数据库

declare @databaseName nvarchar(128) 
declare @recovery_model  int
OPEN db_info    
fetch next from db_info into @databaseName,@recovery_model 
while @@fetch_status=0    
Begin    

---recovery_model 1 : FULL 2 : BULK_LOGGED 3:SIMPLE

IF @backupType = 'F' 
begin
	SET @sqlCommand = 'BACKUP DATABASE '+ @databaseName +' TO DISK = '''+ @filepath_backup + ''+ @databaseName +'_Full_'+@dateTime+'.BAK'' with STATS = 10, INIT, COMPRESSION, CHECKSUM '
	set @sourcePath = @filepath_backup + ''+ @databaseName +'_Full_'+@dateTime+'.BAK'	
end
IF @backupType = 'D' and @databaseName not in ('master','msdb','model')
begin
   SET @sqlCommand = 'BACKUP DATABASE '+ @databaseName +' TO DISK = '''+ @filepath_backup + ''+ @databaseName + '_Diff_' + @dateTime + '.BAK '' WITH DIFFERENTIAL, STATS = 10, INIT, COMPRESSION'
   set @sourcePath = @filepath_backup + ''+ @databaseName +'_Diff_'+@dateTime+'.BAK' 
end
IF @backupType = 'L' and @recovery_model <> 3 and @databaseName not in ('master','msdb','model')
begin
	SET @sqlCommand = 'BACKUP LOG '+ @databaseName +' TO DISK = '''+ @filepath_backup + '' + @databaseName +'_Log_' + @dateTime + '.TRN'' with STATS = 10, INIT, COMPRESSION'
	set @sourcePath = @filepath_backup + ''+ @databaseName +'_Log_'+@dateTime+'.TRN' 
end
print @sqlCommand

EXECUTE sp_executesql @sqlCommand 

fetch next from db_info into @databaseName,@recovery_model 
End    

close db_info    
deallocate db_info    

PRINT '-- Backup completed successfully at '+convert(varchar, getdate(), 120)    

SET ANSI_WARNINGS ON
END

2,SQL agent任务指令:

[dbo].[sp_BackupDatabase] 'F'

3,别忘了每周agent任务,跑一下数据库日志的收缩,例:test数据库

USE test;
GO 
ALTER DATABASE test
SET RECOVERY SIMPLE;  --设置简单恢复模式
GO

DBCC SHRINKFILE (test_log, 1);
GO

ALTER DATABASE test
SET RECOVERY FULL;   --恢复为原模式
GO

标签:SET,250108,filepath,备份,Database,dateTime,databaseName,SQL,backup
From: https://www.cnblogs.com/amadeuslee/p/18659250

相关文章

  • webapi 集成 之 freesql 注入
    usingEasyCaching.SQLite;usingjxc.Repository;usingjxc.Service;namespacejxc.Api;publicclassProgram{publicstaticvoidMain(string[]args){WebApplicationBuilderbuilder=WebApplication.CreateBuilder(args);//Addser......
  • docker-compose安装mysql.211216
    0.安装docker-compose参见本站另外文章1.目录结构:按以下目录结构mkdir文件夹和相关文件**mysql目录下的data为数据目录,mysql的数据表、二进制日志文件就在这里。.env文件包含了一些变量,这些变量可以在docker-compose.yml文件中通过${variable_name}来引用。2.创......
  • mysql忘记密码的终极解决方案(docker-compose).211216
    MYSQL8的安全性能有所提高,装好后,各种不适应,需要各种调试。1.首先,root密码忘记或是更改,操作步骤:vimysql/config/my.cnf在[mysqld]的段中加上一句:skip-grant-tables=1保存并且退出vi。2.docker-composerestart进入bash,运行mysql-uroot-p,回车,直接进入。下面很重要,特别......
  • 【GreatSQL优化器-09】make_join_query_block
    【GreatSQL优化器-09】make_join_query_block一、make_join_query_block介绍GreatSQL优化器对于多张表join的连接顺序在前面的章节介绍过的best_access_path函数已经执行了,接着就是把where条件进行切割然后推给合适的表。这个过程就是由函数make_join_query_block来执行的。下......
  • Mysql高可用架构方案
    Mysql高可用架构方案合集-中间件(9) 1.SpringBoot整合MinIO2023-09-132.Nginx安装nginx-rtmp-module模块2024-03-133.OBS+Nginx+VLC推拉流2024-03-134.Redis的未来2024-04-085.阿里DataX极简教程2024-05-166.安装nginx-http-flv-module模块2024-09-237.Mysql高可用架构方......
  • 如何解决升级 MySQL 后网站无法访问的问题
    问题描述:在使用建站助手时,将MySQL升级后,所有网站都无法正常访问。尝试恢复到之前的MySQL版本后,问题仍然存在。希望了解如何正确地升级MySQL并确保数据完整导入。解决方案:当您在建站助手中升级MySQL版本后,出现网站无法访问的情况,通常是因为数据库连接或数据迁移过程中出......
  • 监控BASH脚本执行的命令的退出状态.250108
    解释代码:if[$?-eq0];then在Bash脚本中,$?是一个特殊的变量,它表示上一个执行的命令的退出状态。在Unix-like系统中,命令成功执行通常返回0,而非零的返回值通常表示命令执行失败或发生错误。if[$?-eq0];then这行代码的意思是:if:Bash中的条件语句关键字,用于开始......
  • zabbix5.0版本 (用脚本自定义监控项+监控MySQL状态信息)
    目录1.用脚本自定义监控项(1)编写脚本进行取值(2)修改zabbix客户端配置文件(3)zabbix创建模板及监控项(4)关联至被监控主机2.监控MySQl状态信息(1)使用脚本定义监控项(2)服务端创建MySQL监控模板(3)添加触发器(4)配置图形(5)关联至被监控主机(6)测试并查看数据3.自定义监控项以及监控......
  • 如何将高版本MySQL数据库备份导入到低版本MySQL数据库?
    在处理MySQL数据库时,有时会遇到需要将高版本的数据库备份导入到低版本MySQL的情况。例如,从MySQL5.7导入到MySQL5.5。直接导入可能会导致兼容性问题和错误。为了解决这个问题,可以采用以下几种方法来确保顺利迁移数据。方法一:使用第三方工具进行迁移步骤操作说明1选择......
  • 造成MySQL数据库访问很慢的原因及解决方法
    MySQL数据库访问速度变慢可能会影响网站和应用程序的性能,给用户体验带来负面影响。以下是导致MySQL数据库访问缓慢的常见原因及其相应的解决方法,帮助您快速诊断并优化数据库性能。造成MySQL数据库访问缓慢的常见原因1.硬件性能瓶颈原因解决方案磁盘和CPU性能不足:硬件......