当前位置: 首页 > news >正文

Microsoft SQL Server事务日志的应用

我们知道,SQL Server事务日志主要是用来记录所有事务对数据库所做的修改,如果系统出现故障,它将成为最新数据的唯一来源。日志的操作常有以下几个应用:

一、事务日志文件LDF的丢失

当我们不小删除或者LDF文件丢失的时候,数据库只剩下MDF文件,此时直接通过附 加MDF是无法恢复数据库的,那我们怎么样才能恢复数据库呢?我们可以把SQL Server的日志文件分为两种形式:一类是无活动事务的日志,另一类是有活动事务的日志,我们分别根据两种情况来进行数据库恢复。

1、无活动事务的日志恢复

当文件并没有发生活动性的日志,我们就可以很容易的利用MDF文件就可以直接恢复数据库了,具体操作方法如下:

(1)数据库要是没有日志,就会处于置疑的状态,我们先可以通过企业管理器中在对应数据库中点击右键,然后在“所有任务”下选择“分离数据库”把数据库进行分离;

(2)利用MDF文件附加数据库生成新的日志文件,可用企业管理器中数据库点击右键选择“所有任务”下的“附加数据库”把数据库附加上。

这样就可以直接恢复好数据库了,而如果数据库的日志文件中含有活动事务,利用此方法就不能恢复数据库,所以得使用下面的方法。

2、有活动事务的日志恢复

当日志发生了事务的记录,丢失的时候,我们采用如下的方法来实现:

(1)新建一个同名的数据库,如原数据库名为MYDB,然后停止SQL Server服务器,再把数据库主数据MDF文件移走,然后重新启动SQL Server服务器,新建一个同名的数据库MYDB,然后再停止SQL Server服务器,把移走的MDF文件再覆盖回来,然后再重新启动SQL Server服务器,在默认的情况下,系统表是不允许被修改的,我们需要运行以下语句才可以,在查询分析器中,选择Master数据库,然后执行:

Sp_configure 'allow updates',1

Reconfigure With Override

接着运行以下语句,把Sysdatabases表中MYDB数据库的status属性设为‘37268’,把MYDB数据库设置为紧急模式。

update sysdatabases set status=32768 where name=’MYDB’

然后再把数据库MYDB设置为单用户模式,然后重启SQL Server服务器,并把数据库MYDB设为单用户模式

Sp_dboption 'MYDB','single user', 'true'

再运行以下语句,检查数据库MYDB

DBCC CHECKDB(‘MYDB’)

(2)还原数据库的状态

运行以下语句,就可以把数据库的状态还原:

Update Sysdatabases Set status=28 Where name=’MYDB’

Sp_Configure ’allow updates’,0

Reconfigure With Override

此时的数据库仍不能工作,还要进行以下的操作,才能恢复。

(3)利用DTS的导入导出向导,把数据库MYDB导入到一个新建数据库 MYDBNEW中,然后新建一个数据库MYDBNEW,右击MYDBNEW,选择“所有任务”下的“导出数据”功能,打开导入向导,把表结构、数据视图和 存储过程导入到MYDBNEW中,然后再用此功能把MYDBNEW库替换成原来的MYDB库即可。

可以知道,恢复一个有活动事务的日志是麻烦多了,所以在数据库维护的时候,切不要小看事务日志。

二、事务在不断增大的时候如何缩小日志

当数据如在频繁修改或者删除的同时,事务的日志就会不断的增加,甚至超过了碰盘的大小,这时候就不能因此而直接删除了事务日志的LDF文件,否则可能会带来很大的麻烦。为了避免这种情况,我们需要有如下的操作:

(1)尽量避免tempdb 日志与用户数据库日志放在同一磁盘上,tempdb 数据库和事务日志具有足够的空间来处理索引操作。不能在索引操作完成之前截断 tempdb 事务日志。

(2)通过执行下列命令来缩小事务日志

DBCC SHRINKDATABASE

DBCC SHRINKFILE

操作会立即尝试将物理日志文件收缩为所要求的大小。

如果虚拟日志文件中的逻辑日志未超出 target_size 标记,则释放 target_size 标记之后的虚拟日志文件,并成功完成 DBCC 语句,不显示任何信息。

如果虚拟日志中的逻辑日志超出了 target_size 标记,SQL server Database Engine 将释放尽可能多的空间并显示一个信息性消息。该消息告诉您必须执行什么操作来从文件尾部的虚拟日志中删除逻辑日志。执行完该操作后,可以重新发出 DBCC 语句以释放剩余的空间。

DBCC SHRINKFILE 语句还显示一个信息性消息,指出它不能释放所要求的全部空间,并告诉您可以执行 BACKUP LOG 语句来释放剩余的空间。

三、事务日志的还原

事务日志在还原的时候可以选择三种恢复模式:简单模式、完整模式和大容量日志模式。

简单恢复模式

此模式简略地记录大多数事务,所记录的信息只是为了确保在系统崩溃或还原数据备份之后数据库的一致性。

由于旧的事务已提交,已不再需要其日志,因而日志将被截断。截断日志将删除备份和还 原事务日志。但是,这种简化是有代价的,在灾难事件中有丢失数据的可能。没有日志备份,数据库只可恢复到最近的数据备份时间。如果您使用的是 sql server Enterprise Edition,需要考虑此问题。此外,该模式不支持还原单个数据页。

完整恢复模式

此模式完整地记录了所有的事务,并保留所有的事务日志记录,直到将它们备份。在 sql server Enterprise Edition 中,完整恢复模式能使数据库恢复到故障时间点。

大容量日志恢复模式

此模式简略地记录大多数大容量操作(例如,索引创建),完整地记录其他事务。

大容量日志恢复提高大容量操作的性能,常用作完整恢复模式的补充。大容量日志恢复模 式支持所有的恢复形式,但是有一些限制,备份包含大容量日志记录操作的日志时,需要访问数据库内的所有数据文件。如果数据文件不可访问,则无法备份最后的 事务日志,而且该日志中所有已提交的操作都将丢失。 来源:赛迪网作者:Alizze

相关文章:

  • 微信自动回复天气预报
  • linux下巧用tail命令 创建自解压tar文件
  • itchat 同时实现自动回复和定时任务
  • 恢复SQL2005误删除的数据
  • 国家地区标准代码(国际域名缩写)
  • 提高你的调试代码的效率
  • python 代码计时
  • 如何处理创建DB2工具目录数据库的时候遇到的SQL1005N错误?
  • pandas 查找数据
  • SUN发布JavaFX...
  • ConceptNet
  • 如何制作倒影
  • pyecharts 标记指定经纬度
  • Photoshop制作倒影字
  • folium 可视化地理数据
  • hexo+github搭建个人博客
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Date型的使用
  • express + mock 让前后台并行开发
  • Laravel 实践之路: 数据库迁移与数据填充
  • python docx文档转html页面
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Shell编程
  • vue-loader 源码解析系列之 selector
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于Android乐音识别(2)
  • 小程序 setData 学问多
  • 小程序测试方案初探
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # Apache SeaTunnel 究竟是什么?
  • ###C语言程序设计-----C语言学习(6)#
  • #AngularJS#$sce.trustAsResourceUrl
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (六)vue-router+UI组件库
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转载)利用webkit抓取动态网页和链接
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net Application的目录
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net分布式压力测试工具(Beetle.DT)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @RequestParam详解
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [1181]linux两台服务器之间传输文件和文件夹
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [acwing周赛复盘] 第 94 场周赛20230311