mssql server日志满的处理方法

server

事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf。
在 SQL Server 7.0 和 SQL Server 2000 中,如果设置了自动增长功能,事务日志文件将会自动扩展。
一般情况下,在能够容纳两次事务日志截断之间发生的最大数量的事务时,事务日志的大小是稳定的,事务日志截断由检查点或者事务日志备份触发。
然而,在某些情况下,事务日志可能会变得非常大,以致用尽空间或变满。通常,在事务日志文件占尽可用磁盘空间且不能再扩展时,您将收到如下错误消息:
Error:9002, Severity:17, State:2
The log file for database ’%.*ls’ is full.
除了出现此错误消息之外,SQL Server 还可能因为缺少事务日志扩展空间而将数据库标记为 SUSPECT。有关如何从此情形中恢复的其他信息,请参见 SQL Server 联机帮助中的“磁盘空间不足”主题。

另外,事务日志扩展可能导致下列情形:
· 非常大的事务日志文件。
· 事务可能会失败并可能开始回滚。
· 事务可能会用很长时间才能完成。
· 可能发生性能问题。
· 可能发生阻塞现象。

原因
事务日志扩展可能由于以下原因或情形而发生:
· 未提交的事务
· 非常大的事务
· 操作:DBCC DBREINDEX 和 CREATE INDEX
· 在从事务日志备份还原时
· 客户端应用程序不处理所有结果
· 查询在事务日志完成扩展之前超时,您收到假的“Log Full”错误消息
· 未复制的事务

解决方法
日志文件满而造成SQL数据库无法写入文件时,可用两种方法:
一种方法:清空日志。
1.打开查询分析器,输入命令
DUMP TRANSACTION 数据库名 WITH NO_LOG
2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。
1: 删除LOG
分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K。

注意:建议使用第一种方法。

如果以后,不想要它变大。
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter database 数据库名 set recovery simple

另外,如上图中数据库属性有两个选项,与事务日志的增长有关:
Truncate log on checkpoint
(此选项用于SQL7.0,SQL 2000中即故障恢复模型选择为简单模型)
当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True
Auto shrink
定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate log on checkpoint 选项设为True 时才能进行。

注意:一般新建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。

时间: 2024-08-03 08:53:34

mssql server日志满的处理方法的相关文章

SQL SERVER 日志满的处理方法

事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf. 在 SQL Server 7.0 和 SQL Server 2000 中,如果设置了自动增长功能,事务日志文件将会自动扩展. 一般情况下,在能够容纳两次事务日志截断之间发生的最大数量的事务时,事务日志的大小是稳定的,事务日志截断由检查点或者事务日志备份触发. 然而,在某些情 事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf. 在 SQL Serv

关于MSSQL数据库日志满的快速解决办法

解决|数据|数据库 先提供一种复杂的方法压缩日志及数据库文件如下: 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG  2.截断事务日志: BACKUP LOG 数据库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   --选择数据文件--在收缩

解决SQL Server日志满问题

本文先提供一种复杂的方法压缩日志及数据库文件. 1.清空日志:DUMP TRANSACTION 库名 WITH NO_LOG. 2.截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG. 3.收缩数据库文件(如果不压缩,数据库的文件不会减小: 企业管理器->右键你要压缩的数据库->所有任务->收缩数据库->收缩文件->选择日志文件->在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了->选择数据文件--在

MSSQL Server禁止记录日志的配置方法

禁掉ldf文件 1.对表进行TRUNCATE TABLE 操作 2.在Simple Recvery Mode下的 SELECT INTO, BCP (Bulk Insert/Bulk Update), CREATE INDEX 以及对于Text/Image数据类型 等的操作. 3.如果使用Full Recovery Mode,所有的操作都将会被记录(还包括数据库备份等) 我觉得在使用大量的删除插入语句的时候如果不想让DB记录log,应该可以在执行语句前执行下列语句将日志记录方式改为simple

mssql server 数据库备份还原方法

mssql server 数据库教程备份还原方法 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性).完全备份也叫完整备份. 差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件.(差异备份过程中,只备份有标记的那些选中的文件和文件夹.它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性). 增量备份: 增量备份是针对于上一次备份(无论是哪种备份

mssql server数据库重命名方法

mssql server数据库重命名方法 create proc killspid (@dbname varchar(20))         as         begin         declare     @sql     nvarchar(500),@temp   varchar(1000)     declare     @spid     int         set     @sql='declare     getspid     cursor     for      

PHP调用Oracle,mysql,mssql server 储存过程方法

下面总结了三种流行的数据库教程如何利用php教程 来调用它们的存储过程,我们讲有mysql教程,oracle,mssql server哦. <?php function check_login($user, $pass) {          $conn = ocilogon('user', 'pass', 'database');          $sql = 'begin :result := test.check_login(:user, :pass); end;';         

mssql server 常用日期函数

mssql server 常用日期函数 你的程序可能需要判断一个月的第一天或者最后一天.你们大部分人大概都知道怎样把日期进行分割(年. 月.日等),然后仅仅用分割出来的年.月.日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和 DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期. 在使用本文中的例子之前,你 必须注意以下的问题.大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定.第一天 (

关于MSSQL SERVER 2005中数据乱码的问题

今天新装了MSSQL SERVER 2005 感觉界面比以前更友好 在想.NET 的界面过度 安装完毕 新建一数据库 插入条记录 发现回显的全部都是 ?????.... 乱码.... 仔细查看了半天 发现数据库的排序规则是德语... 修改方法:数据库属性->选项->排序规则 设置成 CHINESE_PRC_CI_AI 就可以了