Server交易日志的经验汇总-维护SQL (server error)

教程大全 2025-07-19 23:38:31 浏览

我们今天是要和大家一起讨论的是正确维护SQL Server交易日志的经验汇总,我们大家都知道SQL Server交易日志(Transaction logs)是数据库结构中地位不可或缺的,但又经常被忽略的部分。

由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态。

从交易动作开始,SQL Server交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。

出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入交易日志,但不会立即写入数据文件。交易日志会通过一个标记点来确定某个交易是否已将缓存中的数据写入数据文件。当SQL Server重启后,它会查看日志中***的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正的将缓存中的数据写入数据文件。这可以防止那些中断的交易修改数据文件。

维护交易日志

因为很多人经常遗忘交易日志,因此它也会给系统带来一些问题。随着系统的不断运行,日志记录的内容会越来越多,日志文件的体积也会越来越大,最终导致可用磁盘空间不足。除非日常工作中经常对日志进行清理,否则日志文件最终会侵占分区内的全部可用空间。

日志的默认配置为不限容量,如果以这种配置工作,它就会不断膨胀,最终也会占据全部可用空间。这两种情况都会导致数据库停止工作。

对交易日志的日常备份工作可以有效的防止日志文件过分消耗磁盘空间。备份过程会将日志中不再需要的部分截除。截除的方法是首先把旧记录标记为非活动状态,然后将新日志覆盖到旧日志的位置上,这样就可以防止SQL Server交易日志的体积不断膨胀。

如果无法对日志进行经常性的备份工作,***将数据库设置为”简单恢复模式”。在这种模式下,系统会强制交易日志在每次记录标记点时,自动进行截除操作,以新日志覆盖旧日志。

截除过程发生在备份或将旧标记点标为非活动状态时,它使得旧的交易记录可以被覆盖,但这并不会减少交易日志实际占用的磁盘空间。就算不再使用日志,它依然会占据一定的空间。因此在维护时,还需要对交易日志进行压缩。压缩交易日志的方法是删除非活动记录,从而减少日志文件所占用的物理硬盘空间。

通过使用DBCC SHRINKDATABASE语句可以压缩当前数据库的交易日志文件,DBCC SHRINKFILE语句用来压缩指定的交易日志文件,另外也可以在数据库中激活自动压缩操作。当压缩日志时,首先会将旧记录标记为非活动状态,然后将带有非活动标记的记录彻底删除。根据所使用的压缩方式的不同,你可能不会立即看到结果。在理想情况下,压缩工作应该选在系统不是非常繁忙的时段进行,否则有可能影响数据库性能。

恢复数据库

交易记录备份可以用来将数据库恢复到某一指定状态,但交易记录备份本身不足以完成恢复数据库的任务,还需要备份的数据文件参与恢复工作。恢复数据库时,首先进行的是数据文件的恢复工作。在整个数据文件恢复完成前,不要将其设为完成状态,否则SQL Server交易日志就不会被恢复。

当数据文件恢复完成,系统会通过交易日志的备份将数据库恢复成用户希望的状态。如果在数据库***一次备份后,存在多个日志文件的备份,备份程序会按照它们建立的时间依次将其恢复。

另一种被称为log shipping的过程可以提供更强的数据库备份能力。当log shipping配置好后,它可以将数据库整个复制到另一台 服务器 上。在这种情况下,SQL Server交易日志也会定期发送到备份服务器上供恢复数据使用。这使得服务器一直处于热备份状态,当数据发生改变时它也随之更新。

另一个服务器被称作监视(monitor)服务器,可以用来监视按规定时间间隔发送的shipping信号。如果在规定时间内没有收到信号,监视服务器会将这一事件记录到事件日志。这种机制使得log shipping经常成

【编辑推荐】


如何查看sql数据库操作日志?

在SQL SERVER 7.0和2000中,可以用下面的命令查看:DBCC log ( {dbid|dbname}, [, type={0|1|2|3|4}] )参数:Dbid or dbname - 任一数据库的ID或名字type - 输出结果的类型:0 - 最少信息(operation, context, transaction id)1 - 更多信息(plus flags, tags, row length)2 - 非常详细的信息(plus object name, index name,page id, slot id)3 - 每种操作的全部信息4 - 每种操作的全部信息加上该事务的16进制信息默认 type = 0要查看MSATER数据库的事务日志可以用以下命令:DBCC log (master)

sql server 镜像库怎么收缩日志文件

1.先分离数据库,然后删除日志文件,再附件数据库。 2.收缩文件,选择日志文件,设置将文件收缩到0M,试了一下,只能从65G收缩到55G,也就是只释放了未使用的空间。 方法 二、1.选中数据库,右键属性/选项,把恢复模式从“完整”改为“简单”。 2.选中数据库,右键任务/收缩文件,选择日志文件,设置将文件收缩为0M,确定。 3.再将恢复模式从“简单”-“完整”即可。 --------------------------------------------------方案1: 所以可以执行以下sql语句:DUMP TRANSACTION 你的数据库名 WITH NO_LOGBACKUP LOG 你的数据库名 WITH NO_LOGDBCC SHRINKDATABASE(你的数据库名)EXEC sp_dboption 你的数据库名, autoshrink, TRUE方案2:在数据库的属性里-选择选项-恢复模式改为“简单”-勾选“自动收缩”。 这样就可以自动进行数据库的收缩,推荐采用这种自动方式进行--------------------------------------------------sqlserver收缩事务日志一、由于系统中录入及删除数据频繁,故事务日志很大。 SQLSERVER中讲:BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 但我在数据库中进行上述操作后,事务日志还是没有改变。 二、只有进行“数据库收缩”操作。 在此复选框中打勾选中上图所示选项,即可点“确定“,执行收缩事务日志的操作,硬盘经过一段时间的工作后,SQLSERVER终于提示收缩成功。 事务日志文件被恢复到原始尺寸。 综上所述,第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 - 所有任务 - 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。 之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了

error

复杂的sql语句怎么写

1、select * from 表 where year(列名) = year(getdate())-1 and month(列名)= 3--这个比较容易理解,就不解释了2、select datepart(wk,dateadd(year,-1,getdate())) -- 去年的今天是去年的第几周select datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate())))-- 去年的本月的1号是去年的第几周select datepart(wk,dateadd(year,-1,getdate())) -datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate())))--上边两者相减就是去年的今天是去年本月的第几周

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐