文件收缩和移除

收缩数据文件(要腾空间,没办法只能收缩文件)的过程中,遇到日志备份,报错

复制代码
USE [DBA_Monitor]
GO
DBCC SHRINKFILE (N'DBA_Monitor' , 276000)
GO
View Code
复制代码


等待日志备份结束,再次收缩数据文件,报错

查询得知可通过修改文件初始大小

复制代码
--修改文件初始大小,当前大小的基础上加1M
USE [master]
GO
ALTER DATABASE [DBA_Monitor] MODIFY FILE ( NAME = N'DBA_Monitor', SIZE = 283649024KB )
GO
View Code
复制代码

再次收缩正常。
发现一数据库有两个日志文件,SQLServer对日志记录是按照严格的顺序写入的。所以虽然这里有两个日志文件,SQLServer还是在一个时间点只写其中的一个。只有这个文件写满了,SQLSERVER才会写入另外一个。因此加入多个日志文件对性能基本不会有什么帮助。
如何确认当前使用的是哪个日志文件?
可以使用dbcc loginfo命令,查看当前Status>0的FileID

复制代码
create table #loginfo(FileId int,FileSize int,StartOffset bigint,FSeqNo bigint,Status int,Parity int,CreateLSN varchar(32))
insert into #loginfo
exec('dbcc loginfo')
select * From #loginfo
where status>0
drop table #loginfo
View Code
复制代码

如何删除多余的日志文件
首先,清空多余的日志文件;然后,删除清空后的日志文件

复制代码
--step1通过将数据迁移到同一文件组中的其他文件来清空文件
USE [DBA_Monitor]
GO
DBCC SHRINKFILE (N'DBA_Monitor_log2' , EMPTYFILE)
GO
--step2移除清空后的日志文件
USE [DBA_Monitor]
GO
ALTER DATABASE [DBA_Monitor] REMOVE FILE [DBA_Monitor_log2]
GO
View Code
复制代码
posted @   Uest  阅读(320)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示