事务日志

日志文件是用来记录数据库每一次修改活动的文件。SQL Server中的每一个数据库都有自己的日志文件,即系统表syslogs,也称为事务日志。事务日志是撤消事务和出现故障时恢复事务的依据。

在某些情况下,事务日志比数据本身更为重要。

什么是事务?

数据库的修改是以事务为单位进行的。一个事务就是一个操作序列,这些操作要么全做,要么全不做,它是一个不可分割的工作单位。任何一个事务具备如下特征。

(1)执行的原子性(Atomic);

(2)保持数据的一致性(Consistency);

(3)彼此的隔离性(Isolation);

(4)作用的持久性(Durability)。

上述事务的四个特征被称为事务的ACID准则。

事务在运行过程中,SQL Server把事务开始、事务结束以及对数据库的插入、删除和更新等每一个操作作为一个日志记录存放到事务日志中。事务中的更新操作首先在数据库缓冲区(内存)中进行,缓冲区分别有用来记录操作活动的数据页(data page)和日志页(log page)。当运行到commit tran时,日志页首先从缓冲区写到磁盘上,而后数据页从缓冲区写到磁盘上,即遵循“先与日志(write_ahead log)”的原则,这样保证出现故障的情况下,通过日志能够得到最大限度的恢复。恢复必须撤消发生故障时还未提交的事务,已完成的事务若仍有未从缓冲区写到数据库设备中,还要重新运行该事务。

附:创建与装载数据库实例

use master

decl are @vedvno int

select @vdevno=max(convert(tinyint,substring(convert(binary(4),d.low),v.low,1))) 1

from master.dbo.sysdevices d,master.dbo.spt_values v

where v.type=’E’and v.number=3

declare @v_str char(2)

select @v_str=convert(char(2),@vdevno)

print @v_str

disk init

name=”YDDATA”,

physname=”D: yb_Data\YDDATA.dat”,

vdevno=@vdevno 1,

size=153600

disk init

name=”YDINDEX”,

physname=”D: yb_Data\YDINDEX.dat”,

vdevno=@vdevno 2,

size=102400

disk init

name=”YDLOG”,

physname=”D: yb_Data\YDLOG.dat”,

vdevno=@vdevno 3,

size=76800

create database YDMISDB

on YDDATA=300,YDINDEX=200

log on YDLOG=150

use YDMISDB

execute sp_addsegment indexdev,YTMISDB,YTINDEX

execute sp_dropsegment “default”,YTMISDB,YTINDEX

execute sp_dropsegment system,YTMISDB,YTINDEX

use master

load database YDMISDB from ‘d:\yd_dump\ydmis_backup.dmp’

online database YDMISDB

时间: 2024-09-26 22:44:08

事务日志的相关文章

收缩事务日志

SQLSERVER收缩事务日志 一.由于系统中录入及删除数据频繁,故事务日志很大. SQLSERVER中讲: BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志. 但我在数据库中进行上述操作后,事务日志还是没有改变. 二.只有进行"数据库收缩"操作. 在此复选框中打勾  选中上图所示选项,即可点"确定",执行收缩事务日志的操作,硬盘经过一段时间的工作后,SQLSERVER终于提示收缩成功.事务日志文件被恢复到原始尺寸.

利用事务日志来恢复Update、Delete误操作引起的数据丢失

恢复|数据 可能有不少朋友遇到过这样的问题:update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者只能恢复到最近一次的备份的数据了. 以下简单说明恢复数据方法:1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行

利用事务日志来恢复Update、Delete误操作引起的数据丢

恢复|数据 可能有不少朋友遇到过这样的问题:update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者只能恢复到最近一次的备份的数据了. 以下简单说明恢复数据方法:1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行

如何防止SQL Server数据库的事务日志异常增长

server|数据|数据库 当事务日志扩展到无法接受的限度时您必须执行的步骤.事务日志的扩展会导致 Microsoft SQL Server 数据库无法使用. 在 SQL Server 2000 中,每个数据库都至少包含一个数据文件和一个事务日志文件.SQL Server 2000 在该数据文件中以物理方式存储数据.事务日志文件存储您对 SQL Server 数据库执行的所有修改的详细信息,以及执行每个修改的事务的详细信息.由于事务完整性被视为 SQL Server 的一个基本而固有的特点,因此

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

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

SQL Server误区:有关大容量事务日志恢复模式的误区

误区 #28:有关大容量事务日志恢复模式的几个误区 28 a)常见的DML操作可以被"最小记录日志" 不是.在大容量事务日志恢复模式下只有一小部分批量操作可以被"最小记录日志",这类操作的列表可以在Operations That Can Be Minimally Logged找到.这是适合SQL Server 2008的列表,对于不同的SQL Server版本,请确保查看正确的列表. 28 b)使用大容量事务日志恢复模式不会影响灾难恢复 首先,在上次事务日志备份之后

DB2崩溃后用事务日志恢复的原理和技巧

在系统崩溃之后,使用DB2的事务日志恢复数据库. 您曾多少次碰到过错误消息"SQL0946C The transaction log for the database is full?" 在尽力解决该问题时,您是否停下来思考如下两个问题:1. 为何存在事务日志:2. 事务日志记录服务的目的是什么呢? 若没有事务,多个用户和应用程序同时与一个数据库进行交互时就必然会破坏数据.而如果没有事务日志记录,DB2 UDB中的一些据库恢复方法就不会存在. 如果您还没有完全理解这些概念,也不必担忧.

Exchange 2007队列数据库、队列事务日志文件超过临界值(阈值)导致无法接受

Exchange 2007队列数据库.队列事务日志文件超过临界值(阈值)导致无法接受邮件解决方案 前天,客户Exchange 2007邮件系统突然出问题了.具体表现如下: 只能发邮件,不能收邮件.OUTLOOK中点击"发送和接收"测试,只有正在发送,没有正在接收状态. 查看日志发现如下提示: The Microsoft Exchange Transport service is rejecting message submissions because the available di

SQL Server事务日志的几个常用操作

我们知道,SQL Server事务日志主要是用来记录所有事务对数据库所做的修改,如果系统出现故障,它将成为最新数据的唯一来源.日志的操作常有以下几个应用: 一.事务日志文件LDF的丢失 当我们不小删除或者LDF文件丢失的时候,数据库只剩下MDF文件,此时直接通过附加MDF是无法恢复数据库的,那我们怎么样才能恢复数据库呢?我们可以把SQL Server的日志文件分为两种形式:一类是无活动事务的日志,另一类是有活动事务的日志,我们分别根据两种情况来进行数据库恢复. 1.无活动事务的日志恢复 当文件并