SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DEC...
原文: SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原

--作业定时压缩脚本 多库批量操作
DECLARE @DatabaseName NVARCHAR(50)
DECLARE @ExecuteSql NVARCHAR(MAX)
SET @ExecuteSql=''
DECLARE name_cursor CURSOR
FOR
	SELECT name FROM  master..sysdatabases WHERE name NOT IN ( 'master', 'model', 'msdb', 'tempdb', 
	'northwind','pubs' ) 
OPEN name_cursor;  
FETCH NEXT FROM name_cursor INTO @DatabaseName;  
WHILE @@FETCH_STATUS = 0
    BEGIN   
	    SET @ExecuteSql =''
		SET @ExecuteSql +='
		    USE ['+@DatabaseName+'];
			DECLARE @Error INT
			SET @Error=(SELECT TOP 1 size/128.0 - CAST(FILEPROPERTY([NAME], ''SpaceUsed'') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files ORDER BY [NAME] DESC)
			--PRINT @Error

			IF(@Error>1)
				BEGIN
					ALTER DATABASE ['+@DatabaseName+']  --数据库名字
					SET RECOVERY SIMPLE;  --设置简单恢复模式
					DBCC SHRINKFILE ([YiDianTongV2], 1);  --(M)不能小于1M,
					DBCC SHRINKFILE ([YiDianTongV2_log], 1);  --(M)不能小于1M
					ALTER DATABASE ['+@DatabaseName+']
					SET RECOVERY FULL;  --恢复为原来完整模式
				END
		'
        PRINT @ExecuteSql; --打印
		EXEC(@ExecuteSql)  --执行
        FETCH NEXT FROM name_cursor INTO @DatabaseName;  
    END;  
CLOSE name_cursor;  
DEALLOCATE name_cursor;  
DECLARE @DatabaseName NVARCHAR(50)
DECLARE @ExecuteSql NVARCHAR(MAX)
SET @ExecuteSql=''
DECLARE name_cursor CURSOR
FOR
	SELECT name FROM  master..sysdatabases WHERE name NOT IN ( 'master', 'model', 'msdb', 'tempdb', 
	'northwind','pubs')  AND name LIKE '%mh%'
OPEN name_cursor;  
FETCH NEXT FROM name_cursor INTO @DatabaseName;  
WHILE @@FETCH_STATUS = 0
    BEGIN   
	    SET @ExecuteSql =''
		SET @ExecuteSql ='USE ['+@DatabaseName+'];'
		SET @ExecuteSql +='这里换成要执行的sql语句'
        PRINT @ExecuteSql; --打印
		--EXEC(@ExecuteSql)  --执行
        FETCH NEXT FROM name_cursor INTO @DatabaseName;  
    END;  
CLOSE name_cursor;  
DEALLOCATE name_cursor;  
/************************************************************
 * 数据备份脚本:
 * 1.运行前,请根据实际配置修改相应账户信息;
 * 2.请将脚本执行结果另存为批处理文件,执行批处理文件即可;
 ************************************************************/
 
DECLARE @name        NVARCHAR(200)  
DECLARE @path        NVARCHAR(500)   
DECLARE @dbServer    NVARCHAR(500) 
DECLARE @dbUserName  NVARCHAR(500)   
DECLARE @dbUserPwd   NVARCHAR(500)   
--备份文件存放路径
SET @path = 'E:\05_DataBase_bakup\'   
--数据库服务器
SET @dbServer = '.'   
--数据库用户名        
SET @dbUserName = 'sa'  
--数据库用户密码         
SET @dbUserPwd = '123'        
DECLARE cursors CURSOR  
FOR
    --查询集合
    SELECT [name]
    FROM   [sysdatabases]
    WHERE  NAME NOT IN ('master', 'tempdb', 'model', 'msdb')
             
 OPEN cursors                       
 FETCH NEXT FROM cursors INTO @name  
WHILE @@fetch_status = 0
BEGIN
    --遍历集合 
    PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd + 
    ' -Q "BACKUP DATABASE ['
    + @name + '] TO DISK = ''' + @path +
    '[%date:~0,4%%date:~5,2%%date:~8,2%]' + @name + '.bak''"' 
    FETCH NEXT FROM cursors INTO @name
END
 CLOSE cursors                
 DEALLOCATE cursors
/************************************************************
 * 生成批量还原数据库脚本
 ************************************************************/
DECLARE @name         NVARCHAR(200)  
DECLARE @fileName     NVARCHAR(200)  
DECLARE @path         NVARCHAR(500)  
DECLARE @restorePath  NVARCHAR(500)   
DECLARE @dbServer     NVARCHAR(500) 
DECLARE @dbUserName   NVARCHAR(500)   
DECLARE @dbUserPwd    NVARCHAR(500)   
--数据库备份文件存放路径
SET @path = 'E:\05_DataBase_bakup\' 
--数据库还原后的文件存放路径  
SET @restorePath = 'E:\db2008\'   
--还原到的数据库服务器
SET @dbServer = '192.168.0.7,1501\SQL2008'   
--还原到的数据库用户名       
SET @dbUserName = 'netuser'  
--还原到的数据库用户密码        
SET @dbUserPwd = 'netuser2008'        
DECLARE cursors     CURSOR  
FOR
    --查询集合
    --注意:这里将数据库文件的物理路径替换掉了一部分,只保留数据库名称    
    SELECT [name],
           REPLACE  (REPLACE(FILENAME, 'E:\01.数据库\', ''), '.mdf', '') AS 
           [fileName]
    FROM   [sysdatabases]
    WHERE  NAME NOT IN ('master', 'tempdb', 'model', 'msdb')  
             
 OPEN cursors                       
 FETCH NEXT FROM cursors INTO @name,@fileName                                                                 
WHILE @@fetch_status = 0
BEGIN
    --遍历集合
    PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd +
    ' -Q "RESTORE DATABASE [' + @name + '] FROM DISK = ''' + @path + @name +
    '.bak'' WITH  FILE = 1,  MOVE N''' + @fileName + ''' TO N''' + @restorePath 
    + @name
    + '.mdf'',  MOVE N''' + @fileName + '_log'' TO N''' + @restorePath + @name +
    '.LDF'', NOUNLOAD,  REPLACE,STATS = 10' 
    FETCH NEXT FROM cursors INTO @name,@fileName
END
 CLOSE cursors                
 DEALLOCATE cursors 
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
16天前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
168 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
15天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
15天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
142 5
|
21天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
3月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
565 0
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
284 0
|
5月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
306 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
6月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
137 15
|
SQL 数据库 数据安全/隐私保护