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’)

时间: 2016-10-30

SQL Server事务日志的几个常用操作的相关文章

人人都是 DBA(VI)SQL Server 事务日志

原文:人人都是 DBA(VI)SQL Server 事务日志 SQL Server 的数据库引擎通过事务服务(Transaction Services)提供事务的 ACID 属性支持.ACID 属性包括: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 事务日志(Transaction Log) 事务日志(Transaction Log)存储的是对数据库所做的更改信息,让 SQL Server 有机会恢复数据库.而恢复

SQL Server事务日志被填满的原因是什么

SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT. 事务日志填满会导致1105错误: Can't allocate space for object syslogs in database dbname because the logsegment is full. If you ran out of space in syslogs, dump the transaction log. Otherwis

SQL SERVER 事务日志

  谈到事务日志就不得不谈下检查点 Checkpoint ,简称 CKP. 事务日志和检查点都是为了数据库的快速恢复而存在的.我们需要知道检查点是干什么的,它和事务日志有什么关系. CKP是干什么的? 总所周知,数据的更改并没有直接写入mdf/ndf 数据文件中,而是写入了buffer pool中; 当CKP被触发后,检查点将"全部"脏数据页从当前数据库的buffer pool刷新到数据文件上.所谓的脏数据,是那些被更改的 data page ,在内存中却没有写入磁盘.全部脏数据包括已

SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

原文:SQL Server自动化运维系列--监控磁盘剩余空间及SQL Server错误日志(Power Shell) 需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测.作为一个高效的DBA不可能每天都要上生产机上查看磁盘剩余或者直到磁盘无剩余空间报错后才采取扩容措施. 当然,作为微软的服务器有着自己的监控软件:SCCM(System Center

SQL Server 事务和锁详解

最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:  代码如下 复制代码 SELECT @findCount=COUNT(id) FROM MyTable WHERE [fk_related_id]=@Argument IF (@findCount > 0) BEGIN ROLLBACK TRANSACTION RETURN ERROR_CODE END INSERT INTO MyTable ([fk_related_id],-

winform 项目删除sql server事务问题

问题描述 winform 项目删除sql server事务问题 当我点击删除时报下面错误,是什么意思? 怎么解决?项目是winform 数据库是sql server 如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务.命令的 Transaction 属性尚未初始化. 事务部分代码 bool isSucess = false; using (DbBase DbContext = new DbBase(connectionName)) { using (IDbTra

如何使Microsoft SQL Server的日志文件不会增大

server 说   明:如何使Microsoft SQL Server的日志文件不会增大? 如何缩小MSSQL的日志文件已经是一个经常性的问题了,不过这个问题在精华区已经有不少答案了,我这里也不再赘述.现在我们讨论一下治本的问题,即如何使日志文件不再增大? 先介绍一个简单的方法.就是把数据库的故障还原模型设置为"简单"(SQL2K).这样它就会在Checkpoint的时候截断日志.具体操作方法是:1.在Enterprise Manager中右键点数据库,"属性|选项|故障还

SQL大型事务日志备份与修复问题

问:我在备份时注意到一些异常现象,希望您能解释一下.我们需要经常备份 62GB 的生产数据库,以刷新应用程序开发人员所使用的数据.我们总是先删除旧副本然后再还原新副本.还原的副本与生产数据库大小相同,而且数据看起来也一样,但是与备份过程相比,还原过程所需的时间要长很多.这是怎么回事?为什么还原比备份需要更长的时间? 答:其实这不属于异常现象.根据您所处的环境,这种现象通常是预料之中的.备份和还原所需的时间之所以不同,是由于每个流程必须执行的步骤不同. 备份数据库包含两个步骤.主要就是对数据库执行

SQL Server 压缩日志与减少SQL Server 文件大小的方法

一般不建议做第4,6两步,第4步不安全,有可能损坏数据库或丢失数据.第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 3.收缩数据库文件 (如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M