zoukankan      html  css  js  c++  java
  • SQL Server 2005(2000) 日志删除和日志文件限制(转)

    清除 SQL SERVER 2005 事务日志(方法一) 

    1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)]
    2.输入以下SQL语句,其中“TestDB”是数据库名称

    DUMP TRANSACTION TestDB WITH NO_LOG
    3.执行该SQL,成功后继续以下操作

    4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)]

    5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)”

    6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。


    SQL Server 2005 Standard Edtn(方法二)
    现在数据库为镜像备份,设置为高可用性(最高安全性、带故障转移的热备份)模式,日志增长非常快.
    日志文件现在有50G,而且日志文件没有限制大小,请指教:

    1、怎么删除日志文件?谢谢能提供具体的操作步骤,

    2、如何设置可循环覆盖的日志文件空间?
    (镜像模式下,简单的在属性里设置限制空间大小,一旦日志文件超过大小,会报 日志空间已满的err信息)

    清除日志:

     

     

    DECLARE @LogicalFileName sysname,

            @MaxMinutes INT,

            @NewSize INT

    USE     szwzcheck             -- 要操作的数据库名

    SELECT  @LogicalFileName = 'szwzcheck_Log',  -- 日志文件名

    @MaxMinutes = 10,               -- Limit on time allowed to wrap log.

            @NewSize = 20                  -- 你想设定的日志文件的大小(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

          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

     

    把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。

    有全角的空格(为了显示好看),你自己把他换一下.

     

     

    收缩日志:

     

    企业治理器--所有任务--收缩数据库--文件--选日志文件收缩


    网友回复:上面一个可行.
    再转一个.

    1: 删除LOG
    1:分离数据库 企业治理器->服务器->数据库->右键->分离数据库
    2:删除LOG文件
    3:附加数据库 企业治理器->服务器->数据库->右键->附加数据库
    此法生成新的LOG,大小只有500多K
    再将此数据库设置自动收缩
    或用代码:
    下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

    EXEC sp_detach_db @dbname = 'pubs'
    EXEC sp_attach_single_file_db @dbname = 'pubs',
    @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


    2:清空日志
    DUMP TRANSACTION 库名 WITH NO_LOG

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

    3: 假如想以后不让它增长
    企业治理器->服务器->数据库->属性->事务日志->将文件增长限制为2M

    镜像模式下,
    1、怎么删除/压缩 日志文件?
    --假如必要的话,可以先停止镜像,删除日志后,再重新镜像,这样的思路是否可行?

    2、怎么设置可循环的日志文件空间?
    网友回复:1. 无法删除, 因为镜像要用这些信息, 假如你重建镜像, 当然可以删除, 但似乎过段时间就重建不是什么好主意
    2. 没有设置, 也不用设置, 假如日志空间可用, sql 会重用


    所以只能建议你找原因, 再想解决办法
    网友回复:关于日志文件,

    自动增长限制 为20G,一旦ldf超过20G,数据库会err,数据库日志空间已满,无法写入.

    这个原因是不是在镜像模式下,虽然限制了数据库日志空间大小,但是无法重复使用?
    网友回复:LZ的日志空间假如设置为无限制增大,是否有自动备份日志的作业在运行?
    假如没有的话,每个完成的事务都写到日志文件,就越来越大了

    SQLSERVER2000

    --压缩日志及数据库文件大小  
       
      1.清空日志  
      DUMP     TRANSACTION     库名     WITH     NO_LOG          
       
      2.截断事务日志:  
      BACKUP   LOG   数据库名   WITH   NO_LOG  
       
      3.收缩数据库文件(如果不压缩,数据库的文件不会减小  
      企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件  
      --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了  
      --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了  
       
      也可以用SQL语句来完成  
      --收缩数据库  
      DBCC   SHRINKDATABASE(客户资料)  
       
      --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles  
      DBCC   SHRINKFILE(1)  
       
      4.为了最大化的缩小日志文件  
      a.分离数据库:  
      企业管理器--服务器--数据库--右键--分离数据库  
       
      b.在我的电脑中删除LOG文件  
       
      c.附加数据库:  
      企业管理器--服务器--数据库--右键--附加数据库  
       
      此法将生成新的LOG,大小只有500多K  
       
      或用代码:    
      下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。  
       
      a.分离  
      EXEC   sp_detach_db   @dbname   =   'pubs'  
       
      b.删除日志文件  
       
      c.再附加  
      EXEC   sp_attach_single_file_db   @dbname   =   'pubs',    
            @physname   =   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\pubs.mdf'  
       
      5.为了以后能自动收缩,做如下设置:  
      企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"  
       
      --SQL语句设置方式:  
      EXEC   sp_dboption   '数据库名',   'autoshrink',   'TRUE'  
       
      6.如果想以后不让它日志增长得太大  
      企业管理器--服务器--右键数据库--属性--事务日志  
      --将文件增长限制为xM(x是你允许的最大数据文件大小)  
       
      --SQL语句的设置方式:  
      alter   database   数据库名   modify   file(name=逻辑文件名,maxsize=20)  

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/GeneralXU/p/1425829.html
Copyright © 2011-2022 走看看