`

SQL日志文件总结及日志满的处理

阅读更多

 

吾阅:使用

DUMP TRANSACTION 数据库名 WITH NO_LOG  可清空日志,只是不知道会有没有什么副作用;

 

以下已验证:

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

 

--------------------------------------------------------------------------------------------------

 

转自:http://gsq18.spaces.live.com/blog/cns!ee0c339dcd884f89!242.entry

SQL日志文件总结及日志满的处理

SQL日志文件总结及日志满的处理

     交易日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。
    
    交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态。从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。 
出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入交易日志,但不会立即写入数据文件。交易日志会通过一个标记点来确定某个交易是否已将缓存中的数据写入数据文件。当SQL Server重启后,它会查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正的将缓存中的数据写入数据文件。这可以防止那些中断的交易修改数据文件。 
    维护交易日志
    因为很多人经常遗忘交易日志,因此它也会给系统带来一些问题。随着系统的不断运行,日志记录的内容会越来越多,日志文件的体积也会越来越大,最终导致可用磁盘空间不足。除非日常工作中经常对日志进行清理,否则日志文件最终会侵占分区内的全部可用空间。日志的默认配置为不限容量,如果以这种配置工作,它就会不断膨胀,最终也会占据全部可用空间。这两种情况都会导致数据库停止工作。 
    对交易日志的日常备份工作可以有效的防止日志文件过分消耗磁盘空间。备份过程会将日志中不再需要的部分截除。截除的方法是首先把旧记录标记为非活动状态,然后将新日志覆盖到旧日志的位置上,这样就可以防止交易日志的体积不断膨胀。如果无法对日志进行经常性的备份工作,最好将数据库设置为"简单恢复模式"。在这种模式下,系统会强制交易日志在每次记录标记点时,自动进行截除操作,以新日志覆盖旧日志。 
    截除过程发生在备份或将旧标记点标为非活动状态时,它使得旧的交易记录可以被覆盖,但这并不会减少交易日志实际占用的磁盘空间。就算不再使用日志,它依然会占据一定的空间。因此在维护时,还需要对交易日志进行压缩。压缩交易日志的方法是删除非活动记录,从而减少日志文件所占用的物理硬盘空间。 
    通过使用DBCC SHRINKDATABASE语句可以压缩当前数据库的交易日志文件,DBCC SHRINKFILE语句用来压缩指定的交易日志文件,另外也可以在数据库中激活自动压缩操作。当压缩日志时,首先会将旧记录标记为非活动状态,然后将带有非活动标记的记录彻底删除。根据所使用的压缩方式的不同,你可能不会立即看到结果。在理想情况下,压缩工作应该选在系统不是非常繁忙的时段进行,否则有可能影响数据库性能。 
    恢复数据库
    交易记录备份可以用来将数据库恢复到某一指定状态,但交易记录备份本身不足以完成恢复数据库的任务,还需要备份的数据文件参与恢复工作。恢复数据库时,首先进行的是数据文件的恢复工作。在整个数据文件恢复完成前,不要将其设为完成状态,否则交易日志就不会被恢复。当数据文件恢复完成,系统会通过交易日志的备份将数据库恢复成用户希望的状态。如果在数据库最后一次备份后,存在多个日志文件的备份,备份程序会按照它们建立的时间依次将其恢复。 
    另一种被称为log shipping的过程可以提供更强的数据库备份能力。当log shipping配置好后,它可以将数据库整个复制到另一台服务器上。在这种情况下,交易日志也会定期发送到备份服务器上供恢复数据使用。这使得服务器一直处于热备份状态,当数据发生改变时它也随之更新。另一个服务器被称作监视(monitor)服务器,可以用来监视按规定时间间隔发送的shipping信号。如果在规定时间内没有收到信号,监视服务器会将这一事件记录到事件日志。这种机制使得log shipping经常成为灾难恢复计划中使用的方案。 
据微软的人说如果你的数据库文件坏掉了,有这个日志他们有办法帮助你恢复数据库,但是由于方法并不公开,所以对于我们来说,这只是占空间的东西。
    性能优化
    交易日志对数据库有重要作用,同时它对系统的整体性能也有一定影响。通过几个选项,我们可以对交易日志的性能进行优化。由于交易日志是一个连续的磁盘写入过程,在这当中不会发生读取动作。因此将日志文件放在一个独立的磁盘,对优化性能有一定作用。 
    另一项优化措施与日志文件的体积有关。我们可以设置日志文件的体积不超过硬盘空间的百分之几,或者确定它的大小。如果将其设置的过大会浪费磁盘空间,而如果设置的过小则会强制记录文件不断尝试扩展,导致数据库性能下降。
    事务日志文件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: 分離數據庫
分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件,附加數據庫
備份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 时才能进行。

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

 如何修复被删除的SQL日志文件

     事务日志文件(ldf)在SQL Server服务未启动的情况下被删除(SQL Server在工作状态下是无法删除日志文件),这种情况下启动SQL服务后,相应数据库即被标志成置疑(suspend)状态。恢复方法: 一是分离被置疑的数据库,可以使用sp_detach_db ;二是附加数据库,可以使用sp_attach_single_file_db。SQL2K下可以直接在EM环境下完成这些操作,如果是SQL7则需要在QA里完成操作。此方法适用于被删除日志文件中不存在活动日志的情况,如果有活动事务,将不会成功。
1、确定SQL数据库的安装路径与所用的SQL数据库名称。
    如:e:\Program Files\Microsoft SQL Server\MSSQL\Data\J200.mdf'
    2、将数据库J200重命名为其他名,如J2008,什么名都可以。
    3、利用您所用的系统,重新新建一个“J200”的数据库。
    4、点击开始--程序--Microsoft SQL Server--查询分析器--确定,进入软件里,在空白处直接输入以下的命令:
EXEC sp_detach_db @dbname = 'J200'
return
EXEC sp_attach_single_file_db @dbname = 'J200', 
@physname = 'e:\Program Files\Microsoft SQL Server\MSSQL\Data\J200.mdf'
    以上命令即是将J200的数据库与日志文件分离。
    5、输入命令后,点击菜单查询--执行,下面对话框出现命令命令已成功完成。
    6、将刚才输入命令中的“EXEC sp_detach_db @dbname = ' J2002' return”删除,保留如下命令:
 EXEC sp_attach_single_file_db @dbname = 'J200', 
@physname = 'e:\Program Files\Microsoft SQL Server\MSSQL\Data\J200.mdf'
    7、进入安装SQL数据库路径里将J200的二个文件删除,然后把“J2008”的文件再更名为“J200”。
    8、重复第5点做法,点击菜单查询--执行。系统将出现下面对话框的命令设备激活错误。物理文件名 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\J200.ldf' 可能有误。已创建名为 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\j200.LDF' 的新日志文件。
    9、退出即可。

如何恢复SQL Server中删除的数据库

      因误删除了SQL Server中的数据库,用EasyRecovery進行恢復。
      恢复步骤:
      1、运行EasyRecovery。
      2、选择“DeletedRecovery”。
      3、选择数据库文件所在的驱动器,在“File Filter”中输入*.mdf|*.ldf,选择“Next”。
      4、在左侧窗口会列出被删除的数据库文件,选择所要恢复的数据库文件,选择“Next”。
      5、在“Recover to Local Drive”中选择恢复后的文件存放的路径,要选择与原数据库文件不同的路径,选择“Next”。
      6、文件被恢复后,将恢复的文件复制到原数据库文件位置,并在企业管理器通过附加数据库,将恢复的文件恢复到SQL Server中。
      
      注:如果删除的数据库文件所有的存储区域被写过了,就无法恢复了,所以删除与恢复的时间间隔越短越好。
分享到:
评论

相关推荐

    SQL Server日志文件总结及充满处理方式

    ### SQL Server日志文件总结及充满处理方式 #### 一、SQL Server交易日志概述 在SQL Server中,交易日志(Transaction Logs)是数据库管理中不可或缺的一部分,它记录了所有针对数据库的操作变化,包括但不限于增删...

    SQL日志文件太大的清理方法

    在IT领域,尤其是在数据库管理与维护中,SQL日志文件过大是常见的问题之一,它不仅占用大量磁盘空间,还可能导致系统性能下降,甚至影响到数据的安全性与完整性。因此,掌握有效的SQL日志文件清理方法对于保持数据库...

    修复SQL日志文件.txt

    根据提供的文件信息,我们可以归纳出以下关键知识点,主要聚焦于SQL Server数据库的日志文件修复、配置及维护等方面。 ### 1. SQL Server 日志文件修复基础 #### 1.1 概念理解 - **日志文件(Log Files)**:在SQL...

    SQL SERVER Always On收缩日志文件详细操作及问题处理(已亲测通过)

    在SQL SERVER Always On环境下收缩日志文件通常涉及以下步骤: 1. **备份日志**:首先,需要备份事务日志,这可以通过`BACKUP LOG`命令实现。在这个例子中,日志被备份到`NUL:`设备,这意味着日志备份不占用实际...

    SQL Server无法收缩日志文件的原因分析及解决办法

    在SQL Server中,日志文件(也称为 transaction log file)用于记录所有事务的更改,确保数据的完整性和可恢复性。然而,在某些情况下,日志文件可能会占用过多的空间,这时通常需要进行收缩操作来释放不必要的空间...

    Spark SQL 日志处理实战,日志文件20000行

    Spark SQL 日志处理实战,日志文件20000行

    SQL 数据日志文件压缩

    压缩工具"SQL数据压缩.exe"可能是一个第三方软件,它可能提供了自动化处理日志文件过大问题的功能,包括压缩数据、清理日志等。使用这样的工具,用户无需手动执行复杂的SQL语句或调整数据库设置,从而简化了数据库...

    ms sql 日志文件压缩

    在Microsoft SQL Server数据库管理系统中,日志文件(.ldf文件)存储了所有数据库的事务日志信息,包括数据修改、备份和恢复等操作。这些日志对于数据库的正常运行和故障恢复至关重要。然而,随着时间的推移,日志...

    SQLServer处理事务日志文件过大方法

    ### SQL Server处理事务日志文件过大方法 #### 一、问题背景 在SQL Server数据库管理系统中,事务日志文件(Transaction Log File)是用于记录所有事务更改的关键组件之一。随着数据库活动的增加,特别是当数据库...

    sql server数据库日志满的处理方法

    对于SQL Server 7.0及更高版本,可以考虑分离数据库,删除并重新创建日志文件,然后重新附加数据库。步骤如下: - 使用`sp_detach_db`存储过程分离数据库。 - 删除旧的日志文件。 - 创建新的日志文件。 - 使用`...

    SQLServer日志文件太大如何解决

    2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。 ........................

    SQL2000只有数据库文件没有日志文件的附加方法

    SQL 2000 提供了多种方式来附加数据库文件,但是如果只有数据库文件没有日志文件,那么恢复起来就会变得非常麻烦。下面我们将讨论如何使用 sp_attach_db 或者 sp_attach_single_file_db 来恢复数据库,并且解决可能...

    SQL 2008日志收缩 清空删除大日志文件

    在SQL Server 2008中,日志文件的管理和收缩相比SQL Server 2005有所不同,主要是因为SQL Server 2008对数据库的日志处理进行了优化。日志文件(.ldf)主要用于存储数据库事务日志,是确保数据完整性和可恢复性的...

    sql server事务日志解析工具

    你是否想读取和分析SQL Server日志文件 (.ldf) ?正找不到合适的软件呢?以上一款强大的sql数据库日志分析工具,可以轻松打开查看ldf,mdf日志文件,还可以连接sql数据库进行分析。 事务日志是数据库的一个关键组件。...

    sqlserver日志查看工具

    Log Explorer 4.2 是一款专门针对Microsoft SQL Server的日志分析软件,提供了丰富的功能来管理和分析SQL Server的日志文件。 1. **SQL Server日志类型**: - **事务日志**:记录所有数据库更改操作,包括DML...

    SQL日志清理压缩工具

    当SQL日志文件过大时,可以通过以下几种方式来处理: 1. **重置日志**:通过`DBCC SHRINKFILE`命令可以尝试减小日志文件的大小,但这只适用于事务日志。它会释放未使用的空间,但不会清除日志内容。在清理前,需...

    清除sql日志文件工具

    SQL日志文件是数据库系统的重要组成部分,主要用于记录数据库的各种操作,如事务的开始、结束、错误等信息。在SQL Server中,主要有两种日志类型:事务日志(Transaction Log)和错误日志(Error Log)。当这些日志...

    SQL2005 压缩日志及数据库文件大小

    在SQL Server 2005中,管理和优化数据库文件大小,特别是日志文件,是数据库管理员常见的任务。随着数据库的使用,日志和数据文件可能会不断增长,占用大量磁盘空间,这可能导致性能下降甚至存储不足的问题。以下是...

    SQL数据库日志清理工具

    SQL日志清理的主要目的是优化日志文件的大小,释放不必要的空间,确保数据库系统的高效运行。清理过程通常涉及以下步骤: 1. **检查点**:首先,系统会确保所有的脏页(未写入磁盘的数据页)都已刷新到数据文件,...

Global site tag (gtag.js) - Google Analytics