E8-完善数据库备份的存储过程

起因

我们公司E8的数据用的是SQL Server 2012在我把从生产环境下复制来的数据库备份文件恢复到本机测试环境里时,被提示硬盘空间不足。备份文件3G多,硬盘剩余空间10G左右。于是我去生产环境看了一下数据库的物理文件,就是扩展名是mdf文件(以下简称数据库文件)和ldf文件(以下简称是日志文件)的那两个文件。不看不知道,一看下一跳,数据库文件文件3G左右,日志文件18G左右。

备份是用的存储过程,SQL Server代理每天定时执行这个存储过程,实现自动备份,存储过程的写法网上也有现成的案例,后面我也会把它放到代码里。至于SQL Server代理的设置方法不是本文的重点,需要具体操作方法的小伙伴请自行百度。

经过

先不管数据库文件,先来说说日志文件,网上都说它是个日志文件的大小,是随着数据库的执行会不断增大的。它主要用来支持事务回滚,差异备份的恢复等操作提供支持的。清理日志文件的方法有很多,目前我能熟练操作的有两种方法,第一种方法是分离数据库,删除日志文件,再附加数据库,用这种方法让DBMS去重建日志文件。第二种方法是用”收缩“功能去收缩日志文件,但要在收缩之前,把数据库的恢复模式,详细步骤不是本文的重点,需要具体操作方法的小伙伴可以自行百度。

思路是这样式儿的,我想每天在备份完数据库之后,清理一下日志文件。

由于备份是在存储过程中实现的,于是我就想,能不能把清理日志文件的操作也一并放到存储过程里。结合自己掌握的知识,上面说的第一种方法我实现不出来。第二种方法,在修改数据库的恢复模式和收缩数据库的操作步骤中,都是可以获取到相应的SQL语句的,倒是可以尝试一下。

在经过测试了完整备份了一个收缩过的日志文件的数据库,再进行还原,确认了日志文件在做完整备份的时候几乎没有影响之后,便尝试着修改存储过程实现以上目标。

结果

USE [ecology]
GO

/****** Object:  StoredProcedure [dbo].[BackupDB]    Script Date: 2024/3/6 9:54:05 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[BackupDB] AS 
begin 
declare 
@filename nvarchar(100)--文件名 

-- 备份数据库部份 begin
set @filename='e:\ecologyBackup\ecology'+ CONVERT(varchar(100), GETDATE(), 23) --Sunday = 1、Saturday = 7

print @filename BACKUP DATABASE ecology TO DISK = @filename WITH INIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT 
-- 备份数据库部份 end

-- 尝试在存储过程中收缩数据库开始 20240306 begin
ALTER DATABASE [ecology] SET RECOVERY SIMPLE WITH NO_WAIT --把恢复模式调成简单

DBCC SHRINKFILE (N'ecology_log' , 0, TRUNCATEONLY) -- 收缩日志文件

DBCC SHRINKFILE (N'ecology' , 0, TRUNCATEONLY) --收缩数据库文件

ALTER DATABASE [ecology] SET RECOVERY FULL WITH NO_WAIT --把恢复模式调成完整
-- 尝试在存储过程中收缩数据库开始 20240306 end

end

GO

其中,以前我没注意到的地方是,在存储过程体里,不能有USE语句和GO关键字,在SSMS里操作调整恢复模式和收缩数据库文件和收缩日志文件这些步骤中,生成的SQL语句中,是包含USE语句和GO关键字的,去掉就好了。虽然在调整恢复模式的步骤中,写的是USE [master],没关系,同样删除USE语句就好了。

这种方法适合SQL Server的数据库。

喜欢的小伙伴们请关注、点赞、评论。大家的鼓励是我持续创作的动力。感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Shell脚本】读取大量DDR寄存器的值

功能:使用shell脚本读取大量DDR寄存器的值: # Function: Read the registers: # registers: # 0x2000000 ~ 0x2000FFC # 0x2001000 ~ 0x2001034 # 0x440000 ~ 0x4403AC # 0x400000 ~ 0x42B030 # 0x2010000, 0x2010400Step1. 创建一个包含了所…

tomcat安装及jdk安装

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配…

C++ Qt开发:运用QThread多线程组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QThread组件实现多线程功能。 多线程…

PHP实现数据爬虫

一:什么是爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,经常被称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字…

mac报错:zsh:command not found: brew

1、基本概述? 在使用brew安装程序的时候MAC提示: zsh:command not found: brew 本质就是brew没有安装,这个命令与linux系统中的yum命令类似。 使用的环境说明: 虚拟机版本:VMware Workstation 17 Pro mac os Ventu…

TinyEMU编译与使用(一)

TinyEMU编译与使用(一) 1 介绍2 准备工作3 编译TinyEMU3.1 安装依赖库3.2 编译 4 运行TinyEMU4.1 在线运行4.2 离线运行 5 共享目录5.1 修改root_9p-riscv64.cfg5.2 启动TinyEMU5.3 执行挂载命令 6 TinyEMU命令帮助 1 介绍 原名为riscvemu,于…

Maven【5】在IDEA环境中配置和使用Maven

文章目录 【1】创建父工程1.创建 Project2.开启自动导入 【2】配置 Maven 信息【3】创建 Java 模块工程1.创建2.maven命令操作 【4】创建 Web 模块工程1.创建模块2.Web设定 【1】创建父工程 1.创建 Project 按照idea工程的布局,project相当于父工程,里…

Linux 如何排查网络问题

目录 确认基本网络连接 查看网络接口状态 检查默认网关和路由表 防火墙设置 查看网络连接状态 检查主机名和域名解析 查看系统日志 网络流量实时监控 确认基本网络连接 使用ping命令检查是否能够成功连接到互联网或目标主机。例如: ping www.google.com 查…

javascript中的强制类型转换和自动类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属专栏:前端泛海 景天的主页:景天科技苑 文章目录 1.转换函数2.强制类型转换(1)Number类型强转&…

day11_SpringCloud(Nacos注册中心,LoadBalancer,OpenFeign)

文章目录 Spring Cloud Alibaba1 系统架构演进1.1 单体架构1.2 微服务架构1.3 分布式和集群 2 Spring Cloud Alibaba概述2.1 Spring Cloud简介2.2 Spring Cloud Alibaba简介 3 微服务环境准备3.1 工程结构说明3.2 父工程搭建3.3 用户微服务搭建3.3.1 基础环境搭建3.3.2 基础代码…

安装或卸载VMware时,显示无法打开注册表项,以及开启虚拟机电脑蓝屏重启的解决方法

我之前安装过一次VMware,之后就随手把他删除了,但没有删除干净,最近我再次安装VMware的时候,出现了一系列问题,我决定分享一下我的解决方案。 一:安装或卸载VMware时,显示无法打开注册表项 解决…

python根据文件路径获取文件名及后缀名

在Python中,你可以使用os.path模块的函数来根据文件路径获取文件名及其后缀名。以下是一个示例: import osdef get_filename_and_extension(file_path):# 使用 os.path.basename 获取文件名filename os.path.basename(file_path)# 使用 os.path.splite…

围坝胶的粘度一般是多少

围坝胶的一般粘度是多少?围坝胶,作为一种广泛应用于汽车、电子等领域的粘合剂,其粘度是评估其性能的重要指标之一。了解围坝胶的粘度有助于我们更好地选择和使用这种粘合剂。 首先,我们要明白什么是粘度。粘度是流体流动时抵抗剪切力的能力&…

09. C语言内嵌汇编代码

C语言函数内可以自定义一段汇编代码,在GCC编译器中使用 asm 或 __asm__ 关键词定义一段汇编代码,并可选添加volatile关键字,表示不要让编译器优化这段汇编代码。 内嵌汇编代码格式如下: __asm__ ("汇编代码":输出描述…

Git 入门

Git 入门 版本控制 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。 为什么要版本控制 有了它你就可以将某个文件回溯到之前的状态&#xff…

WordPress建站入门教程:忘记后台管理员密码了怎么办?

前面跟大家分享的『WordPress建站入门教程:如何在本地电脑搭建WordPress网站?』一文介绍了搭建WordPress网站,但是有些站长跟boke112百科一样,没有记录后台管理密码,这种情况应该怎么办呢?有以下2种方法解决…

发明专利的周期

发明专利的周期通常较长,主要包括以下几个阶段: 1.申请阶段:•从准备申请材料开始,包括撰写权利要求书、说明书、摘要等,完成全套专利申请文件的准备时间因具体情况而异,通常需要几周至几个月不等。 2. 提…

DDOS安全防护如何保障电商行业稳定

DDOS安全防护如何保障电商行业稳定?随着电子商务的蓬勃发展,电商行业已经成为全球经济增长的重要引擎。然而,随着业务的快速扩张和在线交易的日益频繁,电商网站也面临着越来越多的网络安全威胁,其中最为常见且危害巨大…

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间 离子注入是半导体器件和集成电路生产的关键工艺之一,其提供的高精度和高均匀性可以大幅度提高集成电路的成品率。离子注入设备是芯片制造的核心工艺装备。 从全球市场来看,随着科学技术不断进…

javascript基础入门

1.第一个javascript程序 javascript程序不能够独立的运行,必须依赖于HTML文件,type属性值用来说明脚本的类型,这里 是指使用javascript编写的文本文件; 2.alert警告框 alert()函数显示一条指定的信息&am…