易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL Server事务日志介绍

SQL Server中的数据库都是由一或多个数据文件以及一或多个事务日志文件组成的。
顾名思意,数据文件主要存储数据库的数据,包括数据库内容结构,数据页,索引页等等。那么事务日志到底是干什么的呢?它主要是用来保存数据库修改记录的,如下图:
SQL Server的工作原理为什么这样呢?为什么不把数据立刻写入数据文件呢?原因很简单:为了得到更高的效率和性能。数据文件为了适应新的数据可能会扩展,可能会重新分配页,分配新空间等等。而日志都是连续被记录的,所以记录事务日志要快得多。这也就是为什么我们通过推荐把物理磁盘单独划分一区用来存储事务日志的原因了,这样可以使磁盘在读写上最大程序的保持自然连续。数据文件的读写有很大的随机性。
那么事务日志到底都存些什么呢?看下面这个非常简单的例子:
 
在事务日志中,数据变化被记录在一个连续的日志记录中,且每一个记录都有一个编号,叫做日志序列编号(Log Sequence Number, LSN)。
在事务日志中,每一个日志记录都被存储在一个虚拟日志文件中。事务日志可以有任意多个虚拟日志文件,数量的多少取决于数据库引擎,而且每个虚拟日志文件的大小也不是固定的。

如上图所示,活动区间(active portion)的日志就是包含我们事务的区域。这区间就是完整恢复数据库所需要的。当更多的事务被创建时,活动区间的日志也会随着增长。

那么当CheckPoint被执行时,会发生什么变化呢?答案是:所有有变化的数据写到数据文件中,然后创建一个检查点记录(CheckPoint record)。

现在。由事务1,2,3所导致的变化将会被写到数据文件中。因为事务3没有被提交,所以活动区间日志的范围变成了从LSN50到LSN52之间。如果使用简单恢复模型的话,那么LSN45到LSN49之间区域可以被重用,因为那些记录已经不再需要了。

当SQL Server把虚拟日志文件1和2作为可重用区域时,事务日志也相应被截断(Truncate)。需要注意的是,物理日志大小也会随着变动。如果数据库运行在完整或是批量日志恢复模型下,那么从LSN45到49之间的区域将被删除(delete),而且直到事务日志被备份后,这段区域的空间才会被重用。
那么当更新的事务被创建时,又会发生什么呢?在简单模式下,日志的起始空间将会被重用。

在完整或是批量日志恢复模型下,事务日志的空间则会被扩展。

假如事务日志是一个固定大小的日志,那么在SQL Server2000系统中,你会收到如下错误信息:
Server: Msg 9002, Level 17, State 6


相关文档:

SQL Server 临时表的删除

临时表与一般的表不同,它是保存到tempDb表中。临时表的表名与你所建的表名也不一样,因为他要为不同人的相同操作创建不同的临时表。
1、错误的删除操作:
--错误的临时表删除操作,因为所在数据库不同
IF  EXISTS (SELECT * from sysobjects WHERE object_id = OBJE ......

SQL数据库连接语句

一般的远程访问的写成这样:
Data Source=IP;Initial Catalog=数据库名;UserID=用户名;Password=密码
本地访问的写成这样:
Data Source=(local);Initial Catalog=数据库名;UserID=用户名;Password=密码
如果是本地的,通过windows组件验证的(也就是没有用户名,密码的)写成这样:
Data Source=(local);Initial Cata ......

sql server 更改表的所属用户的两个方法

sql server 更改表的所属用户的两个方法
--更改某个表
exec sp_changeobjectowner 'tablename','dbo'
--存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
D ......

t sql 读出每组的前n个

http://topic.csdn.net/u/20100113/17/b52a1ef4-54a8-4333-8119-a161869c1eef.html
---------------------------------
--  Author: liangCK 小梁
--  Title : 查每个分组前N条记录
--  Date  : 2008-11-13 17:19:23
---------------------------------
--> 生成测试数据: #T
IF OBJECT_ID(' ......

sql server存儲過程語法

-- 变量的声明,sql里面声明变量时必须在变量前加@符号
    DECLARE @I INT
-- 变量的赋值,变量赋值时变量前必须加set
    SET @I = 30
-- 声明多个变量
    DECLARE @s varchar(10),@a INT
-- Sql 里if语句
    IF 条件 BEGIN
   &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号