开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 原文: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 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL Server中收缩、清空和删除数据库文件及日志文件
一、简单方法 –SQL Server收缩方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。
4908 0
SQL SERVER数据库删除LOG文件和清空日志的方案
原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作。
5853 0
SQL Server 大数据搬迁之文件组备份还原实战
原文:SQL Server 大数据搬迁之文件组备份还原实战 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) 注意事项(Attention) 疑问(Questions) 参考文献(References) 二.
913 0
svn 客户端批量备份数据(图+文)
缘由 商业用途的规则,数据与谨慎便成了不可替代的王道,我今天也说svn,在客户端批量备份数据。 前提 考虑跨平台与易用性,选择批处理(.bat),既然是批处理,少不了的便是命令和执行命令的平台,这个执行平台的命令为svn.exe(默认只有svn的服务器端用),命令下面会有介绍。
778 0
+关注
杰克.陈
一个安静的程序猿~
10424
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载