移动网站的建设,济南建网站公司排行榜,邓州微网站开发,中山企业网站起因
我们公司E8的数据用的是SQL Server 2012在我把从生产环境下复制来的数据库备份文件恢复到本机测试环境里时#xff0c;被提示硬盘空间不足。备份文件3G多#xff0c;硬盘剩余空间10G左右。于是我去生产环境看了一下数据库的物理文件#xff0c;就是扩展名是mdf文件被提示硬盘空间不足。备份文件3G多硬盘剩余空间10G左右。于是我去生产环境看了一下数据库的物理文件就是扩展名是mdf文件以下简称数据库文件和ldf文件以下简称是日志文件的那两个文件。不看不知道一看下一跳数据库文件文件3G左右日志文件18G左右。
备份是用的存储过程SQL Server代理每天定时执行这个存储过程实现自动备份存储过程的写法网上也有现成的案例后面我也会把它放到代码里。至于SQL Server代理的设置方法不是本文的重点需要具体操作方法的小伙伴请自行百度。
经过
先不管数据库文件先来说说日志文件网上都说它是个日志文件的大小是随着数据库的执行会不断增大的。它主要用来支持事务回滚差异备份的恢复等操作提供支持的。清理日志文件的方法有很多目前我能熟练操作的有两种方法第一种方法是分离数据库删除日志文件再附加数据库用这种方法让DBMS去重建日志文件。第二种方法是用”收缩“功能去收缩日志文件但要在收缩之前把数据库的恢复模式详细步骤不是本文的重点需要具体操作方法的小伙伴可以自行百度。
思路是这样式儿的我想每天在备份完数据库之后清理一下日志文件。
由于备份是在存储过程中实现的于是我就想能不能把清理日志文件的操作也一并放到存储过程里。结合自己掌握的知识上面说的第一种方法我实现不出来。第二种方法在修改数据库的恢复模式和收缩数据库的操作步骤中都是可以获取到相应的SQL语句的倒是可以尝试一下。
在经过测试了完整备份了一个收缩过的日志文件的数据库再进行还原确认了日志文件在做完整备份的时候几乎没有影响之后便尝试着修改存储过程实现以上目标。
结果 USE [ecology] GO /****** Object: StoredProcedure [dbo].[BackupDB] Script Date: 2024/3/6 9:54:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[BackupDB] AS begin declare filename nvarchar(100)--文件名 -- 备份数据库部份 begin set filenamee:\ecologyBackup\ecology CONVERT(varchar(100), GETDATE(), 23) --Sunday 1、Saturday 7 print filename BACKUP DATABASE ecology TO DISK filename WITH INIT , NOUNLOAD , NOSKIP , STATS 10, NOFORMAT -- 备份数据库部份 end -- 尝试在存储过程中收缩数据库开始 20240306 begin ALTER DATABASE [ecology] SET RECOVERY SIMPLE WITH NO_WAIT --把恢复模式调成简单 DBCC SHRINKFILE (Necology_log , 0, TRUNCATEONLY) -- 收缩日志文件 DBCC SHRINKFILE (Necology , 0, TRUNCATEONLY) --收缩数据库文件 ALTER DATABASE [ecology] SET RECOVERY FULL WITH NO_WAIT --把恢复模式调成完整 -- 尝试在存储过程中收缩数据库开始 20240306 end end GO
其中以前我没注意到的地方是在存储过程体里不能有USE语句和GO关键字在SSMS里操作调整恢复模式和收缩数据库文件和收缩日志文件这些步骤中生成的SQL语句中是包含USE语句和GO关键字的去掉就好了。虽然在调整恢复模式的步骤中写的是USE [master]没关系同样删除USE语句就好了。
这种方法适合SQL Server的数据库。
喜欢的小伙伴们请关注、点赞、评论。大家的鼓励是我持续创作的动力。感谢