博客摘录「 Sql Server 收缩日志文件原理及always on 下的实践」2024年5月22日

四、Always on 环境下实践

先对数据库进行完整备份:

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;

RECONFIGURE;

DECLARE @DbName NVARCHAR(1000);

DECLARE myCursor CURSOR LOCAL STATIC

FOR

SELECT [name]

FROM sysdatabases

WHERE [name] NOT IN ( 'master', 'model', 'msdb', 'tempdb' )

AND name NOT LIKE '%test%'

AND name NOT LIKE '%bak%'

AND name NOT LIKE '%demo%'

AND version IS NOT NULL

AND version <> 0

ORDER BY [name];

OPEN myCursor;

FETCH NEXT FROM myCursor INTO @DbName;

WHILE ( @@FETCH_STATUS = 0 )

BEGIN

DECLARE @strDate AS NVARCHAR(20),

@strDateBeforeSeven AS NVARCHAR(20),

@strFileName AS NVARCHAR(255),

@strFileNameBeforeSeven AS NVARCHAR(255),

@strCommand AS NVARCHAR(255)

SET @strDate = CONVERT(NVARCHAR(20),GETDATE(),112);

SET @strDateBeforeSeven = CONVERT(NVARCHAR(20),GETDATE()-3,112);

SET @strFileName = 'E:\daybak\['+@DbName+']bakup'+@strDate;

SET @strFileNameBeforeSeven = 'E:\daybak\['+@DbName+']bakup'+@strDateBeforeSeven;

EXEC ('BACKUP DATABASE ['+@DbName+'] TO DISK = ''' + @strFileName + '.bak''')

SET @strCommand = 'DEL ' + @strFileNameBeforeSeven + '.bak'

EXEC master.dbo.xp_cmdshell @strCommand

FETCH NEXT FROM myCursor INTO @DbName;

END;

CLOSE myCursor;

DEALLOCATE myCursor;

然后对数据库进行事务日志备份并收缩:

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;

RECONFIGURE;

DECLARE @DbName NVARCHAR(1000);

DECLARE myCursor CURSOR LOCAL STATIC

FOR

SELECT [name]

FROM sysdatabases

WHERE [name] NOT IN ( 'master', 'model', 'msdb', 'tempdb' )

AND name NOT LIKE '%test%'

AND name NOT LIKE '%bak%'

AND name NOT LIKE '%demo%'

AND version IS NOT NULL

AND version <> 0

ORDER BY [name];

OPEN myCursor;

FETCH NEXT FROM myCursor INTO @DbName;

WHILE ( @@FETCH_STATUS = 0 )BEGIN

DECLARE @strDate AS NVARCHAR(20),

@strDateBeforeSeven AS NVARCHAR(20),

@strFileName AS NVARCHAR(255),

@strFileNameBeforeSeven AS NVARCHAR(255),

@strCommand AS NVARCHAR(255)

SET @strDate = CONVERT(NVARCHAR(20),GETDATE(),112);

SET @strDateBeforeSeven = CONVERT(NVARCHAR(20),GETDATE()-3,112);

SET @strFileName = 'E:\Log_daybak\['+@DbName+']bakup'+@strDate;

SET @strFileNameBeforeSeven='E:\Log_daybak\'+@DbName+']bakup'+@strDateBeforeSeven;

EXEC ('BACKUP LOG ['+@DbName+'] TO DISK = ''' + @strFileName + '.log'';USE ['+@DbName+'];DBCC SHRINKFILE(2,100);')

SET @strCommand = 'DEL ' + @strFileNameBeforeSeven + '.log'

EXEC master.dbo.xp_cmdshell @strCommand

FETCH NEXT FROM myCursor INTO @DbName;

END;

CLOSE myCursor;

DEALLOCATE myCursor;

相关推荐
智者知已应修善业20 小时前
【51单片机单按键控制2个LED循环闪烁】2022-12-7
c语言·经验分享·笔记·嵌入式硬件·51单片机
所愿ღ21 小时前
JavaWeb-Session和ServletContext
java·笔记·servlet
程序员东岸21 小时前
C语言入门指南:字符函数和字符串函数
c语言·笔记·学习·程序人生·算法
xiezhr1 天前
一款带有AI功能的markdown笔记工具
笔记·程序员·产品
Katzelala1 天前
[K8S学习笔记] Service和Ingress的关系
笔记·学习·kubernetes
递归不收敛1 天前
PyCharm项目上传GitHub仓库(笔记)
笔记·pycharm·github
递归不收敛1 天前
一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)
java·开发语言·笔记
xian_wwq1 天前
【学习笔记】Https证书如何升级到国密
笔记·学习·证书
一又四分之一.1 天前
hexo文章
笔记
Suckerbin1 天前
TBBT: FunWithFlags靶场渗透
笔记·安全·web安全·网络安全