在项目中数据库创建了一个本地发布和订阅,造成日志文件飞涨,想把日志文件缩小。
1:最初使用了最常用的方法:
USE [master]
GO
ALTER DATABASE 库名 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 库名 SET RECOVERY SIMPLE --简单模式
GO
USE 库名
GO
DBCC SHRINKFILE (N'库名_log' , 11, TRUNCATEONLY)
GO
--这里的DNName_Log 如果不知道在sys.database_files里是什么名字的话,可以用以下注释的语句进行查询
--USE 库名
--GO
--SELECT file_id,name FROM sys.database_files;
--GO
USE [master]
GO
ALTER DATABASE SCDMS SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE SCDMS SET RECOVERY FULL --还原为完全模式
GO
结果发现不起作用
2:然后在网上查找命令,找到日志文件类型为 REPLICATION 即发布状态
3:又查找到执行命令 ,该命令显示很多status为2的日志,即没有提交的。
DBCC LOGINFO('数据库名称')
4:直接选择我之前创建的发布,提示以下错误:
sqlserver无法作为数据库主体执行,因为主体 "dbo" 不存在...
查找到以下命令,为用户添加数据库角色时提示已经存在此帐号请查看数据库下是否已经存在该帐号并删除重新授权
USE 库名
EXEC sp_changedbowner 'sa'
5:然后再删除发布和订阅即成功。最后再执行第一步的SQL命令,日志文件缩小成功。