首页 > 数据库 >sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库

sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库

时间:2023-11-02 18:35:49浏览次数:42  
标签:name -- 数据库 用户 logicName 游标 日志 dbName

在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间。当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行这个过程。
本人写了一段这样的脚本。并且经过验证执行无误。现在分享出来,您也可以执行以下sql脚本来一次将所有用户数据库的日志进行截断并收缩。

--截断和收缩所有用户数据库日志。用游标循环所有正常状态的用户数据库,并且截断和收缩数据库日志文件
declare @tempDbName varchar(64)
declare cursorP cursor for select [name] from sysdatabases where status=65536 --and [name] in('userDb02','userDb01')
open cursorP
while @@FETCH_STATUS=0
begin
print @tempDbName
    declare @dbName varchar(64)
	declare @dbLogName varchar(64)
	set @dbName = @tempDbName
	set @dbLogName = @dbName+'_log'

	--如果数据库文件逻辑名和物理名不一致,则改
	declare @logicName varchar(64)
	SELECT top 1 @logicName=name from sys.master_files WHERE database_id=db_id(@dbName);
	--print @logicName
	if(@logicName!=@dbName)
	begin
	--print('alter database '+@dbName+' modify file(name='''+@logicName+''', newname='''+@dbName+''');')
	--print('alter database '+@dbName+' modify file(name='''+@logicName+'_log'', newname='''+@dbName+'_log'');')
	exec('alter database '+@dbName+' modify file(name='''+@logicName+''', newname='''+@dbName+''');')
	exec('alter database '+@dbName+' modify file(name='''+@logicName+'_log'', newname='''+@dbName+'_log'');')
	end

	declare @breakLogSqlstr varchar(max)
	set @breakLogSqlstr ='
	USE '+@dbName+'
	ALTER DATABASE '+@dbName+' SET RECOVERY SIMPLE --将“恢复模式”设置为“简单
	DBCC SHRINKFILE (N'''+@dbLogName+''' , 1, TRUNCATEONLY)--收缩日志文件大小到1M
	ALTER DATABASE '+@dbName+' SET RECOVERY FULL WITH NO_WAIT ----将“恢复模式”设置为“完整”
	ALTER DATABASE '+@dbName+' SET RECOVERY FULL
	'
	--print @breakLogSqlstr
	exec (@breakLogSqlstr);
fetch next from cursorP into @tempDbName
end
close cursorP
DeAllocate cursorP

标签:name,--,数据库,用户,logicName,游标,日志,dbName
From: https://www.cnblogs.com/hrx521/p/17806001.html

相关文章

  • 智安网络|数据库设计与规范:构建高效可靠的数据存储系统
    在信息化时代,数据库设计与规范是构建高效可靠的数据存储系统的关键。一个合理的数据库设计可以提高数据的存储效率、保证数据的一致性和完整性,提供高效的数据查询和处理能力。一、数据库设计的基本原则数据库范式:数据库设计应符合范式的要求,避免数据冗余和更新异常。常见的范式有第......
  • Ubuntu 一直卡在开机界面或者用户登录界面死循环问题的解决
    此方法并不全部通用,根据自己实际情况建议提前快照再试试此方法原因:NVIDIA驱动所致,之前安装方式nvidia驱动出问题。解决办法:卸载nvidia驱动,重新安装。(1)进入文本模式:CTRL+ALT+F1或者进入高级选项(按住esc或shift)(2)Uninstallanypreviousdrivers:sudoapt-getremovenvidia......
  • HHDBCS扩展数据库类型
    为应对市面上的数据库种类繁多的问题,HHDBCS设置了扩展数据库功能。在登陆界面点击“工具”,选择“扩展数据库类型”;注:HHDBCS支持已kingbase,本文仅用来举例。填入名称、所需数据库的信息,上传驱动;然后点击保存。即可在登陆界面的数据库类型中,找到该数据库。点击登陆可使用基......
  • uniapp-ucloud 数据库里面添加记录
    要保持本地跟云端的表一致。同步。还有设置权限constdb=uniCloud.database()constjiemengCollection=db.collection('jiemeng') for(constrowofdata){ console.log(row) try{ jiemengCollection.add(row) }catch(e){ ......
  • 无涯教程-H2数据库 - 更新数据(Update)
    UPDATE查询用于更新或修改表中的现有记录,无涯教程可以将WHERE子句与UPDATE查询一起使用来更新所选行,否则所有行都会受到影响。Update-语法以下是UPDATE查询的基本语法。UPDATEtableName[[AS]newTableAlias]SET{{columnName={DEFAULT|expression}}[,...]}......
  • 数据分析和用户个性化体验:开发同城外卖APP的技术解决方案
    在数字化时代,外卖服务已经成为人们日常生活中不可或缺的一部分。无论是忙碌的白领、学生,还是家庭主妇,都倚赖同城外卖APP来方便地满足他们的饥饿需求。然而,随着竞争的激烈,外卖APP必须不断改进,以满足用户的期望,其中数据分析和用户个性化体验变得至关重要。一、数据分析的重要性1.1了......
  • 喜讯!INFINI Easysearch 在墨天轮数据库排名中挺进前30!
    近日,2023年10月的墨天轮中国数据库流行度排行火热出炉,本月共有283个数据库参与排名,中国数据库行业竞争日益激烈。其中,极限科技旗下软件产品INFINIEasysearch稳步推进,在国内整个数据库排行中进入了前30的行列!同时在搜索型数据库分类排名中保持领先,稳住了第一名的......
  • 无涯教程-H2数据库 - 插入数据(Insert)
    SQLINSERT语句用于将新的数据行添加到数据库中。Insert-语法以下是INSERTINTO语句的基本语法。INSERTINTOtableName{[(columnName[,...])]{VALUES{({DEFAULT|expression}[,...])}[,...]|[DIRECT][SORTED]select}}|{SET{columnNa......
  • 理论+应用,带你了解数据库资源池
    本文分享自华为云社区《GaussDB(DWS)监控工具指南(三)资源池级监控【绽放吧!GaussDB(DWS)云原生数仓】》,作者:幕后小黑爪。一、资源池在数据库最初阶段,是没有资源概念的,给数据库输入SQL语句,数据库输出结果,在简单业务场景下,用户独占数据库是不存在资源争抢问题的。随着数据库业务增长,用......
  • 分享一个HTML页面适配方式:用户手动缩放
    <metaname="viewport"content="width=device-width,initial-scale=1.0">这个配置告诉浏览器自动将页面的宽度设置为设备的宽度(通常是屏幕宽度),并将初始缩放比例设置为1.0。这通常用于确保网页在移动设备上以完整的屏幕宽度显示,而不需要用户手动缩放或调整。<metaname="viewpo......