`
yizhyi
  • 浏览: 61718 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何删除SQL SERVER 2000的日志文件空间? 选择自 softj 的 Blog

阅读更多
 

首先备份数据库
然后备份文件,备份日志文件,可改名
在 查询分析器里执行 sp_attach_single_file_db,将生成新的日志文件
具体怎么做,我也没做过,让有经验的人回答。,我去收集一下这方面的资料

从大洋网摘录的方法,未试过
用 bcp命令把数据库中的记录都导出来保存到另一台机器,然后用truncate table tablename
的方式把所有记录都清空,然后执行dump transaction dbname with no_log,发现log文件已显著减少,再用bcp命令导入,导入后log文件又增大,但再用 dump transaction dbname with no_log,效果不仅是使日志占的空间减少,日志文件的size也显著减少。

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G!!!
试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL SERVER的一个BUG吧。

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
        @MaxMinutes INT,
        @NewSize INT


USE     Marias             -- 要操作的数据库名
SELECT  @LogicalFileName = 'Marias_log',  -- 日志文件名
@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
        @NewSize = 100                  -- 你想设定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)


DECLARE @Counter   INT,
        @StartTime DATETIME,
        @TruncLog  VARCHAR(255)
SELECT  @StartTime = GETDATE(),
        @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
      AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
      AND (@OriginalSize * 8 /1024) > @NewSize 
  BEGIN -- Outer loop.
    SELECT @Counter = 0
    WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
      BEGIN -- update
        INSERT DummyTrans valueS ('Fill Log') 
        DELETE DummyTrans
        SELECT @Counter = @Counter + 1
      END  
    EXEC (@TruncLog) 
  END  
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

理解日志截断选项
不同的备份日志截断选项经常被DBA新手所忽视。DBA新手通常并不知道选项存在或了解它们的作用。怎样使用或什么时候时候它们,以下的几小节详细解释每个选项的作用以及在什么时候使用它。
    TRUNCATE_ONLY
TRUNCATE_ONLY选项截掉事务日志的非活动部分,而不备份(拷贝)日志到备份设备上。因为日志没有拷贝,所以在使用TRUNCATE_ONLY时,不必指明备份设备。例如,用TRUNCATE_ONLY选项备份主数据库事务日志的语法如下:
Backup Log master
WITH TRUNCATE_ONLY
在以下情况下使用TRUNCATE_ONLY:
如果你不是为了恢复目的使用事务日志,并且依赖于完整数据库备份(完整或差异)。如果没有执行数据库备份就使用TRUNCATE_ONLY选项,你将不能在带有TRUNCATE_ONLY的BACKUP LOG命令执行时,恢复事务日志非活动部分的已完成事务。
NO_LOG
当有NO_LOG选项的BACKUP LOG命令执行时,SQL SERVER不记录BACKUP LOG命令,就截断事务日志的非活动部分。
仅当事务日志完全填满时才使用NO_LOG选项,当日志完全填满时,你不能通过执行一条普通的BACKUP LOG命令来截断事务日志。这样是因为SQL SERVER试图记录BACKUP命令,而在事务日志中却没有剩余空间。和TRUNCATE_ONLY选项一样,NO_LOG选项不需要备份设备,因为日志并不拷贝到设备上去。
NO_TRUNCATE
当你试图进入的数据库被破坏并打算恢复数据库时,使用NO_TRUNCATE选项。要使用NO_TRUNCATE,必须满足以下条件:
事务日志必须和数据库在不同的设备上。
MASTER数据库必须没有被破坏
NO_TRUNCATE记录从最近一次事务日志备份,到数据库破坏点的所有事务日志项。然后恢复事务日志备份作为最近一次备份,它在恢复过程中,可精确到毫秒级。

很多时候,我们被数据库日志文件大小不断在增加而困挠,虽然可以用截短事务日志的命令dump transaction database_name with no_log来使日志占用实际物理log文件的空间的百分比减小,但数据库log文件的把磁盘的空间霸占着不用,使其他的程序所需的空间受到影响。为此,我做了很多次试验,以探讨能够直接减小log文件大小的方法,请方家指教!

根据db_option中的有关选项,在不同设置时,做dump transaction database_name with no_log操作后,发现log文件的total space都不变化,只是used space变小,而free space相应变大。这样的变化意味着,你以后的日志还有可写入的空间,因为空间被预留了。但当这个log文件已经太大,而影响了其他程序的使用空间时,这样的结果并不是我需要的。

后来我做了一个这样的操作,用bcp命令把数据库中的记录都导出来保存到另一台机器的硬盘上。然后用truncate table table_name的方式把所有的记录都清空,然后执行dump transaction database_name with no_log,发现log文件已经显著地减小,再用bcp命令将之前导出的数据导入到数据库中,导入完成后,log文件又增大了,但再用dump transaction database_name with no_log命令操作时,效果不仅是使日志占用空间减少,日志文件的size也显著地减小。


对于以上现象,请有兴趣的同道予以验证,至于这个操作对数据库的物件和完整性是否有影响,还望高手指教!

 

另外:DUMP TRANSACTION mv3 WITH NO_LOG
           先执行这条语句,再收缩

 
分享到:
评论

相关推荐

    sql server事务日志解析工具

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

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

    总之,理解SQL Server日志文件的工作原理以及如何管理和收缩日志文件对于优化数据库性能和管理存储空间至关重要。在进行任何日志文件操作时,应确保对业务的影响最小,并遵循最佳实践,以避免可能的数据丢失或性能...

    删除sql server日志

    根据提供的文件信息,本文将详细解释SQL Server日志删除及管理的相关知识点,包括但不限于日志文件的删除、收缩以及自动收缩设置等。 ### SQL Server 日志管理基础 在SQL Server中,事务日志(Transaction Log)是...

    sqlserver日志查看工具

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

    SQLSERVER日志分析工具

    SQLSERVER日志分析工具是一种专门针对Microsoft SQL Server数据库系统设计的实用软件,旨在帮助数据库管理员和开发者有效地管理和解析SQL Server的日志数据。日志分析在数据库管理中扮演着至关重要的角色,因为它能...

    快速清除SQLServer日志的两种方法

    本文将详细介绍快速清除SQLServer日志的两种方法,包括清空日志和删除LOG文件,并且对每种方法进行了详细的解释和操作步骤。 清空日志 清空日志是快速清除SQLServer日志的第一种方法。这种方法可以通过使用DUMP ...

    将Sql Server 2000中的数据库备份文件还原到sql2005中

    将Sql Server 2000中的数据库备份文件还原到sql2005中 将Sql Server 2000中的数据库备份文件还原到Sql Server 2005中是一个常见的问题。在这个过程中,我们需要了解Sql Server 2000和Sql Server 2005之间的差异,...

    SQL SERVER 2000压缩日志工具

    然而,随着数据库操作的增多,日志文件往往会变得非常庞大,占用大量磁盘空间,这正是"SQL SERVER 2000压缩日志工具"发挥作用的地方。 日志文件,也称为交易日志,记录了数据库的所有更改操作,包括插入、删除和...

    SQL Server 2000 清理日志

    在SQL Server 2000中,数据库日志是一个至关重要的组成部分,用于记录所有的事务信息,包括对数据库的修改操作。然而,随着数据库活动的增加,日志文件可能会变得非常大,占用大量的磁盘空间,这可能会影响系统性能...

    sqlserver2000没有日志文件如何恢复数据库

    在SQL Server 2000中,当数据库的日志文件丢失或者损坏时,恢复数据库的过程变得复杂。然而,根据给出的步骤,我们可以看到一个没有日志文件时的应急恢复策略。以下是对这些步骤的详细解释: 1. **开启数据库**:...

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

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

    java提取并分析sqlserver的日志

    在Windows系统中,SQL Server错误日志通常位于`%ProgramFiles%\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\LOG`目录下,交易日志则与数据库文件在同一目录下。 3. **Java连接SQL Server**: 要从SQL Server...

    sqlserver 2000 8版本jdbc驱动

    SQLServer 2000是微软公司推出的一款关系型数据库管理系统,它在企业级应用中广泛使用。在Java编程环境中,我们通常会使用JDBC(Java Database Connectivity)驱动来与SQLServer进行数据交互。JDBC驱动是Java语言...

    SQLServer日志清理工具

    SQL Server日志清理工具是一款专为SQL Server数据库设计的实用软件,主要用于管理和优化数据库的日志文件,以确保系统的高效运行和稳定性能。日志文件在SQL Server中扮演着至关重要的角色,它们记录了所有事务的详细...

    如何解决SQL Server日志满问题

    但是,随着数据的增长,SQL Server 的日志文件也会不断增长,占用越来越多的磁盘空间。如果不及时处理,日志文件的增长可能会导致数据库性能下降、甚至崩溃。因此,如何解决 SQL Server 日志满问题变得非常重要。 ...

    SQLServer2000版本的驱动包

    在IT行业中,数据库管理系统是数据存储和管理的核心工具,而SQL Server 2000作为微软公司推出的一款经典关系型数据库管理系统,对于许多企业和开发者来说,仍然是他们系统架构中的重要组成部分。本文将深入探讨SQL ...

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

    SQL SERVER的Always On技术是一种高可用性和灾难恢复解决方案,它提供了数据库级别的容错能力。在Always On环境中,数据库被分为主副本和一...正确处理这些问题,可以帮助优化日志空间使用,同时保持数据库的高可用性。

    SQL_Server_2008删除或压缩数据库日志的方法.doc

    标题与描述均指向了一个具体的技术问题的解决方法——在SQL Server 2008中如何删除或压缩数据库日志。这一需求通常出现在日志文件占用过多磁盘空间,或者备份过程耗时过长,影响正常业务操作的情况下。下面将详细...

    利用日志恢复SQLServer2000数据

    在探讨如何利用SQL Server 2000中的日志恢复数据库之前,首先要了解SQL Server 2000是一个关系型数据库管理系统,由微软公司开发。它提供了一系列用于存储、检索和操作数据的工具。数据库日志文件(通常以.ldf为扩展...

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

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

Global site tag (gtag.js) - Google Analytics